健康检查概述
健康检查用于判断后端服务器状态是否正常,避免将请求转发至状态异常的后端服务器,保障服务的可用性。
为服务器组配置健康检查,不仅可以在创建服务器组时配置,创建完成后,同样可以配置。 注意
健康检查会占用一定的网络资源,建议结合业务情况,通过降低健康检查频率、增大健康检查间隔等方式,来降低对业务的影响。但为了保障业务的持续可用,不建议关闭健康检查,关闭健康检查可能会导致请求被转发给异常的后端服务器。
按健康检查使用的协议进行分类,如下表所示:
- 以上文健康检查时间表格中的示例值,展现健康检查过程。
服务组健康检查协议选择规则如下:
- 后端协议为UDP的服务组,建议配置UDP协议的健康检查。
- 后端协议为TCP的服务组,若要获取后端服务器部署服务的状态码,建议配置HTTP协议健康检查;其他情况建议配置TCP协议健康检查。
健康检查原理如下:
TCP协议健康检查原理
HTTP协议健康检查原理
UDP协议健康检查原理
服务器组使用TCP协议对后端服务器进行健康检查,通过发送SYN数据包检测后端服务器的状态。具体原理如下:
- NLB实例根据服务器组的健康检查配置,向后端服务器的「私网IP + 端口」发送TCP SYN数据包。
- 后端服务器收到请求后,如果相应端口正在正常监听,则会返回SYN+ACK数据包。
- 如果在响应超时时间之内,NLB实例成功收到后端服务器返回的数据包,则认为服务正常运行,判定健康检查成功,进一步发送ACK数据包,而后向后端服务器发送RST数据包中断TCP连接。
- 如果在响应超时时间之内,NLB实例没有收到后端服务器返回的数据包,则认为服务无响应,判定健康检查失败,并向后端服务器发送RST数据包中断TCP连接。
说明
正常的TCP三次握手:NLB实例向后端服务器发送SYN数据包 --> 后端服务器向 NLB实例发送 SYN+ACK 数据包 --> NLB实例向后端服务器发送ACK数据包,然后连接建立成功,开始进行数据传输。但TCP协议健康检查发送ACK数据包后会立即发送RST数据包中断TCP连接。
该实现机制可能会导致后端服务器认为相关TCP连接异常退出,并抛出错误信息,如Connection reset by peer。解决方案如下:
- 服务器组开启获取客户端源IP功能后,则可忽略来自健康检查的连接错误。
服务器组使用HTTP协议对后端服务器进行健康检查,通过发送GET/HEAD请求模拟浏览器的访问请求检测后端服务器的状态。具体原理如下:
- NLB实例根据服务器组的健康检查配置,向后端服务器的「私网IP+端口」或「域名 + 路径 + 端口」发送GET/HEAD请求。
- 后端服务器收到请求后,根据相应服务的运行情况,返回HTTP状态码。
- 如果在响应超时时间之内,NLB实例没有收到后端服务器返回的信息,则认为服务无响应,判定健康检查失败。
- 如果在响应超时时间之内,NLB实例成功接收到后端服务器返回的信息,则将返回的HTTP状态码与配置的状态码进行比对。如果匹配则判定健康检查成功。
使用UDP协议对后端服务器组进行健康检查。根据是否指定健康检查字符实现原理略有不同,如下图所示:
- 未指定健康检查字符时,UDP监听的检查原理如下:
- NLB实例向后端服务器的内网IP地址发送ICMP报文。
- NLB实例向后端服务器的(内网IP地址+健康检查端口)发送UDP探测报文。
- 如果在响应超时时间之内,ICMP报文发送成功且NLB实例未收到后端服务器返回的类似port unreachable的报错信息,则判定健康检查成功;否则,判定健康检查失败。
- NLB实例根据用户指定的字符向后端服务器的(内网IP地址+健康检查端口)发送UDP探测报文。
- 如果在响应超时时间之内,NLB实例收到后端服务器返回的与预期一致的信息,则判定健康检查成功;否则,判定健康检查失败。
说明
- UDP监听器健康检查可能会出现健康检查状态与服务真实状态不符的情况。
- 当后端服务器操作系统为Linux时,其防ICMP攻击保护机制,使后端服务器在大并发场景下发送ICMP的速度被限制,异常的后端服务器无法及时返回报错信息,导致监听器判断健康检查成功。
最近更新时间:2025.07.21 15:18:48