keepalived单播优化核心是精准可控的心跳通信:严格配置直连可达的unicast_peer、绑定专用心跳网络与源地址、关闭vrrp_strict、合理设置advert_int,并通过tcpdump和日志验证连通性。

Keepalived 使用 Unicast 模式优化心跳,核心不是“加更多地址”,而是让心跳更精准、更可控、更隔离。单播的本质是点对点通信,配置必须贴合实际网络拓扑和节点关系,否则反而引入干扰或失败风险。
只配直连且可达的对端 IP
unicast_peer 列表应严格限定为当前节点能三层直通的心跳伙伴 IP,不写无关节点、不写不可达地址、不写本机地址。
- 双节点高可用:A 节点只写 B 的心跳 IP;B 节点只写 A 的心跳 IP
- 三节点全互联:每个节点写另外两个节点的心跳 IP,但前提是三者间路由对称、无策略防火墙拦截、protocol 112 全部放行
- 禁止填入不存在的 IP、跨网段未路由的 IP、或业务网卡上未启用的 secondary IP
绑定专用心跳网络与源地址
避免复用业务网卡和业务 IP 发送 VRRP 心跳,防止业务流量突发导致心跳丢包。
- 物理机建议使用独立网卡(如 eth1)配置静态心跳 IP(如 10.10.10.1/30),并在 keepalived.conf 中通过 unicast_src_ip 明确指定该地址
- 云环境若无法新增网卡,可用 secondary IP(如 eth0:1)绑定私有子网 CIDR,并确保安全组允许 protocol 112 在该子网内双向通行
- 所有节点的 unicast_src_ip 和 unicast_peer 应处于同一子网,且路径无 NAT 或策略路由干扰
禁用 vrrp_strict 并调优检测节奏
vrrp_strict 与单播逻辑冲突,必须关闭;同时可适度放宽心跳间隔,提升稳定性。
- 全局配置中移除或注释掉 vrrp_strict 行,否则 Keepalived 启动失败并报错 “Unicast peers are not supported in strict mode”
- 默认 advert_int 为 1 秒,在稳定局域网中可保持;若网络偶有微秒级抖动,建议设为 2 秒,对应故障判定时间约为 6 秒(3×advert_int),减少误切
- 不推荐盲目缩短 advert_int,低至 0.5 秒可能加剧 CPU 占用和网络压力,收益有限
验证与排查要点
配置生效后需确认通信路径真实有效,不能仅依赖配置语法正确。
- 用 tcpdump 抓包验证:tcpdump -i eth1 -nn -s0 'ip proto 112',确认 VRRP 报文是否按预期单播发出并被对端收到
- 检查 /var/log/messages 或 journalctl -u keepalived,重点查找 “VRRP_Instance” 相关日志,确认 peer 是否进入 MASTER/BACKUP 状态
- 手动 telnet 或 nc 测试 protocol 112 不可行(因非 TCP/UDP),真正要测的是三层可达性:从 A ping B 的心跳 IP,且 B 的 iptables/nftables 允许 protocol 112 INPUT










