本文介绍负载均衡器七层健康检查出现异常时的解决方法。

问题现象

负载均衡器上配置了如下图的基于七层方式的健康检查,但是健康检查结果显示为不活跃

http_check_faild

排查方法

七层(HTTP/HTTPS)健康检查是基于第七层的 HTTP 协议进行的,会和业务进行交互,所以首先应该定位问题,主要分为以下几步:

  1. 定位健康检查失败问题出现在第七层还是第四层。

    点击监听器的操作 > 修改 > 显示高级选项,将健康检查修改为 TCP,观察后端服务器的状态是否为活跃状态:

    • 如果仍旧是不活跃状态,则说明健康检查问题出在第四层,请参考四层(TCP/UDP)健康检查出现异常进行解决。

    • 如果是活跃状态,则说明是后端服务本身配置有问题。继续进行下一步分析。

  2. 登录后端服务器,检查健康检查 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,此时则需要判断是否为健康检查超时所导致的。

  3. 检查健康检查 URL 是否存在超时情况。

    因为健康检查是有超时时间的,如果超时时间设置过短,也可能引起健康检查失败。

    遇到此类情况,可以尝试适当调长超时时,并检查后端服务器的资源使用情况、LB 节点到后端服务器的网络情况,也可以在后端服务器上使用 curl 命令来健康检查接口的检测访问时长。

    time out