首页 > 代码库 > Nginx学习笔记07负载均衡之(二)主机分配策略和主机失效参数
Nginx学习笔记07负载均衡之(二)主机分配策略和主机失效参数
1.1.1. 主机失效参数配置
Nginx的upstream配置块中的server配置项提供了多个参数来控制主机失效时如何处理,用于提高负载均衡配置的实用性。
参数 |
描述 |
weight |
主机的权重。默认为1。 |
max_fails |
主机失败的最大次数。默认为1。超过此次数主机临时不可用。值为0表示不对此主机做失败检查。 |
fail_timeout |
主机超过max_fails次数后在fail_timeout时间内临时不可用。默认为10秒。 |
down |
永久不可用。参与ip_hash。 |
backup |
备份主机,不参与。仅仅在非备份主机全部不可用后才使用。 |
1.1.2. 主机分配策略
Nginx支持几种主机分配策略来决定将每一个用户请求转发到哪一个主机(上游服务器)。
(1)按次序依次轮询。
按照在upstream中配置的server的次序,每次选择一个主机进行转发。当主机不可用时,可自动回避。
在如下配置下,依次访问tomcat101,tomcat141,tomcat142,tomcat101,tomacat142,.....。
upstream tomcat {
server tomcat101.coe2coe.me:8080;
server tomcat141.coe2coe.me:8080;
server tomcat142.coe2coe.me:8080;
}
(2)按权重分配主机。
weight值(权重)越大,访问几率越大。访问的次序还是按照在upstream中配置的server的次序,权重大的会多访问几次。
权重策略适用于不同主机具有不同性能从而负载能力有较大差异的情况。可以让负载能力高的主机具有较大权重。
在如下配置中,tomcat101被访问的次数会多一些,tomcat141相对较多,tomcat142相对较少。
upstream tomcat {
server tomcat101.coe2coe.me:8080 weight=6;
server tomcat141.coe2coe.me:8080 weight=3;
server tomcat142.coe2coe.me:8080 weight=1;
}
实测结果:
在前10次访问中,依次访问以下主机:
101, 101,141,142,141,101,101,141,142,141。
其中101:4次, 141:4次,142:2次,由此可见,权重只是统计意义上的概率大小而已,需要访问次数较多才能较好的体验权重的量化的比例影响,在访问次数较少时只能得到大体趋势。
(3)ip_hash
根据用户ip地址决定使用哪个主机。用于将每个用户的请求转发到一个固定的主机。可以理解为使用用户ip地址计算出一个hash值,根据这个hash值决定访问哪个主机。因此,用户ip地址没变化时,总是访问同一个主机。
在某些情况下,ip_hash策略可以简化session的管理。比如nginx服务器作为前端服务器,而nginx后面的主机服务器是应用服务器,比如tomcat。此时每个用户ip对应一个tomcat主机,每个用户的session数据只需要在一个对应的tomcat主机上维护。
在另外一些情况下,如果使用ip_hash的nginx服务器的后面仍然是一个存在其它主机分配策略的nginx服务器,再后面才是应用服务器,此时ip_hash策略的效果就会较弱或消失。
此处所提到的用户ip,不是浏览器所在的用户计算机的局域网ip地址,而是Nginx检测到的用户的远端ip地址。因此在Internet上,同一个局域网内的用户,Nginx看到的用户ip其实是同一个ip地址;即使是异地的具有不同外网ip的用户,由于hash的关系,在ip地址数大于nginx后端的主机数的情况下,扔有可能选择到相同的后端主机。
配置内容:
upstream tomcat {
server tomcat101.coe2coe.me:8080;
server tomcat141.coe2coe.me:8080;
server tomcat142.coe2coe.me:8080;
ip_hash;
}
在编写本文时,分别在ip地址为以下地址的计算机(虚拟机)上访问:
http://ng.coe2coe.me:8000/hello/
192.168.197.101
192.168.197.141
192.168.197.142
采用了ip_hash策略,结果全部转发到了192.168.197.142上。
(4)公平策略。
Nginx根据后端主机(上游服务器)的响应时间长短来决定每一个用户请求转发到哪一个后端主机。这是一个第三方模块,本文暂不展开讨论。有需要的朋友可以参考:
https://www.nginx.com/resources/wiki/modules/fair_balancer/
upstream backend {
server server1;
server server2;
fair;
}
(5)hash策略。
Nginx根据指定的参数作为hash的key来决定如何选择后端主机。
这是一个第三方模块,本文暂不展开讨论。有需要的朋友可以参考:
https://www.nginx.com/resources/wiki/modules/ketama_chash/
可选择对$uri变量进行hash。
upstream backend {
server server1;
server server2;
ketama_chash $uri;
}
Nginx学习笔记07负载均衡之(二)主机分配策略和主机失效参数