nginx 负载均衡5种配置方式
-
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
} -
ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
} -
fair(公平,第三方)
fair策略是扩展策略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此要慎用。
upstream backend {
server server1;
server server2;
fair;
} -
通用hash、一致性hash
这两种也是扩展策略,在具体的实现上有些差别,通用hash比较简单,可以以nginx内置的变量为key进行hash,一致性hash采用了nginx内置的一致性hash环,可以支持memcache。
对上面的集中负载均衡算法进行测试(测试工具polygraph),考察下面三个关键的测试指标:
均衡性:是否能够将请求均匀的发送给后端
一致性:同一个key的请求,是否能落到同一台机器
容灾性:当部分后端机器挂掉时,是否能够正常工作
_ tips: 在需要使用负载均衡的server中增加 proxy_pass http://bakend/; _
_ 当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。_
无论哪种策略都不是万金油,在具体的场景下应该选择哪种策略一定程度上依赖于使用者对这些策略的熟悉程度: