一、负载均衡
1.1 NGINX -内置负载策略
轮循(默认)
Nginx根据请求次数,将每个请求均匀分配到每台服务器
最少连接 least_conn
将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少
IP Hash
绑定处理请求的服务器。第一次请求时,根据该客户端的IP算出一个HASH值,将请求分配到集群中的某一台服务器上。后面该客户端的所有请求,都将通过HASH算法,找到之前处理这台客户端请求的服务器,然后将请求交给它来处理.
weight
根据配置的权重来分配请求的处理服务器.
1)轮询
http { # ... 省略其它配置 upstream tomcats { server 192.168.0.100:8080; server 192.168.0.101:8080; server example.com:8080; } server { listen 80; location / { proxy_pass http://tomcats; } } # ... 省略其它配置 }
2)最少连接 least_conn
http { # ... 省略其它配置 upstream tomcats { server 192.168.0.100:8080; server 192.168.0.101:8080; server example.com:8080; }
upstream tomcats { least_conn; #把请求转发给连接数较少的后端服务器 }
3)IP Hash
http { # ... 省略其它配置 upstream tomcats { server 192.168.0.100:8080; server 192.168.0.101:8080; server example.com:8080; }
upstream tomcats {
ip_hash; #保证每个访客固定访问一个后端服务器 }
4)weight 权重方式
#weight 默认为1,将请求平均分配给每台server upstream tomcats { server 192.168.0.100:8080 weight=2; # 2/6次 server 192.168.0.101:8080 weight=3; # 3/6次 server 192.168.0.102:8080 weight=1; # 1/6次 } #max_fails 默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态,然后将请求发给定义了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream指令来处理这次错误的请求。 #fail_timeout 默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它 upstream tomcats { server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15; server 192.168.0.101:8080 weight=3; server 192.168.0.102:8080 weight=1; } 192.168.0.100这台机器,如果有3次请求失败,nginx在15秒内,不会将新的请求分配给它。 #backup 备份机,所有服务器挂了之后才会生效 upstream tomcats { server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15; server 192.168.0.101:8080 weight=3; server 192.168.0.102:8080 backup; } 在100和101都挂了之前,102为不可用状态,不会将请求分配给它。只有当100和101都挂了,102才会被启用。 #down 标识某一台server不可用。可能能通过某些参数动态的激活它吧,要不真没啥用。 upstream tomcats { server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15; server 192.168.0.101:8080 down; server 192.168.0.102:8080 backup; } 表示101这台Server为无效状态,不会将请求分配给它。 #max_conns 限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置 upstream tomcats { server 192.168.0.100:8080 max_conns=1000; } 表示最多给100这台Server分配1000个请求,如果这台Server正在处理1000个请求,nginx将不会分配新的请求给到它。假如有一个请求处理完了,还剩下999个请求在处理,这时nginx也会将新的请求分配给它。 #resolve 将server指令配置的域名,指定域名解析服务器。需要在http模块下配置resolver指令,指定域名解析服务 http { resolver 10.0.0.1; upstream u { zone ...; ... server example.com resolve; } }
1.2 第三方负载策略
1)fair
根据服务器的响应时间来分配请求,响应时间短的优先分配,即负载压力小的优先会分配
#需先安装fair模块 upstream tomcats { fair; server 192.168.0.100:8080; server 192.168.0.101:8080; server 192.168.0.102:8080; }
2)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取
upstream tomcats { server 192.168.0.100:8080; server 192.168.0.101:8080; server 192.168.0.102:8080; hash $request_uri; }