[alibaba/tengine]使用健康检查后端故障恢复后tengine不会将其设置为up状态

2024-07-10 832 views
1
 tengine后边挂着几台tomcat,其中有台tomcat卡顿了几分钟导致在status的状态显示为down,后来确认其已经恢复了(从tengine机器上直接curl 对应的地址状态显示正常),但查看status时,其状态一直是down,而且Rise counts一直为0,Fall counts一直为4,而且在tomcat机器上查看localhost_access日志发现tengine没有再请求过来,直到自己在tengine使用nginx -s reload之后才恢复up状态。

请问大佬们,这种down后不恢复up状态的问题需要处理,是少了什么配置了吗?

仔细看过官方健康检查文档 http://tengine.taobao.org/document_cn/http_upstream_check_cn.html,没找出是哪里不对。    

#健康检查配置如下:
check interval=2000 rise=2 fall=4 timeout=1000 type=http default_down=false;
check_keepalive_requests 100;
check_http_send "HEAD /admin/ HTTP/1.1\r\nConnection: keep-alive\r\nHost: xxx.com\r\n\r\n";
check_http_expect_alive http_2xx;

回答

9

down后需要连续rise次数成功才会被重置为up,你可以看下tomcat日志,是否没有达到连续成功的条件

3

嗯嗯,就是看tomcat的日志没有从nginx那边再请求过来了,而自己手动curl过去看到请求码是正常的,而且已经过了好几分钟了。 可是nginx那边就是一直没有去tomcat检查。

9

出现同样的现象。反之把backend server强制关闭,tenginx也不会把这个节点下线,这种现象是在反复上线下线后出现的

1

我测试健康检查也发现类似问题,我upstream server配置了2台机器,fail_timeout 为3分钟,特地设置长点,fail_nums默认为1,其中一台出现read timeout时,nginx 自动把超时的这个server标记为down不可用状态,但是过了一个heatcheck interval 后,我配置的是3秒,3分钟内,可以healthcheck10次了,所以健康检查肯定是成功的,但是这个被标记为down 的server并没有流量过来,只有过了3分钟流量才恢复。