健康检查

最近更新时间: 2024-10-17 17:10:00

  • 腾讯云金融专区负载均衡实例可以定期向后端服务器发送 Ping、尝试连接或发送请求来测试后端服务器运行的状况,这些测试称为健康检查。

  • 当后端服务器实例被判定为不健康时,负载均衡实例将不会把请求转发到该实例上。但健康检查会对所有后端服务器(不管是判定为健康的还是不健康的)进行,当不健康实例恢复正常状态时,负载均衡实例将恢复把新的请求转发给它。

  • 弹性伸缩组会定期使用相似的方法确定每个组内实例的运行状况。有关更多信息,请参见 弹性伸缩

四层转发健康检查配置

四层转发的健康检查机制:由负载均衡器向配置中指定的服务器端口发起访问请求,若端口访问正常,则视为后端服务器运行正常,否则视为运行异常。 对于 TCP 的业务,使用 SYN 包进行探测;对于 UDP 业务,使用 Ping 进行检查。

健康检查配置 说明 默认值
响应超时 健康检查响应的最大超时时间。
如果后端云服务器在超时时间内没有正确响应,则判定为健康检查异常。
可配置范围:2 - 60秒。
2秒
检测间隔 负载均衡进行健康检查的时间间隔。
可配置范围:5 - 300秒。
5秒
不健康阈值 如果连续 n 次(n 为填写的数值)收到的健康检查结果失败,则识别为不健康,控制台显示为异常
可配置范围:2 - 10次。
3次
健康阈值 如果连续 n 次(n 为填写的数值)收到的健康检查结果为成功,则识别为健康,控制台显示为健康
可配置范围:2 - 10次。
3次

七层转发健康检查配置

七层转发的健康检查机制由负载均衡器向后端服务器发送 HTTP 请求来检测后端服务,负载均衡器会根据用户选择的 HTTP 返回值来判断服务是否正常。假定在某场景下,HTTP 返回值为 http_1xxhttp_2xxhttp_3xxhttp_4xxhttp_5xx 这几种,用户可以根据业务需要编辑 http_1xxhttp_2xx 为服务正常状态,并设置 http_3xxhttp_5xx 的返回值代表异常状态。

健康检查配置 说明 默认值
检查域名 请求域名
- 支持的字符集包括:a-z``0-9``.``-,长度限制为1 - 120。
- 暂不支持正则表达式。
- 当用户填写域名为通配域名时,需要指定某一固定域名(非正则)为健康检查域名。
转发域名
检查路径 请求路径
- 必须以 /开头。
- 支持的字符集包括:a-z``0-9``.``-,长度限制为1 - 120。
- 暂不支持正则表达式。
- 建议指定某个固定 URL 路径(静态页面)进行健康检查。
/
检测间隔 - 负载均衡进行健康检查的时间间隔。
- 可配置范围:5 - 300秒。
5秒
不健康阈值 - 如果连续 n 次(n 为填写的数值)收到的健康检查结果失败,则识别为不健康,控制台显示为异常
- 可配置范围:2 - 10次。
3次
健康阈值 - 如果连续 n 次(n 为填写的数值)收到的健康检查结果为成功,则识别为健康,控制台显示为健康
- 可配置范围:2 - 10次。
3次
HTTP 请求方式 健康检查的 HTTP 请求方式,可选:GET 或 HEAD。
- 若使用 HEAD 方法,服务器仅返回 HTTP 头部信息,可降低后端开销,提升请求效率,对应的后端服务需支持 HEAD。
- 若使用 GET 方法,则后端服务支持 GET 即可。
GET
HTTP 状态码检测 当状态码为所选状态码时,认为后端服务器存活,即健康检查正常,可选:http_1xx,http_2xx, http_3xx,http_4xx,http_5xx。 http_1xx,http_2xx,http_3xx,http_4xx

健康检查状态

根据健康检查探测情况,后端服务的健康检查状态有如下两种:

状态 说明 是否转发流量
健康 后端服务正常 CLB 向“健康”的后端服务转发流量。
异常 后端服务异常 - CLB 不向“异常”的后端服务转发流量。
- 在一个四层监听器或者七层 URL 规则下,如果 CLB 探测到所有后端服务都不健康,将会激活全死全活逻辑,即请求将会转发给所有后端服务。

