Keepalived 脑裂问题排查
💡
原文中文,约2600字,阅读约需7分钟。
📝
内容提要
用户在虚拟机中启动 Keepalived 时遇到脑裂问题,导致出现两个 master 节点。经过排查发现,VRRP 协议的组播流量未被物理机的 macvtap 接口接收。解决方法是设置接口以接收所有组播流量,从而正常处理 VRRP。
🎯
关键要点
-
用户在虚拟机中启动 Keepalived 时遇到脑裂问题,导致出现两个 master 节点。
-
Keepalived 是基于 LVS 的负载均衡和高可用框架,使用 VRRP 协议实现负载均衡。
-
VRRP 协议用于协商 master 节点,确保高可用性。
-
出现两个 master 节点是因为 slave 节点未收到 master 的 VRRP 协议包。
-
通过 tcpdump 检查发现两个 Keepalived 实例都在发送 VRRP 包,但无法接收到对方的包。
-
网络架构中,物理机使用 bonding 连接交换机,虚拟机通过 macvtap 发送包。
-
VRRP 协议基于组播,可能是 ACL 导致组播流量被丢弃。
-
通过抓包排查,发现 VRRP 包在 macvtap1 到 eth0 的转发中丢失。
-
研究发现物理机的 macvtap 接口未订阅 VRRP 的组播地址,导致忽略该流量。
-
解决方法是设置 macvtap 接口接收所有组播流量,确保正常处理 VRRP 包。
-
为了避免 VRRP 脑裂问题,建议在物理网络中使用专用的 keepalive 线路和 LACP 高可用配置。
🏷️
标签
➡️