故障转移:在nginx负载均衡配置里,如果转发到某台服务器的请求失败,nginx会自动转发到其它服务器上重试。故障转移与请求类型有关,GET请求会自动转发重试。POST、PUT等请求,如果已经发送到某台服务器并且处理异常,不会再转发;如果连接不上服务器,nginx会转发到其它服务器上处理。所以不要用GET请求做一下插入、更新业务,否则会出现问题。
http{
#应用集群负载均衡
upstream com.zhujn.hot {
#两个tomcat,weight:权重
server 192.168.1.100:8081 weight=3;
server 192.168.1.101:8081 weight=2;
}
server { #虚拟服务器,默认端口:80
proxy_read_timeout 10s;
proxy_next_upstream error timeout; #故障转移条件
proxy_next_upstream_tries 3; #重试次数,防止大集群里无限重试
proxy_next_upstream_timeout 60s; #重试的最长时间
location / {
#反向代理,指向负载均衡配置名称
proxy_pass http://com.zhujn.hot
}
}
}
在多台服务器负载均衡的高并发场景下,由于nginx故障转移的特性,假设某台服务器1万个请求里有3000个请求处理失败,nginx会把这3000个请求均分到其它服务器,如果在把其它服务器压挂了,nginx会把出问题的机器上的请求再转发到余下的服务器,从而引发滚雪球效应,导致整个集群崩溃。
解决方法:加入熔断机制,配置如下。
upstream com.zhujn.hot {
#max_fails
server 192.168.1.100:8081 max_fails=10 fail_timeout=60s;
server 192.168.1.101:8081 max_fails=10 fail_timeout=60s;
}
原文:https://www.cnblogs.com/jvStarBlog/p/12702004.html