Nginx负载均衡中的fail_timeout
今天,一个服务器的端口8082死掉了,该端口位于nginx的负载均衡后面
查看nginx的error.log中,能看到很多connect() failed的错误
一开始,还以为是nginx的负载均衡机制没有做任何的处理,仍然把请求最终给分发到了死掉的8082端口上
后来,经过测试发现,nginx对于某些请求,还是会先request死掉的8082端口
当它发现timeout或refused后,会把改请求会分发到upstream的其它端口上
这样,对最终用户来说,是不受任何影响的,可能会感觉到稍慢一些而已
同时,还发现了负载均衡配置时的2个参数:fail_timeout和max_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上
[...] 但在upstream中可以通过配置max_fails和fail_timeout以及proxy_next_upstream这些参数,见之前的这个文章 [...]