nginx负载均衡的5种策略

nginx负载均衡的5种策略

罗小黑
2021-06-10 / 0 评论 / 80 阅读 / 正在检测是否收录...
广告
温馨提示:
本文最后更新于2021年06月10日,已超过171天没有更新,若内容或图片失效,请留言反馈。

轮询默认方式
weight权重方式
ip_hash依据IP分配方式
least_conn最少连接数
fail(第三方)响应时间
url_hash(第三方)依据URL分配方式

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
参数:

fail_timeout与max_fails结合使用.
max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
fail_time服务器会被认为停机的时间长度,默认为10s。
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down标记服务器永久停机了。

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。
upstream backserver {
server 172.16.1.7;
server 172.16.1.8 backup;
server 172.16.1.9 max_fails=3 fail_timeout=20s;
}
 server {
         listen 80;
         location / {
         proxy_pass http://backserver ;
        }
     }

2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream backserver {
server 172.16.1.7 weight=10;
server 172.16.1.8 weight=6;
server 172.16.1.9;
}
server {
         listen 80;
         location / {
         proxy_pass http://backserver ;
        }
     }

3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
ip_hash;
server 172.16.1.7:88;
server 172.16.1.8:80;
server 172.16.1.9;
}
server {
         listen 80;
         location / {
         proxy_pass http://backserver ;
        }
     }

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {
server 172.16.1.7;
server 172.16.1.8;
server 172.16.1.9;
fair;
}
server {
         listen 80;
         location / {
         proxy_pass http://backserver ;
        }
     }

5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {
hash $request_uri consistent;
server 172.16.1.7;
server 172.16.1.8;
server 172.16.1.9;

}
server {
         listen 80;
         location / {
         proxy_pass http://backserver ;
        }
     }
session共享问题

  在最简单的一主一备、负载均衡的集群下,比如两台tomcat服务器和一台nginx负载均衡服务器。当用户访问时,nginx分配给tomcat1服务器处理登陆业务,用户登陆成功,在tomcat1记录了其登陆信息,当页面刷新时,nginx将用户请求分配给tomcat2服务器,在tomcat2服务器上没有用户登陆session,这样就需要用户再次登陆,如果足够巧合,刚好再次登陆的请求转到tomcat1服务器,显示用户登陆,再次刷新刚好又分配给tomcat2服务器,又没有登陆,甚至形成既登陆又没有登陆的矛盾局面。这就造成了不好的体验。
  一般的解决办法是,tomcat服务器之间开启session共享广播,当tomcat1服务器记录了session数据后,就广播给其他tomcat服务器。但是,tomcat的session共享的节点数是有上限的。当集群中配置的tomcat节点机到达一定数量后(一般是5个),节点内部通信的流量可能被session广播占满,导致无法顺畅的处理其他业务,特别是难以适应高并发的场景。
  避免session广播形成节点上限的解决办法是,配置单点登录的session服务器,适应redis缓存模拟session保存登陆信息。
解决nginx负载均衡的session共享问题

0

打赏

评论 (0)

取消