MLAG 冗余场景

问题

Cumulus Linux 多机箱链路聚合 (MLAG) 使两台交换机在第 2 层上运行,如同它们是一台逻辑第 2 层交换机,从而提供更高的吞吐量和冗余性。本文讨论了常见故障冗余场景中预期的 LACP 和 STP 行为。本文假设您对 Cumulus Linux MLAG、LACP 链路聚合和 STP 有一定的了解。您可以在 Cumulus Linux 用户指南中找到 MLAG 功能和配置说明。

环境

  • Cumulus Linux,所有版本

MLAG 稳态概述

每个 MLAG 对等交换机都将 bond 接口视为单连接或双连接。单连接 bond 是配置了 clag-id 但当前仅在一个对等设备上处于活动状态的 LACP bond 接口。

双连接 bond 是配置了 clag-id 且当前在两个 MLAG 对等设备上都处于活动状态的 LACP bond。您可以通过 clagctl -v 输出的 LACP 信息字段中的 D 标志来识别双连接 bond。

在以下示例中,Bond1 是双连接的。Bond2 当前在 sw28 上处于关闭状态。因此,Bond2 是单连接到 sw27 的。

cumulus@switch$ ip link show bond1
root@sw27:~ # clagctl -v
The peer is alive
  Our Priority, ID, and Role: 4096 70:72:cf:9d:48:06 primary
 Peer Priority, ID, and Role: 8192 70:72:cf:9d:4e:36 secondary
      Peer Interface and IP: peerlink.4094 1.1.1.2
                  Backup IP: (inactive)
                 System MAC: 44:39:39:ff:00:01

CLAG Interfaces
Our Interface    Peer Interface   CLAG Id Conflicts            Proto-Down Reason
---------------- ---------------- ------- -------------------- -----------------
           Bond1 Bond1            81      -                    - 
           Bond2 -                82      -                    -

Our LACP Information
Our Interface    Partner MAC CIST  PortId CLAG Id Oper St Flags
---------------- ----------------- ----------- ------- ------- -----
Bond1            00:e0:ec:27:36:37 None        81      None    D 
Bond2            00:e0:ec:27:43:51 None        82      None    -

Peer LACP Information
Peer Interface   Partner MAC       CIST PortId CLAG Id Oper St Flags
---------------- ----------------- ----------- ------- ------- -----
Bond1            00:e0:ec:27:36:37 None        81      None     D 
Bond2            00:00:00:00:00:00 None        82      None     -

在稳态下,用于 MLAG bond 的本地 LACP 系统 ID 是 clagd-sys-mac 地址。

对等交换机也可能具有额外的孤立端口 — 未配置 clag-id 的第 2 层接口或 bond。这些 bond 的 LACP 系统 ID 是 bond MAC 地址。孤立端口可以与 MLAG bond 成员一起使用 STP。

在以下示例中,网桥 vlans 包含两个 MLAG bond,Bond1 和 Bond2,以及两个孤立端口,swp28 和 bond3,它们不在 MLAG 对中。

root@sw27:~ # brctl show
bridge name bridge id STP enabled interfaces
vlans 8000.7072cf9d4806 yes peerlink
swp28
Bond1
Bond2
bond3

在稳态下,MLAG 对必须在连接的第 2 层网络中表现为一台交换机。因此,主交换机和辅助 MLAG 交换机都使用 clagd-sys-mac 地址作为所有端口上通用的 STP 网桥 ID。主交换机和辅助交换机都在孤立端口和单连接端口上发送 BPDUs。只有主交换机发送双连接 bond 上的 BPDUs。主交换机和辅助交换机都接收双连接 bond 上的 BPDUs。

MLAG 对等设备不必是生成树根。但是,与所有第 2 层拓扑一样,根网桥的位置会影响转发拓扑。因此,使用 mstpctl-treeprio 设置生成树优先级以帮助选择最佳根是有用的。配置 mstpctl-treeprio 时,应将两个对等设备配置为相同的优先级。

您可以使用 mstpctl showall 来显示生成树状态,包括特定的 MLAG 生成树状态信息。对于双连接 bond,MLAG 双连接 MAC 地址是双连接 LACP bond 伙伴的 MAC 地址。

clag ISL no clag ISL Oper UP no
 clag role primary clag dual conn mac 00:E0:EC:27:36:37
 clag remote portID F.FFF clag system mac 44:39:39:FF:00:01

当 bond 是单连接时,MLAG 双连接 MAC 地址为空。

clag ISL yes clag ISL Oper UP yes
 clag role primary clag dual conn mac 00:00:00:00:00:00
 clag remote portID F.FFF clag system mac 44:39:39:FF:00:01

冗余故障场景

NVIDIA 建议指定一个备份链路,以便在对等链路发生故障时检查对等交换机的健康状况。备份链路用于区分对等链路故障和对等交换机故障。

您可以使用 clagd-backup-ip 配置备份链路。如果在对等链路发生故障时 clagd-backup-ip 处于活动状态(即,备份 IP 地址可达),则辅助交换机使用它来确定主对等设备是否仍然处于活动状态(或存活 — 交换机已启动;但是,对等链路可能已关闭)。由于主设备仍然处于活动状态,因此主对等设备继续对所有 bond 使用预先存在的 LACP 系统 ID。主设备还继续使用 clagd-sys-mac 作为所有端口的 STP 网桥 ID。

在这种情况下,辅助交换机无法继续作为与其对等设备的单个交换机运行。因此,辅助对等设备关闭双连接 bond 的成员链路。由于在这种情况下主对等设备已启动,因此主交换机继续维护其与远程系统的 LACP 会话。因此,往返于双连接 bond 的流量将转移到主对等设备。

连接到辅助交换机的孤立端口保持启动状态。但是,辅助交换机开始使用其本地接口 MAC 地址而不是 clagd-sys-mac 作为所有端口的 STP 网桥 ID。

以下 tcpdump 输出显示了网桥 ID 从 clagd-sys-mac (44:39:39:ff:00:01) 更改为本地 MAC (70:72:cf:9d:4e:36)

root@sw20:~ # tcpdump -i swp26s1 stp 
tcpdump: WARNING: swp26s1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on swp26s1, link-type EN10MB (Ethernet), capture size 65535 bytes
16:30:59.550638 STP 802.1w, Rapid STP, Flags [Learn, Forward, Agreement], bridge-id 0000.44:39:39:ff:00:01.8005, length 43
16:31:01.550954 STP 802.1w, Rapid STP, Flags [Learn, Forward, Agreement], bridge-id 0000.44:39:39:ff:00:01.8005, length 43
16:31:02.590928 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 0000.70:72:cf:9d:4e:36.8005, length 43
16:31:02.590968 STP 802.1w, Rapid STP, Flags [Proposal, Agreement], bridge-id 0000.70:72:cf:9d:4e:36.8005, length 43
16:31:04.550856 STP 802.1w, Rapid STP, Flags [Proposal, Agreement], bridge-id 0000.70:72:cf:9d:4e:36.8005, length 43
16:31:06.550882 STP 802.1w, Rapid STP, Flags [Proposal, Learn, Forward, Agreement], bridge-id 0000.70:72:cf:9d:4e:36.8005, length 43
16:31:07.376348 STP 802.1w, Rapid STP, Flags [Proposal, Agreement], bridge-id 8000.00:e0:ec:27:43:51.8002, length 36
16:31:07.377232 STP 802.1w, Rapid STP, Flags [Topology change, Learn, Forward], bridge-id 0000.70:72:cf:9d:4e:36.8005, length 43
16:31:07.377268 STP 802.1w, Rapid STP, Flags [Topology change, Learn, Forward, Agreement], bridge-id 0000.70:72:cf:9d:4e:36.8005, length 43

辅助交换机上 STP 网桥 ID 的更改会导致第 2 层网桥拓扑更改。

如果在对等链路发生故障时 clagd-backup-ip 未处于活动状态,则辅助设备必须假定主设备可能仍处于活动状态。由于在这种情况下主对等设备仍然处于活动状态,因此主对等设备继续对所有 bond 使用预先存在的 LACP 系统 ID。主设备还继续使用 clagd-sys-mac 作为所有端口的 STP 网桥 ID。

但是,辅助对等设备无法继续使用通用的 clagd-sys-mac 地址作为其 LACP 系统 ID。辅助对等设备开始使用 bond 接口 MAC 地址作为 LACP 系统 ID。

以下 tcpdump 输出显示了对等链路关闭时 LACP 系统 ID 的更改。

root@sw20:~ # tcpdump -i swp26s0 ether proto 0x8809 -evx | grep "70:72:cf:9d:4e:4d" -A3
tcpdump: WARNING: swp26s0: no IPv4 address assigned
tcpdump: listening on swp26s0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:45:28.526237 70:72:cf:9d:4e:4d (oui Unknown) > 01:80:c2:00:00:02 (oui Unknown), ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
 Actor Information TLV (0x01), length 20
 System 44:39:39:ff:00:01 (oui Unknown), System Priority 65535, Key 33, Port 1, Port Priority 255
 State Flags [Activity, Timeout, Aggregation, Synchronization, Collecting, Distributing]
--
15:45:29.726281 70:72:cf:9d:4e:4d (oui Unknown) > 01:80:c2:00:00:02 (oui Unknown), ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
 Actor Information TLV (0x01), length 20
 System 70:72:cf:9d:4e:4d (oui Unknown), System Priority 65535, Key 33, Port 1, Port Priority 255
 State Flags [Activity, Timeout, Aggregation, Synchronization]

由于在这种情况下主对等设备已启动,因此主交换机维护其与远程系统的 LACP 会话。因此,远程系统无法与辅助设备建立 LACP 会话。因此,辅助设备上的双连接 bond 恢复为 NO-CARRIER 状态。

以下显示底层 bond 成员链路已启动,但 bond 已关闭

root@sw28:~ # ip link show swp25
27: swp25: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master Bond2 state UP mode DEFAULT qlen 500
 link/ether 70:72:cf:9d:4e:4d brd ff:ff:ff:ff:ff:ff
 
root@sw28:~ # ip link show Bond2
69: Bond2: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master vlans state DOWN mode DORMANT 
 link/ether 70:72:cf:9d:4e:4d brd ff:ff:ff:ff:ff:ff

往返于双连接 bond 的流量将转移到活动对等设备。孤立端口在辅助交换机上保持启动状态。但是,辅助交换机开始使用本地接口 MAC 地址而不是 clagd-sys-mac 作为所有端口的 STP 网桥 ID。

请注意,辅助交换机上 STP 网桥 ID 的更改可能会导致 STP 收敛。

场景 3:主设备断电,clagd-backup-ip 处于活动状态

当主设备断电时,辅助设备使用 clagd-backup-ip 来确定主对等设备不再处于活动状态。由于主设备已断电,您应该预期远程系统和主设备之间的链路(bond)也必须关闭。

连接到主对等设备的孤立端口在您恢复主设备之前将无法使用。

辅助对等设备转换为主角色。因此,它继续对所有 bond 使用预先存在的 LACP 系统 ID。它还开始在 MLAG bond 上发送 BPDUs。

当您再次打开原始主交换机的电源时,它将重新担任主角色。

场景 4:主设备断电,clagd-backup-ip 未处于活动状态

如果在您关闭主交换机电源时 clagd-backup-ip 未处于活动状态,则辅助设备必须假定主设备仍处于活动状态。由于主设备未处于活动状态,因此主交换机和远程系统之间的 bond 将关闭。

连接到主对等设备的孤立端口在您恢复主设备之前将无法使用。

就像在对等链路故障场景中一样,当 clagd-backup-ip 未处于活动状态时,辅助对等设备无法继续使用通用的 clagd-sys-mac 地址作为其 LACP 系统 ID。因此,辅助交换机现在开始使用 bond 接口 MAC 地址作为 LACP 系统 ID。

在这种情况下,由于主设备已关闭,因此来自辅助设备的 bond 将启动。辅助设备还开始使用其本地接口 MAC 而不是 clagd-sys-mac 作为所有端口的 STP 网桥 ID。

场景 5:通过 reboot 命令重启主设备

当您通过 reboot 命令重启主交换机时,主交换机向辅助交换机发送告别消息,通知辅助交换机担任主角色。主设备还会关闭具有 clag-id 的 bond。因此,流量将转移到另一个对等设备。

连接到主对等设备的孤立端口在您恢复主设备之前将无法使用。

辅助对等设备转换为主角色。因此,它继续对所有 bond 使用预先存在的 LACP 系统 ID。它还开始在 MLAG bond 上发送 BPDUs。

当您再次打开原始主交换机的电源时,它将重新担任主角色。

场景 6:辅助设备断电或重启

主对等设备保持主角色,并继续使用预先存在的 LACP 系统 ID 和 clagd-sys-mac 地址作为 STP 网桥 ID。往返于双连接 bond 的流量应从辅助对等设备转移到主对等设备。

连接到辅助对等设备的孤立端口在辅助交换机恢复之前将无法使用。

当您再次打开辅助交换机的电源时,它将重新担任辅助角色。