keepalived 启动失败主因是 vrrp_script 权限不足或退出码非0;主备切换异常源于 priority 相同或 preempt 配置不当;vip 不漂移多因 interface 错误或 arp_ignore 限制;调试需启用 -d 参数并重定向日志。

Keepalived 启动失败:检查 vrrp_script 脚本权限和退出码
Keepalived 一启动就退出,日志里只显示 VRRP_Instance(VI_1) Entering FAULT STATE,大概率是健康检查脚本没跑通。它不关心你脚本写得多漂亮,只认两件事:能不能执行、退出码是不是 0。
-
vrrp_script对应的 shell 脚本必须有可执行权限(chmod +x /path/to/check.sh) - 脚本末尾必须显式
exit 0(成功)或exit 1(失败),不能靠命令自然退出——比如curl -f http://localhost:8080/health失败时返回非 0,但如果你加了|| true,Keepalived 就永远认为健康 - 脚本里避免用绝对路径缺失的命令(如直接写
systemctl而不是/usr/bin/systemctl),Keepalived 子进程的$PATH很窄
主备切换不生效:确认 priority 和 preempt 配置逻辑
两台机器都显示 MASTER,或者备机死活不抢主,问题常出在优先级设计和抢占开关上。Keepalived 不是“谁先启谁当主”,而是靠数值比较+状态协商。
-
priority值必须不同(比如主 100,备 90),相同值会导致选举失败,双双进入FAULT -
preempt默认为yes,但只在 MASTER 状态丢失后才触发抢占;如果备机一直卡在BACKUP,先用ip addr show确认 VIP 是否真没绑定,再查journalctl -u keepalived -n 50看有没有received lower priority advert类提示 - 不要依赖
advert_int缩短切换时间(比如设成 1s),网络抖动容易引发频繁切换;生产环境建议保持默认 1s 或调到 2s,配合authentication防误切
VIP 不漂移:排查 interface 和内核参数
配置写对了,keepalived -D 日志也显示 Transition to MASTER STATE,但 ip addr 就是看不到 VIP——十有八九是网卡名或内核限制挡住了。
ShopNC单用户商城系统是面向独立卖家而开发的B2C商城系统。系统运行稳定高效,功能强大,突出个性化配置要求,可以根据不同的营销策略,从模板、栏目、功能上进行调整,满足各类客户的需要。系统部署快捷方便,减轻了使用者的技术负担,简单的维护操作免去了用户的后顾之忧。本系统前台开放源码,后台加密的。产品特点快速安装,维护简单 分布提示安装,即使不熟悉技术的用户也可以自主安装系统。后台融合数据库等功能管
-
interface必须填实际物理网卡名(如ens192),不能填别名(ens192:0)或 bond 接口别名(bond0.100),否则 ARP 广播发不出去 - 检查
/proc/sys/net/ipv4/conf/all/arp_ignore和arp_announce:若为 1 或 2,可能抑制 VIP 的 ARP 响应,临时修复用echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore,持久化需写进/etc/sysctl.conf - 云环境(如 AWS、阿里云)通常禁用 VRRP 组播,必须改用
unicast_peer模式,并确保安全组放行 UDP 32768–65535 端口
日志太安静?打开 debug 并重定向输出
默认日志级别太低,systemctl status keepalived 只显示启动成功,出问题时像盲人摸象。别靠猜,让 Keepalived 把话讲明白。
- 启动时加
-d参数(ExecStart=/usr/sbin/keepalived -f /etc/keepalived/keepalived.conf -d),它会打印 VRRP 状态机每一步动作 - 日志默认走 syslog,但 systemd 下容易被合并或截断;改成直接输出到文件更可靠:
ExecStart=/usr/sbin/keepalived -f /etc/keepalived/keepalived.conf -l -S 0 -D 2>&1 | tee /var/log/keepalived-debug.log - 注意
-D(daemon 模式)和-d(debug)是两个参数,漏掉-d就等于没开调试
Keepalived 的脆弱点不在语法,而在它和系统底层的咬合处:脚本执行环境、内核网络栈、云平台限制。配完别急着测故障,先用 tcpdump -i any vrrp 看一眼组播报文有没有真正发出去——这才是最真实的健康信号。









