Linux 高可用架构安全与防护实践

2次阅读

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

Linux 高可用架构安全与防护实践

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.confglobal_defs 块里加 disable_watchdog
  • 别改 /dev/watchdog 权限——它由内核模块管理,chmod 无效;强行创建软链接或 touch 文件只会让 Keepalived 启动后立刻退出

VIP 漂移后客户端连接中断,arp_ignorearp_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.confquorum { provider: corosync_votequorum } 不能删,换成 qdevice 需额外部署 qnetd 服务
  • 别信 pcs quorum unblock —— 它只是跳过校验,不解决根本问题;真遇到分区,强制恢复可能引发数据冲突

ssh 登录跳转到高可用 VIP 后,systemctl status keepalivedUnit 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 不是“主节点代理”,它只是个浮动标签;谁贴上它,谁才是当前决策者。这点一旦混淆,排查方向全错。

text=ZqhQzanResources