upstream块

  • service反向服务地址加端口
  • weight 权重
  • max_fails 失败多少次认为主机已挂掉则,踢出
  • fail_timeout 踢出后重新探测时间
  • max_conns 允许最大连接数
  • backup 备用服务
  • down 表示当前的server暂时不参与负载均衡。

weight
eg:

  1. upstream aiwebserver {
  2. server 11.11.11.12:51002 weight=1;
  3. server 11.11.11.11:51002 weight=2;
  4. server 11.11.11.13:51003 backup;
  5. }

代理和服务启动,11.11.11.12和11.11.11.11以1:2的频率收到请求
backup
当把11.11.11.12和11.11.11.11服务关掉,11.11.11.13收到请求。
如果再把11.11.11.12或者11.11.11.11 任何一个服务恢复,11.11.11.13 作为备份服务不会再收到请求。

再来说一下**max_fails和fail_timeout**两个参数,nginx在原来的11服务器重新启动以后,能很快检测到原来的11恢复了,并投入使用,是因为nginx和11之间有类似心跳检测的机制,实时监控11是否能用。上面的max_fails参数就是设置失败多少次后,认为已经挂了就剔除,fail_timeout参数就是剔除后重新检测这个属性,也是设置恢复时检测的时长间隔,比如设置一分钟,那么服务恢复后得隔一分钟才能检测到并投入使用。可以想象,如果实时去检查的话,会很消耗性能,所以这两个参数非常有用。

  1. upstream aiwebserver {
  2. server 11.11.11.12:51002 weight=1 max_fails=10 fail_timeout=30s;
  3. server 11.11.11.11:51002 weight=2 max_fails=10 fail_timeout=30s;
  4. server 11.11.11.13:51003 backup;
  5. }

**max_conns**是项目服务允许的最大连接数,这个很好理解。

均衡算法

除了轮询的策略,还有很多其他的均衡负载算法:ip_hash,url_hash,least_conn,least_time后续用到再详解。

ip_hash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

  1. upstream aiwebserver {
  2. ip_hash;
  3. server 11.11.11.12:51002 weight=1;
  4. server 11.11.11.11:51002 weight=2;
  5. server 11.11.11.13:51003 backup;
  6. }

least_conn

  1. upstream aiwebserver {
  2. least_conn;
  3. server 11.11.11.12:51002 weight=1;
  4. server 11.11.11.11:51002 weight=2;
  5. server 11.11.11.13:51003 backup;
  6. }

ref
菜鸟教程:https://www.runoob.com/w3cnote/nginx-proxy-balancing.html
简书:https://www.jianshu.com/p/4c250c1cd6cd