直接分析Keepalived日志中的状态变更、VRRP通信失败、认证异常和脚本返回值四类关键信息,结合journalctl过滤与tcpdump等验证手段,可快速定位VIP漂移故障根因。

直接看日志里的关键状态变化和错误提示,比盲目查配置更高效。Keepalived 日志默认输出到系统日志(syslog),核心线索集中在状态切换、VRRP 报文收发失败、脚本执行结果和认证异常这几类信息上。
关注四类关键日志条目
Keepalived 启动或运行中产生的日志里,真正影响 VIP 漂移的只有少数几类。重点盯住以下内容:
-
状态变更记录:如
Entering MASTER STATE、Entering BACKUP STATE、Transition to MASTER STATE。若主备节点日志中都出现Entering MASTER STATE,基本可判定已发生双主;若备机始终没这条日志,说明它根本没完成状态提升。 -
VRRP 通信失败提示:常见如
Received advert with lower priority, ignoring(收到低优先级通告,忽略)、No VRRP advertisements received(未收到任何通告)、Lost communication with master(与主节点失联)。后两者往往指向网络不通或防火墙拦截。 -
认证失败信息:如
Authentication failure或Invalid authentication type。说明主备节点的authentication块配置不一致(比如一个用 PASS,一个用 AH;或密码长度超限、含不可见字符)。 -
脚本跟踪异常:如果用了
vrrp_script+track_script,留意类似Track script returned 1或Script result: 0 (OK)的输出。返回非 0 值会触发 weight 调整,可能意外拉低主节点优先级,导致其降为 BACKUP。
用 journalctl 快速过滤有效信息
别翻完整日志。用带时间范围和关键词的命令直击问题时段:
- 查最近5分钟所有 Keepalived 状态变化:
journalctl -u keepalived --since "5 minutes ago" | grep -E "(MASTER|BACKUP|advert|auth|script)" - 对比主备节点是否同步看到对方通告:
journalctl -u keepalived --since "10 minutes ago" | grep "Received advert"—— 主节点日志应有“Received advert from X.X.X.X”,备节点也应有类似记录;若只有一方有,说明单向通信中断。 - 检查启动阶段是否报错:
journalctl -u keepalived --no-pager -n 50,看最末尾几十行有没有invalid、syntax error、interface not found类提示。
结合日志交叉验证网络与配置
日志只是线索,需配合基础检查确认根因:
- 若日志显示
No VRRP advertisements received,立刻在两节点执行:tcpdump -i eth0 -n port 112 -c 5,确认是否有 VRRP 报文进出。没有则查防火墙、rp_filter、交换机组播限制。 - 若日志频繁出现
Authentication failure,直接比对主备配置中authentication { auth_type PASS; auth_pass 123456; }是否完全一致(注意空格、换行、特殊字符)。 - 若日志里
track_script返回值异常,手动执行对应脚本(如/etc/keepalived/check_nginx.sh),看退出码和输出是否符合预期。
留意 silent fail 场景:日志里“没报错”反而是线索
有些问题不会报错,但日志会暴露异常沉默:
- 主节点日志持续刷
Send advert,但备节点日志里完全没Received advert—— 典型网络隔离,不是配置问题。 - 重启后两节点日志几乎同时出现
Entering MASTER STATE,且无任何Lost communication提示 —— 很可能是双 BACKUP 配置 + 启动竞争,而非网络故障。 - 日志中长期只有
Using LinkWatch kernel netlink reflector类初始化信息,后续再无状态更新 —— 可能 keepalived 进程卡住或被 systemd 限制了资源(查systemctl show keepalived | grep Memory)。

















