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

🔎

延伸解读

脑裂问题的成因分析

Keepalived 的脑裂问题主要源于 VRRP 协议的组播流量未被正确接收。由于物理机的 macvtap 接口未订阅 VRRP 的组播地址,导致 slave 节点无法接收到 master 的 VRRP 包,从而错误地认为 master 节点已失效。这一现象强调了网络配置中组播流量管理的重要性。

解决方案的实施

为了解决脑裂问题,需要在物理机的 macvtap 接口上设置接收所有组播流量。这可以通过命令 `ip link set dev macvtap8 allmulticast on` 实现。此举确保了虚拟机能够正常处理 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 脑裂问题。

🏷️

标签

➡️

继续阅读