Nginx集群负载均衡


Nginx集群tomcat

  • 在相应nginx配置文件,对应的http配置块中添加如下配置:

    http {
    
      # 此处省略其它配置内容...
    
      # 配置上游服务器(集群)
      upstream tomcats {
          server 192.168.1.101:8080;
          server 192.168.1.102:8080;
          server 192.168.1.103:8080;
      }
    
      server {
          listen  80;
          server_name www.supergan.cn;    # 你的域名
    
          location / {
              proxy_pass  http://tomcats;
          }
      }
    
      ...
    }

Nginx负载均衡 - 轮训

nginx默认的负载均衡为轮训
每次请求为逐个分配到各个服务器节点

Nginx负载均衡 - 加权轮训

# 配置上游服务器(集群)
upstream tomcats {
    server 192.168.1.101:8080 weight=1; # weight值越大处理请求量越大
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=5;
}

upstream指令参数

# 配置上游服务器(集群)
upstream tomcats {
    server 192.168.1.101:8080 weight=1; # weight值越大处理请求量越大
    server 192.168.1.102:8080 weight=3 max_conns=2;
    server 192.168.1.103:8080 weight=5 max_conns=2 slow_start=60s;
    server 192.168.1.104:8080 down; # 关闭状态
}
  • max_conns

    max_conns=number,限制最大并发连接数,0为不限制
    如果使用了共享内存(worker_processes>1),这个限制为每个worker配置,所以多个worker的总并发会大于max_conns值

  • slow_start

    slow_start=time,缓慢启动加入到集群,默认为0s,需搭配weight使用
    如,slow_start=60s,weight=6:设置服务器权重从0恢复到6的时间为60秒
    nginx需要商业版,且该参数不能使用在hash和random load balancing负载均衡模式中
    如果在upstream中只有一台server,则该参数失效

  • down

    标识服务器的状态为停用

  • backup

    标识服务器的状态为备用
    当其它服务器不可用时,备用服务器来处理请求

  • max_fails

    max_fails=number,最大失败次数,默认为1,搭配fail_timeout使用
    当服务器失败达最大次数时,会从集群列表剔除,不再提供服务

  • fail_timeout

    fail_timeout=time,达到最大失败次数后的停用时间,默认为10s,搭配max_fails使用
    当服务器失败达最大次数时,服务器进入停用状态,fail_timeout停用时长到达后,再恢复处理请求,如此往复

Keepalived 提高吞吐量

keepalived:设置长连接处理的数量
proxy_http_version:设置长连接http版本为1.1
proxy_set_header:清除connection header信息

# 配置上游服务器(集群)
upstream tomcats {
    server 192.168.1.101:8080 weight=1; # weight值越大处理请求量越大
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=5;

    keepalived 32;
}

server {
    listen  80;
    server_name www.supergan.cn;    # 你的域名

    location / {
        proxy_pass  http://tomcats;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

Nginx负载均衡 - ip_hash

hash(ip) % node_counts = index
注:从nginx源码中得知,会以ip地址前三段进行hash

另:一致性hash算法可解决

# 配置上游服务器(集群)
upstream tomcats {
    ip_hash;

    server 192.168.1.101:8080 weight=1; # weight值越大处理请求量越大
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=5;
}
  • 集群负载均衡中,hash算法带来问题

    当有server节点发生增减时,节点数发生变化,所有客户端负载均衡会重新进行hash算法
    导致大规模客户端可能访问到与节点变化前不同的服务器,会导致session会话丢失,以及缓存的失效
    最终导致用户请求时间变长
    解决:一致性hash算法

Nginx负载均衡 - url_hash

hash(url) % node_counts = index
根据每次请求的url地址,hash后访问到固定的服务器节点

# 配置上游服务器(集群)
upstream tomcats {
    url_hash;

    server 192.168.1.101:8080 weight=1; # weight值越大处理请求量越大
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=5;
}

Nginx负载均衡 - least_conn

根据当前各节点的连接数,选择用最小连接数的节点去处理请求

# 配置上游服务器(集群)
upstream tomcats {
    least_conn;

    server 192.168.1.101:8080 weight=1; # weight值越大处理请求量越大
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=5;
}

文章作者: 小动物不困
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小动物不困 !
评论
 上一篇
Nginx的缓存控制 Nginx的缓存控制
缓存 浏览器缓存 加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地 Nginx缓存 缓存在Nginx端,提升所有访问到Nginx这一端的用户体验提升访问上游(upstream)服务器的速度用户访问仍然产生请求流量 Ngi
2020-09-12
下一篇 
Nginx中配置防盗链 Nginx中配置防盗链
Nginx 防盗链配置支持 在相应nginx配置文件,对应的server配置块中添加如下配置: server { # 此处省略其它配置内容... # 对源站点验证 valid_referers *.supergan
2020-09-11
  目录