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;
}