健康检查

最近更新时间:2019-09-20 18:01:59

  • 腾讯云负载均衡实例可以定期向后端服务器发送 Ping、尝试连接或发送请求来测试后端服务器运行的状况,这些测试称为健康检查。
  • 当后端服务器实例被判定为不健康时,负载均衡实例将不会把请求转发到该实例上。但健康检查会对所有后端服务器(不管是判定为健康的还是不健康的)进行,当不健康实例恢复正常状态时,负载均衡实例将恢复把新的请求转发给它。
  • 弹性伸缩组会定期使用相似的方法确定每个组内实例的运行状况。有关更多信息,请参见 弹性伸缩

四层转发健康检查配置

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

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

    七层转发健康检查配置

    七层转发的健康检查机制由负载均衡器向后端服务器发送 HTTP 请求来检测后端服务,负载均衡器会通过 HTTP 返回值是否为 http_2xxhttp_4xx 来判断服务是否正常。后续将推出用户自定义的方式,对响应代码所代表的状态进行描述。假定在某场景下,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

    健康检查异常排查思路

    四层排查

    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的监听则说明此配置正常。
    2. 请确保后端服务器开启了您在负载均衡监听器中配置的后端端口。
      如果是四层负载均衡,只要后端端口 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 命令。
    3. 检查后端 CVM 内部是否有防火墙或其他安全类防护软件,这类软件很容易将负载均衡系统的本地 IP 地址屏蔽,从而导致负载均衡系统无法跟后端服务器进行通讯。
      检查服务器内网防火墙是否放行80端口,可以暂时关闭防火墙进行测试。
      • Windows 系统可以运行输入firewall.cpl操作关闭
      • Linux 系统可以输入/etc/init.d/iptables stop关闭
    4. 检查负载均衡健康检查参数设置是否正确,建议参照本文档提供的健康检查参数默认值进行设置。
    5. 健康检查指定的检测文件,建议是 HTML 形式的简单页面,只用于检查返回结果。不建议用 PHP 等动态脚本语言。
    6. 检查后端是否有较高负载导致 CVM 对外提供服务响应慢。
    7. 检查 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探测一次)。