今天,一个服务器的端口8082死掉了,该端口位于nginx的负载均衡后面


查看nginx的error.log中,能看到很多connect() failed的错误


一开始,还以为是nginx的负载均衡机制没有做任何的处理,仍然把请求最终给分发到了死掉的8082端口上


后来,经过测试发现,nginx对于某些请求,还是会先request死掉的8082端口


当它发现timeout或refused后,会把改请求会分发到upstream的其它端口上


这样,对最终用户来说,是不受任何影响的,可能会感觉到稍慢一些而已


 


同时,还发现了负载均衡配置时的2个参数:fail_timeoutmax_fails


这2个参数一起配合,来控制nginx怎样认为upstream中的某个server是失效的


当在fail_timeout的时间内,某个server连接失败了max_fails次,则nginx会认为该server不工作了


同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server


个人认为,nginx不应该把这2个时间用同一个参数fail_timeout来控制


要是能再增加一个fail_time,来控制接下来的多长时间内,不再使用down掉的server就更好了~


如果不设置这2个参数,fail_timeout默认为10s,max_fails默认为1


就是说,只要某个server失效一次,则在接下来的10s内,就不会分发请求到该server上