searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ELB UDP健康检查常见故障分析

2023-06-28 07:28:10
50
0

什么是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 XX unreachable”报错信息,会导致负载均衡由于没收到 ICMP 应答进而判定健康检查成功,最终导致服务真实状态与健康检查不一致。

 
0条评论
0 / 1000
王****宁
3文章数
0粉丝数
王****宁
3 文章 | 0 粉丝
王****宁
3文章数
0粉丝数
王****宁
3 文章 | 0 粉丝
原创

ELB UDP健康检查常见故障分析

2023-06-28 07:28:10
50
0

什么是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 XX unreachable”报错信息,会导致负载均衡由于没收到 ICMP 应答进而判定健康检查成功,最终导致服务真实状态与健康检查不一致。

 
文章来自个人专栏
ELB
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0