本文分享自天翼云开辟者社区《ELB UDP康健检查常见故障分析》,作者:王****宁
什么是UDP康健检查
UDP是面向非连接的一种协议,在发送数据前不会通过进行三次握手建立连接,UDP康健检查的实现过程如下:
1.康健检查的节点根据康健检查设置,向后端发送ICMP request 消息。
如果康健检查节点收到了后端服务器返回的ICMP reply消息,则认为服务正常,继续进行康健检查。
如果康健检查节点没有收到后端服务器返回的ICMP reply消息,则认为服务非常,判定康健检查失败。
2.康健检查的节点收到ICMP reply消息后,会给后端服务器发送UDP探测报文。
如果在【超时时间】之内,康健检查的节点服务器收到了后端服务器返回的port unreachable的ICMP消息,则认为服务非常,判定康健检查失败。
如果在【超时时间】之内,康健检查的节点服务器没有收到后端服务器返回的ICMP错误信息,则认为服务正常,判定康健检查成功。
常见故障分析
由于同一台后端服务器可以被添加到不同的负载平衡监听器。当不同的监听器分别向同一台后端服务器发起康健检查是。由于后端服务器限制了ICMP消息产生的速率,导致ICMP reply 不能在超时时间内到达康健检查节点,就被判定为服务非常。产生误报。
非常排查方法
1.Linux系统下,检查ICMP消息速率的限制。默认值1000
sysctl -q net.ipv4.icmp_ratelimit
2.取消 port unreachable消息产生的速率限制。
sysctl -w net.ipv4.icmp_ratemask=6160
注意事项
1.负载平衡康健检查是通过UDP报文和Ping报文探测来获取后端云服务器的状态信息。针对此种情况,用户需要确保后端云服务器开启ICMP协议,确认方法如下:
用户登录后端云服务器,以root权限实验以下命令:
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
若返回值为1,表示ICMP协议关闭;若为0,则表示开启。
2.当前UDP协议服务康健检查大概存在服务真实状态与康健检查不一致的问题:
在大并发场景下,由于Linux的防ICMP攻击保护机制,会限礼服务器发送ICMP的速度。此时,即便服务器已经出现非常,但由于无法向前端返回“port XXunreachable”报错信息,会导致负载平衡由于没收到 ICMP 应答进而判定康健检查成功,终极导致服务真实状态与康健检查不一致。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |