Keepalived chk_server脚本退出状态码2问题排查求助
Keepalived检查脚本退出状态码2问题排查
问题详情
日志显示chk_server脚本执行失败,退出状态码为2,导致节点进入BACKUP状态:
Nov 11 19:54:03 MCX-G2 Keepalived_vrrp[15201]: VRRP_Script(chk_server) failed (exited with status 2) Nov 11 19:54:03 MCX-G2 Keepalived_vrrp[15201]: VRRP_Script(chk_script) succeeded Nov 11 19:54:03 MCX-G2 Keepalived_vrrp[15201]: (VRRP1) Entering BACKUP STATE
对应的Keepalived配置片段:
vrrp_script chk_server { script "/bin/ping -c 1 100.100.100.1 &> /dev/null" interval 10 # check every 10 seconds fall 1 # require 1 failures for KO rise 1 # require 1 successes for OK }
注意:你手动测试的是172.20.128.100,但配置中检查的目标IP是100.100.100.1,这是首要差异点。
排查方向
- 验证配置中的ping命令:直接执行配置里的完整命令,查看真实退出码:
若退出码确实为2,去掉重定向查看具体报错:/bin/ping -c 1 100.100.100.1 &> /dev/null echo $?/bin/ping -c 1 100.100.100.1 - 分析ping退出码2的含义:该码通常表示未知错误,比如无法路由到目标IP、ICMP包被拦截、权限不足(极少发生在root环境)。
- 检查运行环境差异:Keepalived作为系统服务运行时,可能与手动执行环境不同:
- 确认Keepalived进程是否在特定网络命名空间:
若返回结果,说明服务在隔离命名空间内,需在对应命名空间内测试ping。ip netns identify $(pidof Keepalived_vrrp) - 检查Keepalived运行用户:若配置了
user指令,需确保该用户有执行ping及访问网络的权限。
- 确认Keepalived进程是否在特定网络命名空间:
- 防火墙/路由检查:
- 用
tcpdump抓包验证ICMP包是否发出并收到回应:tcpdump icmp host 100.100.100.1 - 检查主机路由表,确认存在到
100.100.100.1的有效路由:ip route get 100.100.100.1 - 排查本地防火墙(iptables/ufw/firewalld)是否拦截了ICMP请求或回应。
- 用
- 版本兼容性:部分旧版Keepalived在脚本退出码处理上存在bug,可尝试升级至最新稳定版本后重新测试。
内容的提问来源于stack exchange,提问作者Mhd Ridho Swasta
相关产品推荐
相关产品推荐

