轮询(rr)-默认策略
:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器故障,故障系统自动清除,使用户访问不受影响。轮询权值(weight)
:weight值越大,分配到的访问几率越高,主要用于后端每个服务器性能不均的情况。ip_hash
:每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器,主要解决动态网站session共享的问题。least_conn
: 最少链接数,那个机器连接数少就分发。url_hash-第三方
:按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率,nginx本身不支持,如果想使用需要安装nginx的hash软件包。fair-第三方
:这个算法可以依据页面大小和加载时间长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求,相应时间短的优先分配,默认不支持,如果想使用需要安装upstream_fail模块。upstream lakerService#自定义组名 { ip_hash; server 192.168.0.1:8080 weight=1 max_fails=3 fail_timeout=15; server 192.168.0.1:8081 weight=1 max_fails=3 fail_timeout=15; server 192.168.0.1:8082 down; server 192.168.0.1:8032 backup; server x2.baidu.com; #可以是域名 #down 不参与负载均衡 #weight=5; 权重,越高分配越多,默认为1。 #backup; 预留的备份服务器,其他所有的非backup机器挂了或者忙的时候,才会请求这个backup机器。 #max_fails 某台server请求允许失败的次数,默认为1。 超过设置次数后,在fail_timeout时间内,新请求不会分配给这机器。 #fail_timeout 超过失败次数后,服务暂停时间,默认为10秒。 某台server达到max_fails次数后,在fail_timeout时间内,nginx认为这台server不可用,不会转发请求给它。 #max_coons 限制分配给某台server最大的接受的连接数,超过设置数量,将不会分配给它新连接,默认为0表示不限制。 #根据服务器性能不同,配置适合的参数 #server 106.xx.xx.xxx; 可以是ip #server 106.xx.xx.xxx:8080; 可以带端口号 #server unix:/tmp/xxx; 支出socket方式 }
- max_fails 允许请求失败的次数,默认是1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。0表示禁止失败尝试,企业场景:2-3次,京东1次,蓝汛10次,根据业务需求去配置。
- fail_timeout,在经历了max_fails次失败后,暂停服务的时间。京东是3s,蓝汛是3s,根据业务需求配置。常规业务2-3秒合理。
例:如果max_fails是5,他就检测5次,如果五次都是502.那么,他就会根据fail_timeout 的值,等待10秒,再去检测。
http { # 定义了一个负载均衡池 upstream lakerService { # 最大失败次数 3 次,超过 3 次失败后,20 秒内不检测。 server 192.168.10.24:8080 max_fails=1 fail_timeout=5s; server 192.168.10.24:8081 max_fails=1 fail_timeout=5s; } server { listen 80; location / { # 故障转移策略,当后端服务器返回如下错误时,自动负载到后端其余机器 proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header; proxy_pass http://lakerService; } } }