keepalived 启动失败报“can't open /dev/watchdog”是因内核未加载watchdog模块或硬件不支持,需加载对应模块(如itco_wdt)或在global_defs中配置disable_watchdog。

Keepalived 启动失败报 “can't open /dev/watchdog” 怎么办
这问题不是权限或配置写错,而是系统没加载 watchdog 模块,或者硬件不支持。Keepalived 默认启用 vrrp_sync_group 时会尝试访问 /dev/watchdog,哪怕你没配健康检查也会触发。
- 先确认内核是否支持:
lsmod | grep watchdog,没输出就运行modprobe iTCO_wdt(Intel 主板)或modprobe bcm2835_wdt(树莓派),部分云主机压根不提供 watchdog 设备,得关掉 - 临时禁用:在
keepalived.conf的global_defs块里加disable_watchdog - 别改
/dev/watchdog权限——它由内核模块管理,chmod 无效;强行创建软链接或 touch 文件只会让 Keepalived 启动后立刻退出
VIP 漂移后客户端连接中断,arp_ignore 和 arp_announce 该设几
这是典型 ARP 缓存污染问题。主备切换后,旧的 ARP 记录还在交换机或客户端缓存里,新主节点发的响应包被丢弃。
- 必须设
net.ipv4.conf.all.arp_ignore = 1:只响应目标 IP 是本接口地址的 ARP 请求 - 必须设
net.ipv4.conf.all.arp_announce = 2:ARP 广播时优先选跟目标 IP 同子网的接口地址,避免从非 VIP 接口发通告 - 云环境(如阿里云、AWS)禁止自定义 ARP 行为,这些内核参数无效;得靠云厂商提供的高可用方案(如阿里云 SLB + ECS 主备)或使用 Anycast
用 Pacemaker + Corosync 搭集群,corosync-quorumtool -s 显示 Quorate: No
不是网络不通,也不是服务没起,是法定票数(quorum)没凑够。Corosync 要求超过半数节点在线才能认为集群“可信”,否则主动停服务防脑裂。
- 双节点集群必须显式启用
qdevice或配置two_node: 1并加expected_votes: 1,否则默认要 2 票,挂一个就失权 -
corosync.conf里quorum { provider: corosync_votequorum }不能删,换成qdevice需额外部署 qnetd 服务 - 别信
pcs quorum unblock—— 它只是跳过校验,不解决根本问题;真遇到分区,强制恢复可能引发数据冲突
SSH 登录跳转到高可用 VIP 后,systemctl status keepalived 报 Unit keepalived.service could not be found
这不是服务没装,是登录用户没进对节点。VIP 只负责流量转发,不保证你 SSH 连上去的就是当前 Master。很多团队误以为连 VIP 就等于连主节点,结果查日志、看状态全在备机上做。
- 先执行
ip addr show | grep "inet.*virtual",确认当前机器是否真持有 VIP - 用
sudo systemctl list-units --state=running | grep keepalived替代status,避免因 unit 文件路径异常导致误判 - 自动化运维脚本里别硬写
ssh vip,应先调用curl -s http://VIP/health或解析corosync-quorumtool -s输出再决定连哪台
真实环境里,VIP 不是“主节点代理”,它只是个浮动标签;谁贴上它,谁才是当前决策者。这点一旦混淆,排查方向全错。










