Keepalived 脑裂问题排查
内容提要
用户在虚拟机中启动 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 高可用配置。
延伸问答
什么是 Keepalived,它的主要功能是什么?
Keepalived 是一个基于 LVS 的负载均衡和高可用框架,主要通过 VRRP 协议实现负载均衡。
脑裂问题是如何在 Keepalived 中产生的?
脑裂问题产生是因为 slave 节点未收到 master 的 VRRP 协议包,导致两个节点都认为自己是 master。
如何排查 Keepalived 的脑裂问题?
可以通过 tcpdump 检查 VRRP 包的发送和接收情况,确认是否存在丢包现象。
为什么物理机的 macvtap 接口未能接收到 VRRP 的组播流量?
因为物理机的 macvtap 接口未订阅 VRRP 的组播地址,导致忽略该流量。
解决 Keepalived 脑裂问题的有效方法是什么?
可以通过设置 macvtap 接口接收所有组播流量,确保正常处理 VRRP 包。
在物理网络中如何避免 VRRP 脑裂问题?
建议使用专用的 keepalive 线路和 LACP 高可用配置来避免 VRRP 脑裂问题。