如何排查CLB健康检查异常的问题

问题描述

健康检查异常会导致LB集群转发中断,业务不可用等情况。7层LB健康检查异常常常表现为访问502 ,4层timeout/Connection refused等。 首先应判断监听器类型,7层健康检查类似curl,4层类似telnet。下面是一些常见的场景以及解决方案,供您参考:

场景一: 7层健康检查路径不存在,后端返回4xx 状态码

解决方案

  • 查看健康检查路径是否存在,curl wget等测试访问是否正常.

  • 若4xx为预期内正常状态码,可配置勾选4xx

image.png

场景二: 7层健康检查后端服务禁止IP直接访问,禁止空Host访问

健康检查配置中,检查域名和检查路径都为非必填项。有可能用户在配置过程中直接跳过该选项。

其中健康检查域名如不填写,系统默认为内网IP地址,Host为空。如果后端服务禁止空Host访问可能会导致健康检查失败。

image.png

解决方案

  1. 直接curl 后端服务IP查看是否返回正常状态码。
  2. 检查后端服务是否有禁止空server_name访问,将允许的server_name配置到健康检查域名,例如Nginx。

image.png

image.png

场景三: 健康检查地址需要请求数据库等延迟过高导致失败

解决方案

  1. 检查健康检查请求日志请求时间,调整健康检查超时时间,不健康阈值等
  2. 检查后端服务、主机是否负载过高,及时优化或扩容

场景四:7层健康检查后端服务禁止HEAD 或GET请求

目前健康检查使用GET或HEAD请求方式探测后端主机,控制台可选。如果禁止这两种方法会出现健康检查失败。

解决方案

测试方法:    
curl -I -H "Host:www.a.com" -X GET 192.168.1.99
curl -I -H "Host:www.a.com" -X HEAD 192.168.1.99
192.168.1.99为后端RS地址
-H "Host:" 如果没限制host可以不携带

image.png

例如Nginx配置

if ($request_method ~* GET|HEAD) {
         return 403;
}

场景五:后端服务未监听在0.0.0.0 ,或者未放行100.64.0.0/10 网段,导致健康检查失败

该场景在后端一般无日志,可以通过netstat 或者tcpdump抓包看到相关信息。

解决方案

  1. 检查服务监听端口是否开放在0.0.0.0,后端服务拒绝服务。

image.png

image.png

  1. 安全组或系统内iptables未放行100.64.0.0/10 导致失败。健康检查目前使用100.64.0.0/10网段探测后端服务是都存活,请在后端安全策略中放行。

如果您有其他问题,欢迎您联系火山引擎技术支持服务

136
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论