在windows上部署了nginx1.7.7 负载了两个节点。然后故意停掉一个节点,不断刷新页面,发现仍然会访问到已经停掉的节点上。
网上查了很多资料,都说配置了max_fails和fail_timeout后会自动检查后端节点,如果这个节点挂掉会自动设为down,但实际测试并非如此,请大神指教。
配置如下
upstream mysvr {
server 192.168.1.104:8091 max_fails=1 fail_timeout=10s;
server 192.168.1.104:8092 max_fails=1 fail_timeout=10s;
}
错误日志如下
2015/07/03 14:31:13 [error] 20540#14128: *147 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while connecting to upstream, client: 192.168.1.104, server: 192.168.1.104, request: "GET / HTTP/1.1", upstream: "http://192.168.1.104:8091/", host: "192.168.1.104:8090"
刚才又测试了一下,发现如果一个节点down掉,nginx仍然会访问到这个节点,但过了一会儿会跳转到健康的节点上并返回,只是这个时间有点久,几乎要两分钟左右才能返回。
能不能实现只要检查到节点down掉,就直接不要访问此节点。
再次补充,在网上查到可以设置proxy_read_timeout来减少转发的时间,设置成5S后情况有所好转,大约5S就转发到了健康节点上,但仍不完美,只能算是一个折中的方案。
用keepalived很快的