跳至主要內容

Nginx负载均衡

xw大约 2 分钟NginxNginx

概念

负载均衡是分布式系统中一个非常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡。

策略

Nginx常见的负载均衡策略有:

  • 节点轮询,每个请求按顺序分配到不同的后端服务器,会造成可靠性低和负载分配不均衡,适合静态文件服务器
  • weight 权重配置,weight和访问比率成正比,数字越大,分配得到的流量越高,适用于在服务器性能差距较大时使用
  • ip_hash(固定分发),根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器,适用于服务器业务分区、业务缓存、Session需要单点的情况
  • fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。

配置

  • 节点轮询,默认采用节点轮询

    upstream lbs {
       server 192.168.0.106:8080;
       server 192.168.0.106:8081;
    }
    location /api/ {
        proxy_pass http://lbs;
        proxy_redirect default;
    }
    
  • weight权重

    upstream lbs {
       ## weight与访问比率成正比
       server 192.168.159.133:8080 weight=5;
       server 192.168.159.133:8081 weight=10; 
    }
    
  • ip_hash

    upstream lbs {
       ip_hash;
       server 192.168.159.133:8080;
       server 192.168.159.133:8081;
    }
    
  • fair(第三方)

    upstream lbs {
       fair;
       server 192.168.159.133:8080;
       server 192.168.159.133:8081;
    }
    

节点状态值设置

nginx支持对每个节点设置状态值,具体的值如下:

  • backup,表明为备用服务器,当主服务器挂了后使用,不支持在hash、ip_hash、随机负载均衡方法中使用。
  • down,表明服务器不可用

使用如下:

upstream lbs {
   weight;
   server 192.168.159.133:8080 weight=5 backup; 
   server 192.168.159.133:8081 weight=10 down;
}

后端可用性和健康探测

关键参数:

  • max_fails 允许请求失败的次数,默认为1.当超过最大次数时就不会请求
  • fail_timeout : max_fails次失败后,暂停的时间,默认:fail_timeout为10s

默认在10S内有一次失败,这个后端服务将标记为在10S内不可用,再下一次10秒后再进行尝试。