云服务器需强制Keepalived切单播模式:各节点配unicast_src_ip和unicast_peer,禁用组播,放行IP协议112,关闭vrrp_strict,同步时间,并抓包验证双向心跳。

云服务器环境普遍禁用组播,Keepalived 默认使用的 224.0.0.18 组播地址无法穿透底层网络,导致心跳丢失、双主或脑裂。解决方法是强制切换为单播模式——让节点之间直接点对点发送 VRRP 报文,绕过组播依赖。
核心配置必须项
单播不是“开启开关”,而是显式定义通信路径:
- 每个节点都要配置 unicast_src_ip:填本机实际参与通信的内网 IP(如 172.25.254.50),不能写 0.0.0.0 或 127.0.0.1
- unicast_peer 块中只写对端 IP:主节点写备节点 IP,备节点写主节点 IP,双向必须严格对应
- 注释或删除 vrrp_mcast_group4 行:避免 Keepalived 尝试发组播报文造成干扰
- virtual_router_id 两端完全一致:比如都设为 51,否则不被视为同一 VRRP 组
安全与系统层面检查
配置写对只是第一步,云平台的网络策略常卡在最后一步:
IT技术解决互联网公司网站模板是一款适合提供APP设计、网页开发、SEO优化、云服务、数据分析等服务的互联网公司宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。
- 安全组/网络 ACL 必须放行 IP 协议号 112:这不是 TCP/UDP 端口,是 raw IP 协议,需单独允许(如阿里云控制台选“自定义协议”→协议号 112)
- 本地防火墙也要放开:执行 iptables -I INPUT -p 112 -j ACCEPT,并保存规则
- 关闭 vrrp_strict:该选项在单播路径下会校验源地址等字段,容易误判报文非法,建议注释掉
- 两节点时间必须同步:chrony 或 ntp 对齐,误差超过 1 秒可能导致认证失败或状态抖动
验证是否真正生效
不要只看 keepalived 启动成功,要抓包确认心跳真实流动:
- 在节点 A 上运行:tcpdump -i eth0 'ip proto \112'(替换 eth0 为实际网卡名)
- 重启节点 B 的 keepalived:systemctl restart keepalived
- 观察 A 的抓包输出:应看到目标 IP 是 A 自己地址的 VRRP 包(即 B 主动发来的单播心跳)
- 反向在 B 上抓包,应看到源 IP 是 A 的地址——双向收发都看到才算通
- 若只发不收,优先查安全组和网卡名是否填错
常见踩坑点
这些细节不显眼,但极易导致单播“看似配好实则失效”:
- interface 参数写错网卡名(如 enp0s3 写成 eth0),VRRP 报文根本发不出去
- 使用多网卡时,unicast_src_ip 填了错误网段的 IP,路由不可达
- 主备节点 priority 设得一样,或 state 都写 MASTER,触发非预期抢占
- 未注释 vrrp_skip_check_adv_addr,某些版本下影响单播协商

















