You need to enable JavaScript to run this app.
导航

健康检查说明

最近更新时间2023.12.11 14:49:46

首次发布时间2023.12.11 14:49:46

概述

健康检查是一个用于检查后端服务器的可用性和运行状态的功能。开启健康检查后,负载均衡实例会定期发送健康检查请求到后端服务器,以确定后端服务器的状态是否正常。

负载均衡实例只会向状态正常的后端服务器转发客户端请求。如果一台后端服务器的状态异常,负载均衡实例将不会把请求转发到该后端服务器,从而避免将请求发送到不可用的服务器上。当后端服务器恢复正常运行后,负载均衡实例会继续向该后端服务器转发请求。

健康检查协议

后端协议是TCP时,健康检查协议可以配置为TCP或HTTP。后端协议是UDP时,健康检查协议可以配置为UDP、TCP或HTTP。但是,如果健康检查协议与后端协议不同,可能导致检查结果与后端服务器的实际状态不一致,影响负载均衡流量的分发。

以下内容对基于各协议的健康检查机制进行说明。

健康检查机制

TCP健康检查机制

TCP健康检查流程图
图片
TCP健康检查流程如下:

  1. 负载均衡实例根据健康检查配置,向后端服务器(IP+健康检查端口)发送TCP SYN报文。
  2. 当后端服务器收到请求报文之后,在相应端口的监听状态正常的情况下,后端服务器会返回SYN+ACK报文。
  3. 负载均衡实例根据情况返回报文给后端服务器:
    • 在超时时间内,如果负载均衡实例没有收到来自后端服务器的SYN+ACK报文,负载均衡实例会判定健康检查失败。然后,负载均衡实例向后端服务器发送RST报文来中断TCP连接。
    • 在超时时间内,如果负载均衡实例收到了来自后端服务器的SYN+ACK报文,负载均衡实例判定健康检查成功。然后,负载均衡实例向后端服务器发送ACK报文,随后再向后端服务器发送RST报文来中断TCP连接。

UDP健康检查机制

UDP健康检查流程图
图片
UDP健康检查流程如下:

  1. 负载均衡实例根据健康检查配置,向后端服务器发送ICMP Echo Request报文。
  2. 负载均衡实例判断检查健康是否成功:
    • 在超时时间内,如果负载均衡实例没有收到来自后端服务器的ICMP Echo Reply报文,则判定健康检查失败。
    • 在超时时间内,如果负载均衡实例收到了ICMP Echo Reply报文,则向后端服务器发送UDP探测报文。
      • 未配置检查字符串时
        在超时时间内,如果负载均衡实例没有收到后端服务器返回的ICMP Port Unreachable报文,则判定健康检查成功。如果负载均衡实例收到了ICMP Port Unreachable报文,则判定健康检查失败。
      • 配置了检查字符串时
        负载均衡实例向后端服务器发送的UDP探测报文带有检查字符串。在超时时间内,如果负载均衡实例收到了来自后端服务器的响应报文,则判定健康检查成功。如果负载均衡实例没有收到响应报文,则判定健康检查失败。

HTTP健康检查机制

HTTP健康检查流程图
图片
HTTP健康检查流程:

  1. 负载均衡实例根据健康检查配置,向后端服务器(IP+端口+检查路径)发送HTTP GET请求。您可以选择设置Host头域。
  2. 后端服务器收到请求后,根据情况返回相应的HTTP状态码。
  3. 负载均衡实例判断检查健康是否成功:
    • 在响应超时时间内,如果负载均衡实例收到了后端服务器的响应,会将HTTP状态码与配置的状态码进行对比。如果状态码匹配,负载均衡实例判定健康检查成功、后端服务器运行正常。
    • 在响应超时时间内,如果负载均衡实例没有收到后端服务器的响应,则判定健康检查失败。