针对四层UDP监听,健康检查通过UDP报文探测来获取状态信息,如下图所示。
负载均衡UDP监听的检查机制如下:
1.LVS节点服务器根据监听的健康检查配置,向后端ECS的内网IP+【健康检查端口】发送UDP报文。
2.如果后端ECS相应端口未正常监听,则系统会返回类似port XX unreachable的ICMP报错信息,反之不做任何处理。
3.如果在【响应超时时间】之内,LVS节点服务器收到了后端ECS返回的上述错误信息,则认为服务异常,判定健康检查失败。
4.如果在【响应超时时间】之内,LVS节点服务器没有收到后端ECS返回的任何信息,则认为服务正常,判定健康检查成功。
说明:
当前UDP协议服务健康检查,可能存在服务真实状态与健康检查不一致的问题。
如果后端ECS是Linux服务器,在大并发场景下,由于Linux的防ICMP攻击保护机制,会限制服务器发送ICMP的速度。此时,即便服务已经出现异常,但由于无法向前端返回port XX unreachable报错信息,会导致负载均衡由于没收到ICMP应答进而判定健康检查成功,最终导致服务真实状态与健康检查不一致。
解决方案:负载均衡通过发送您指定的字符串到后端服务器,必须得到指定应答后才认为检查成功。但该实现机制需要客户端程序配合应答。