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 高可用配置。

➡️

继续阅读