中科国庆助力白癜风康复 http://news.39.net/bjzkhbzy/171121/5863494.html一、需求说明
系统要求:
Centos8操作系统
负载均衡
通过Nginx实现地址轮询
测试环境
通过docker环境制作两个简单的nginx前端页面,分别是nginx1和nginx2
通过部署Nginx负载,实现两个地址的轮询
二、负载均衡的方式负载均衡有种方式:
循环机制:循环分发对应用服务器的请求
最少连接机制:将请求发送给连接数最少的服务器
ip-hash机制:哈西函数用于确定请求被配那个服务器(基于客户端IP地址)
轮询机制每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
优点:方式简便、成本低廉。
缺点:可靠性低和负载分配不均衡。
代码示例:
upstreambalance{
serverip地址1;
serverip地址2;
}
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
权重越高,在被访问的概率越大,如下例,分别是0%,70%。
upstreambalance{
serverip地址1weight=;
serverip地址2weight=7;
}
2.最少连接机制当某些请求耗费较长时间完成时,最少连接机制能让实例的负载更加均衡
在最少连接机制下nginx不会让大量请求使应用服务器超载,而是将请求分发至相对“悠闲”的服务器。
轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
代码示例:
当least_conn指令用在服务器组配置中时,最少连接机制就生效了。
upstreamblance{
least_conn;#把请求转发给连接数较少的后端服务器serverip地址1;serverip地址2;serverip地址;}
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。
.ip-hash机制请注意循环或者最少连接数负载均衡机制,可能将同一客户端的请求分发至不同的服务器,无法保证相同客户端的请求总是会被指向相同服务器。
比如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,所以为了使客户端请求总是分发向特定的服务器,就需要ip-hash负载均衡机制,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器(除非服务器不可用),可以解决session不能跨服务器的问题。
代码示例:
不加权重
upstreammyapp1{
ip_hash;serverip地址1;serverip地址2;serverip地址;}
服务器权重没有配置,意味着所有服务器等权重的应用于负载均衡。循环机制下大量请求以统一的方式处理,各服务器基本会被分发数量相等的请求。权重参数指定给服务器,权重就作为负载均衡的决定条件。
添加加权重
upstreammyapp1{
ip_hash;serverip地址1weight=;serverip地址2;serverip地址;}
在上面的配置中每5个请求,个会被指向ip地址1,1个指向ip地址2,1个指向ip地址。
此策略适合有状态服务,比如session,当有服务器需要剔除,必须手动down掉。
4.其他机制还有一些机制需要通过安装第三方插件来实现,比如:fair、url_hash
1)fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
#实现响应时间短的优先分配
upstreamdynamic_tsingxin{
serverip地址1;
serverip地址2;
fair;
}
2)url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
#实现每个url定向到同一个后端服务器
upstreamdynamic_tsingxin{
serverip地址1;
serverip地址2;
hashrequest_uri;
hash_methodcrc2;
}
注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
三、负载状态设置:1.down:表示单前的server暂时不参与负载
2.weight:默认为1。weight越大,负载的权重就越大
.max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间
5.backup:预留的备份服务器。其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
6.max_conns:限制最大的接收连接数
四、Nginx安装注:如果你使用的是CentOS8,直接使用第三步命令即可安装。
第一步:安装yum-utilsyuminstallyum-utils
[root
LoadBalanceyum.repos.d]#yuminstallyum-utilsLastmetadataexpirationcheck:0:00:51agoonFri0Apr:45:05PMCST.
Dependenciesresolved.
==================================================================================================
PackageArchitectureVersionRepositorySize
==================================================================================================
Installing:
yum-utilsnoarch4.0.17-5.el8baseos68k
TransactionSummary
==================================================================================================
Install1Package
Totaldownloadsize:68k
Installedsize:20k
Isthisok[y/N]:y
DownloadingPackages:
yum-utils-4.0.17-5.el8.noarch.rpm52kB/s
68kB00:00
-----------------------------------------------------------------------------------
Total79kB/s
68kB00:00
Runningtransactioncheck
Transactionchecksucceeded.
Runningtransactiontest
Transactiontestsucceeded.
Runningtransaction
Preparing:1/1
Installing:yum-utils-4.0.17-5.el8.noarch1/1
Runningscriptlet:yum-utils-4.0.17-5.el8.noarch1/1
Verifying:yum-utils-4.0.17-5.el8.noarch1/1
Installed:
yum-utils-4.0.17-5.el8.noarch
Complete!
第二步:创建nginx.repo文件/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginxstablerepo
baseurl=