七层(HTTP/HTTPS)健康检查异常
本文介绍负载均衡器七层健康检查出现异常时的解决方法。
问题现象
负载均衡器上配置了如下图的基于七层方式的健康检查,但是健康检查结果显示为不活跃
。
排查方法
七层(HTTP/HTTPS)健康检查是基于第七层的 HTTP 协议进行的,会和业务进行交互,所以首先应该定位问题,主要分为以下几步:
-
定位健康检查失败问题出现在第七层还是第四层。
点击监听器的操作 > 修改 > 显示高级选项,将健康检查修改为
TCP
,观察后端服务器的状态是否为活跃状态:- 如果仍旧是
不活跃
状态,则说明健康检查问题出在第四层,请参考四层(TCP/UDP)健康检查出现异常进行解决。 - 如果是
活跃
状态,则说明是后端服务本身配置有问题。继续进行下一步分析。
- 如果仍旧是
-
登录后端服务器,检查健康检查 URL 是否正常。
登录到后端服务器上使用 curl 命令访问健康检查接口,根据返回的 HTTP 状态码排查问题。
如果返回的 HTTP 状态码为 4xx 或者 5xx,那么 LB 去检查时遇到 4xx 或者 5xx 就会判断为服务不可用,此时则需要根据服务日志来排查后端服务问题。
以下排查方法供您参考:
root@web:~# curl http://172.16.6.20/health #检查命令 curl http://<ip>:<port>/<url> <html> <head><title>404 Not Found</title></head> <body bgcolor="white"> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.14.0 (Ubuntu)</center> </body> </html> root@web:~# cat /var/www/html/health #配置健康检查接口 i am ok root@web:~# curl http://172.16.6.20/health #此时本地调用是成功的,控制台也可以看到健康检查成功了 i am ok
如果返回的 HTTP 状态码小于400,此时则需要判断是否为健康检查超时所导致的。
-
检查健康检查 URL 是否存在超时情况。
因为健康检查是有超时时间的,如果超时时间设置过短,也可能引起健康检查失败。
遇到此类情况,可以尝试适当调长超时时,并检查后端服务器的资源使用情况、LB 节点到后端服务器的网络情况,也可以在后端服务器上使用 curl 命令来健康检查接口的检测访问时长。