首页 新闻 会员 周边

nginx 健康检查无效

0
悬赏园豆:40 [已解决问题] 解决于 2015-07-08 15:39

在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就转发到了健康节点上,但仍不完美,只能算是一个折中的方案。

老牛在路上的主页 老牛在路上 | 初学一级 | 园豆:11
提问于:2015-07-03 14:37
< >
分享
最佳答案
0

用keepalived很快的

收获园豆:40
solohac | 菜鸟二级 |园豆:244 | 2015-07-04 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册