健康检查异常排查思路

四层排查

TCP 协议下,负载均衡使用 SYN 包进行探测。UDP 协议下,负载均衡使用 Ping 命令进行探测。 在页面查看后端服务器端口的健康状态,若不健康,排查思路如下:

  • 确定后端服务器是否有配置有安全组影响了服务。有关如何控制后端服务器的访问来保证服务正常运行,请参见 后端云服务器安全组配置说明

  • 使用 netstat 命令,确定后端服务器的端口是否有进程在监听,若未发现进程则请重新启动服务。

七层排查

针对七层(HTTP/HTTPS 协议)服务,当某一监听出现健康检查异常时,可以通过如下方面进行排查:

  1. 由于负载均衡的七层健康检查服务与后端 CVM 之间通过内网通信,您需要登录服务器检查应用服务器端口是否正常监听在内网地址上,如果没有监听在内网地址,请将应用服务器端口监听到内网上,从而确保负载均衡系统和后端 CVM 之间的通讯正常。 假设负载均衡前端端口是80,CVM 后端端口也是80,CVM 的内网 IP 是:1.1.1.10

Windows 系统服务器使用如下命令:

   netstat -ano | findstr :80

Linux 系统服务器使用如下命令:

   netstat -anp | grep :80

如果能看到1.1.1.10:80的监听或0.0.0.0:80的监听则说明此配置正常。

  1. 请确保后端服务器开启了您在负载均衡监听器中配置的后端端口。 如果是四层负载均衡,只要后端端口 telnet 有响应即可,可以使用telnet 1.1.1.10 80来测试。如果是七层负载均衡,需要 HTTP 状态码是200等代表正常的状态码。检验方法如下:
  • Windows 系统可以直接在 CVM 内的浏览器输入内网 IP 测试是否正常,本例使用http://1.1.1.10

  • Linux 系统可以通过curl -I命令查看状态是否为 HTTP/1.1 200 OK,本例使用 curl -I 1.1.1.10 命令。

  1. 检查后端 CVM 内部是否有防火墙或其他安全类防护软件,这类软件很容易将负载均衡系统的本地 IP 地址屏蔽,从而导致负载均衡系统无法跟后端服务器进行通讯。 检查服务器内网防火墙是否放行80端口,可以暂时关闭防火墙进行测试。
  • Windows 系统可以运行输入firewall.cpl操作关闭

  • Linux 系统可以输入/etc/init.d/iptables stop关闭

  1. 检查负载均衡健康检查参数设置是否正确,建议参照本文档提供的健康检查参数默认值进行设置。

  2. 健康检查指定的检测文件,建议是 HTML 形式的简单页面,只用于检查返回结果。不建议用 PHP 等动态脚本语言。

  3. 检查后端是否有较高负载导致 CVM 对外提供服务响应慢。

  4. 检查 HTTP 请求方式,如果使用 HEAD 方法,则后端服务一定要支持 HEAD。如果是 GET 方法,则后端服务一定要支持 GET。

关于健康检查探测频率过高的说明

健康检查探测包频率过高,控制台设置接受探测包5秒1次,实际后端 RS 发现1秒内收到1次甚至多次健康检查请求的原因是:

  • 当前,健康检查频率过高的问题,主要跟负载均衡后端健康探测实现机制有关。假设100万的 client 端请求,会分散在4台CLB 后端物理机上,再转给云服务器。 健康检查探测是在 CLB 的后端物理机上,各自探测的。因此,CLB 实例设置5秒1次的探测请求,实际上 CLB 后端的每台物理机都会每5s发送一次探测。因此在后端云服务器上,会收到多次探测请求。 (假设 CLB 实例所在集群有8台物理机,那么每台机器5s发送一次请求,后端主机可能会在5s中收到8次探测)

  • 该实现方案的优势是:效率高,探测精准,避免误剔除。例如,CLB 实例集群的8台物理机中,其中1台判断失败,仅那1台机器不再转发流量,另外7台的流量是正常的。

因此,如果您后端云服务器的探测频率过高,可以通过设置更长的探测间隔时间来解决( 例如设置为15s探测一次)。