先看现象。内网 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 或弹性网卡切换。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
