健康检查

最近更新时间:2018-09-10 14:57:07

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

健康检查配置字段说明

  • 响应超时时间
    健康检查响应的最大超时时间。如后端云服务器在相应时间内没有正确响应,则判定为健康检查失败。
  • 健康检查间隔
    进行健康检查的时间间隔。
  • 不健康阈值
    如果连续 n 次(n 为填写的数值)收到了健康检查结果失败状态,则识别为不健康,控制台显示为不健康。
  • 健康阈值
    如果连续 n 次(n 为填写的数值)收到了健康检查结果为成功状态,则识别为健康,控制台显示为健康。
  • 正常状态码
    仅在 HTTP 检查方式时才有。指定用户判断健康检查正常的 HTTP 状态码。可选值为http_1xxhttp_2xxhttp_3xxhttp_4xxhttp_5xx,可多选。默认情况或不做任何选择时,该值置为http_2xx

四层转发健康检查配置

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

  • 响应超时时间:2 - 60秒。
  • 检查间隔:5 - 300秒。
  • 不健康阈值:2 - 10次(健康后端服务器出现此指定次数响应超时后,视为不健康)。
  • 健康阈值2 - 10次(不健康后端服务器出现此指定次数响应超时后,视为健康)。

七层转发健康检查配置

七层转发的健康检查机制由负载均衡器向后端服务器发送 HTTP 请求来检测后端服务,负载均衡器会通过 HTTP 返回值是否为http_2xxhttp_4xx来判断服务是否正常。后续将推出用户自定义的方式,对响应代码所代表的状态进行描述。假定在某场景下,HTTP 返回值为http_1xxhttp_2xxhttp_3xxhttp_4xxhttp_5xx 这几种,用户可以根据业务需要编辑http_1xxhttp_2xx为服务正常状态,并设置http_3xxhttp_5xx的返回值代表异常状态。

  • 响应超时时间暂不能设置,默认响应超时时间为5秒。
  • 检查间隔:5 - 300秒,默认为6
  • 不健康阈值:2 - 10次,默认为 3次 (健康后端服务器出现此指定次数响应超时后,视为不健康)
  • 健康阈值:2 - 10次,默认为 3次(不健康后端服务器出现此指定次数响应超时后,视为健康)
  • HTTP 请求方式:默认使用 HEAD 方法,服务器仅返回 HTTP 头部信息,对应的后端服务需支持 HEAD,选择 HEAD 可降低后端开销,提升请求效率;若使用 GET 方法,后端服务则需支持 GET。

健康检查异常排查思路

四层排查

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 后端的每台物理机都会每 5 秒发送一次探测。因此在后端云服务器上,会收到多次探测请求。(假设 CLB 实例所在集群有 8 台物理机,那么每台机器 5 秒发送一次请求,后端主机可能会在 5 秒中收到 8 次探测)
  • 该实现方案的优势是:效率高,探测精准,避免误剔除。比如 CLB 实例集群的 8 台物理机中,其中 1 台判断失败,仅那 1 台机器不再转发流量,另外 7 台的流量是正常的。

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