Keepalived无传统状态文件,其状态需综合ip addr查VIP绑定、journalctl -u keepalived查日志(关注“Becoming MASTER/BACKUP”)、ps aux查进程、tcpdump验VRRP组播通信及脚本手动执行结果来判断。

Keepalived 本身不生成传统意义上的“状态文件”,它通过进程运行、内核路由表、网络接口配置和系统日志来实时反映双机热备状态。所谓“分析状态文件”,实际是综合检查几个关键位置的输出,判断主备角色、VIP 持有、健康检查结果和故障切换行为是否符合预期。
查看 VIP 绑定与网卡状态
VIP 是否正确绑定在当前活跃节点上,是最直观的状态指标:
- 执行 ip a 或 ip addr show,确认虚拟 IP(如 192.168.201.130)是否出现在 eth0(或你配置的 interface)下,且状态为 scope global
- 若 VIP 出现在主节点却收不到响应,需进一步检查 ARP 表(ip neigh)和客户端能否 ping 通该 VIP
- 备节点执行相同命令时,不应看到该 VIP;若出现,说明发生了非预期的抢占或配置冲突
解析 Keepalived 日志定位异常
Keepalived 将所有关键事件写入系统日志,默认路径为 /var/log/messages(RHEL/CentOS)或 /var/log/syslog(Debian/Ubuntu)。重点关注以下关键词:
- "Becoming MASTER" 或 "Becoming BACKUP":表示角色变更,频繁切换说明网络抖动、心跳超时或优先级配置不合理
- "Registering Kernel netlink reflector" 和 "Starting VRRP child process":确认核心子进程已启动
-
"VRRP_Instance(VI_1) Entering FAULT state":表明 VRRP 实例主动退出,常见于脚本检测失败(如 nginx 崩溃后执行了
service keepalived stop) - 搜索 "check_nginx.sh" 相关输出,确认健康检查是否定期执行、是否触发过停服动作
检查 VRRP 实例运行时信息
Keepalived 提供 kill -USR1 $(cat /var/run/keepalived.pid) 信号,可将当前 VRRP 状态快照输出到 syslog(需确保配置中启用了 debug 或日志级别足够)。更常用的是直接读取运行时数据:
- 用 ps aux | grep keepalived 查看父进程与两个子进程(VRRP + Healthchecking)是否均存活
- 执行 systemctl status keepalived,观察 Active 状态及最近一次启动时间;若显示 failed,立即查 journal:journalctl -u keepalived -n 50 --no-pager
- 对自定义脚本(如 check_nginx.sh),手动运行一次并检查返回值:/etc/keepalived/check_nginx.sh && echo $?,应返回 0(正常)或非 0(触发停服)
验证心跳与组播通信连通性
VRRP 依赖组播(默认 224.0.0.18)传递通告包,网络层不通会导致假故障切换:
- 在主备节点同时执行 tcpdump -i eth0 host 224.0.0.18 -nn -c 10,观察是否能收到对方发来的 VRRP 包(协议号 112)
- 确认防火墙放行了 IP 协议号 112:iptables -L INPUT -n | grep 112;未放行则添加:iptables -I INPUT -p 112 -j ACCEPT
- 检查 virtual_router_id 在主备配置中是否完全一致;不一致会导致各自独立组播,无法形成热备组










