先看现象。内网 CentOS 7.9 两台 nginx 做 Keepalived 主备,VRRP 用单播模式,交换机割接后两台同时持有 192.168.10.100,监控报 IP 冲突,业务时通时断,keepalived 日志里两边都显示 Entering MASTER STATE。

排查方向其实有限,先把可能性排一排。VRRP 心跳报文被交换机或安全组阻断,双方都收不到对端。少数情况下是两台 priority 配成一样,抢占逻辑分不出主备。

不容易想到的是,单播配置里 unicast_peer 地址写错或者漏了本端。

还有一种情况,防火墙只放了 TCP,VRRP 走的是 IP 协议号 112。

先确认 VIP 现在挂在哪台机器上

ip addr show eth0 | grep 192.168.10.100

然后抓 VRRP 报文看两边是否互通

tcpdump -i eth0 -nn proto 112 -c 20

接着放行 VRRP 协议并修正单播配置

firewall-cmd --permanent --add-rich-rule='rule protocol value="vrrp" accept' && firewall-cmd --reload

拉开优先级后重启服务观察

systemctl restart keepalived && journalctl -u keepalived -n 50

隔了一天再看,现象没变,说明不是偶发。

怎么算真的好了,看的是同一批现象。只有一台持有 VIP,另一台稳定处于 BACKUP,日志里的状态切换不再来回跳,业务访问连续。

云上不支持 VRRP 组播,必须用 unicast_peer 单播;有些 VPC 直接禁协议号 112,只能改用 SLB 或弹性网卡切换。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189