多机箱链路聚合 - MLAG

MLAG 或 CLAG:其他供应商将 Cumulus Linux 的 MLAG 实现称为 CLAG、MC-LAG 或 VPC。您甚至可以在 Cumulus Linux 中看到对 CLAG 的引用,包括名为 clagd 的管理守护程序,以及代码中的其他选项,例如 clag-id,这些都是出于历史原因而存在的。Cumulus Linux 的实现实际上是一种多机箱链路聚合协议,因此本文档使用 MLAG。

MLAG 使具有双端口绑定(例如链路聚合组 (LAG)、EtherChannel、端口组或 trunk)的服务器或交换机能够将这些端口连接到不同的交换机,并像连接到单个逻辑交换机一样运行。这提供了更高的冗余性和更高的系统吞吐量。

双连接设备可以创建包含连接到每个物理交换机的链路的 LACP 绑定;即使双连接设备连接到两个不同的物理交换机,Cumulus Linux 也支持来自双连接设备的主动-主动链路。

MLAG 如何工作?

基本的 MLAG 配置如下所示


  • 两个交换机 leaf01 和 leaf02,称为对等交换机,对于 server01 上的绑定而言,表现为单个设备。
  • server01 以您在主机上配置的方式在 leaf01 和 leaf02 的两个链路之间分配流量。
  • 进入 server01 的流量可以遍历 leaf01 或 leaf02 并到达 server01。

更复杂的配置也是可能的。主机和交换机之间的链路数量可以大于两个,并且不必对称。此外,由于两个对等交换机对于其他绑定设备而言表现为单个交换机,因此您还可以将成对的 MLAG 交换机以交换机到交换机的 MLAG 配置相互连接



  • leaf01 和 leaf02 也是 MLAG 对等交换机,并呈现从单个逻辑系统到 spine01 和 spine02 的双端口绑定。

链路聚合控制协议 (LACP) 是用于管理绑定的 IEEE 标准协议,用于验证双连接性。LACP 在双连接设备和每个 MLAG 对等交换机上运行。在双连接设备上,唯一的配置要求是创建由 LACP 管理的绑定。

在每个对等交换机上,您必须将连接到双连接主机或交换机的链路放置在绑定中。即使链路是每个对等交换机上的单个端口,其中每个端口都在绑定中,也是如此,如下所示

对等交换机上的双连接绑定的系统 ID 设置为 MLAG 系统 ID。因此,从主机的角度来看,其绑定中的每个链路都连接到同一系统,因此主机使用两个链路。

每个对等交换机定期创建其绑定的 LACP 伙伴 MAC 地址列表,并将该列表发送给其对等方(使用 clagd 服务)。LACP 伙伴 MAC 地址是绑定另一端的系统的 MAC 地址(上图中的 server01、server02 和 server03)。当交换机从其对等方收到此列表时,它会将该列表与其交换机上的 LACP 伙伴 MAC 地址进行比较。如果有任何匹配项,并且这些绑定的 clag-id 匹配,则该绑定是双连接绑定。

要求

MLAG 有以下要求

  • 具有 MLAG 的两个对等交换机必须直接连接。这通常是一个绑定,以提高可靠性和带宽。
  • 一个 MLAG 配置中只能有两个对等交换机,但是您可以在网络中进行多个交换机到交换机的 MLAG 配置。
  • MLAG 对中的两个交换机必须相同;它们必须是同一型号的交换机并且运行相同的 Cumulus Linux 版本。请参阅升级 Cumulus Linux
  • 双连接设备(服务器或交换机)可以使用 LACP(IEEE 802.3ad 或 802.1ax)来形成绑定。在这种情况下,对等交换机也必须使用 LACP。

  • 多 VLAN 感知桥接配置不支持 MLAG。
  • 两个 MLAG 对等方必须使用相同的VXLAN 设备类型(单设备或传统设备)。

基本配置

要配置 MLAG,您需要在双连接设备上创建使用 LACP 的绑定,并在每个对等交换机上配置接口(包括绑定、VLAN、网桥和对等链路)。在 MLAG 对中的每个对等交换机上执行以下步骤

  1. 在双连接设备(例如,向交换机发送和接收流量的主机或服务器)上,创建使用 LACP 的绑定。您使用的方法因您配置的设备类型而异。

    如果您无法在您的环境中使用 LACP,则可以在 balance-xor 模式下配置绑定。

  2. 将连接到双连接设备的 MLAG 对的每个接口放入绑定中,即使该绑定仅包含单个物理交换机上的单个链路也是如此。

    以下示例将 swp1 放入 bond1,将 swp2 放入 bond2。

    cumulus@leaf01:~$ nv set interface bond1 bond member swp1
    cumulus@leaf01:~$ nv set interface bond1 description bond1-on-swp1
    cumulus@leaf01:~$ nv set interface bond2 bond member swp2
    cumulus@leaf01:~$ nv set interface bond2 description bond2-on-swp1
    cumulus@leaf01:~$ nv config apply
    

    将以下行添加到 /etc/network/interfaces 文件中。该示例还为绑定添加了描述(别名),这是可选的。

    cumulus@leaf01:~$ sudo nano /etc/network/interfaces
    ...
    auto bond1
    iface bond1
        alias bond1 on swp1
        bond-slaves swp1
    ...
    
    auto bond2
    iface bond2
        alias bond2 on swp2
        bond-slaves swp2
    ...
    
  3. 为每个绑定添加唯一的 MLAG ID。

    您必须为每个对等交换机上的每个双连接绑定指定唯一的 MLAG ID (clag-id),以便交换机知道哪些链路是双连接的或连接到同一主机或交换机。该值必须介于 1 和 65535 之间,并且在两个对等交换机上必须相同。值为 0 时禁用绑定上的 MLAG。

    以下示例命令为 bond1 添加 MLAG ID 1,为 bond2 添加 MLAG ID 2

    cumulus@leaf01:~$ nv set interface bond1 bond mlag id 1
    cumulus@leaf01:~$ nv set interface bond2 bond mlag id 2 
    cumulus@leaf01:~$ nv config apply
    

    /etc/network/interfaces 文件中,将 clag-id 1 行添加到 auto bond1 节,并将 clag-id 2 添加到 auto bond2

    cumulus@switch:~$ sudo nano /etc/network/interfaces
    ...
    auto bond1
    iface bond1
        alias bond1 on swp1
        bond-slaves swp1
        clag-id 1
    
    auto bond2
    iface bond2
        alias bond2 on swp2
        bond-slaves swp2
        clag-id 2
    ...
    
  4. 将您上面创建的绑定添加到网桥。以下示例命令将 bond1 和 bond2 添加到 VLAN 感知网桥。

    您必须将 MLAG 绑定上配置的所有 VLAN 添加到网桥,以便在 MLAG 绑定失败时,到 MLAG 中连接的下游设备的流量可以通过对等链路重定向。

    cumulus@leaf01:~$ nv set interface bond1-2 bridge domain br_default 
    cumulus@leaf01:~$ nv config apply
    

    编辑 /etc/network/interfaces 文件,将 bridge-ports bond1 bond2 行添加到 auto bridge

    cumulus@leaf01:~$ sudo nano /etc/network/interfaces
    ...
    auto bridge
    iface bridge
        bridge-ports bond1 bond2
        bridge-vlan-aware yes
    ...
    
  5. 创建机箱间绑定和对等链路 VLAN(作为 VLAN 子接口)。您还需要提供对等链路 IP 地址、MLAG 绑定接口、MLAG 系统 MAC 地址和备份接口。

    • 默认情况下,Cumulus Linux 将机箱间绑定配置为名称为 peerlink,并将对等链路 VLAN 配置为名称为 peerlink.4094。使用 peerlink.4094 以确保 VLAN 独立于网桥和生成树转发决策。
    • 对等链路 IP 地址是一个链路本地地址,提供对等交换机之间的 3 层连接。
    • NVIDIA 为 MLAG 提供了一个保留的 MAC 地址范围(介于 44:38:39:ff:00:00 和 44:38:39:ff:ff:ff 之间)。使用此范围内的 MAC 地址以防止与同一桥接网络中的其他接口发生冲突。
      • 请勿使用多播 MAC 地址。
      • 请勿为不同的 MLAG 对使用相同的 MAC 地址;确保为网络中的每个 MLAG 对指定不同的 MAC 地址。
    • 备份 IP 地址是对等链路的任何 3 层备份接口,当对等链路断开时,交换机使用该接口。您必须添加备份 IP 地址,该地址必须与对等链路 IP 地址不同。确保任何不使用对等链路的路由都可以到达备份 IP 地址。使用交换机的环回或管理 IP 地址。
      环回 IP 地址还是管理 IP 地址?

    以下示例显示了两个 MLAG 对等方(leaf01 和 leaf02)的命令。

    cumulus@leaf01:~$ nv set interface peerlink bond member swp49-50
    cumulus@leaf01:~$ nv set mlag mac-address 44:38:39:FF:00:AA
    cumulus@leaf01:~$ nv set mlag backup 10.10.10.2
    cumulus@leaf01:~$ nv set mlag peer-ip linklocal
    cumulus@leaf01:~$ nv config apply
    

    要将备份链路配置到 VRF,请在 backup-ip 参数中包含 VRF 的名称。以下示例将备份链路配置到 VRF mgmt

    cumulus@leaf01:~$ nv set mlag backup 10.10.10.2 vrf mgmt
    cumulus@leaf01:~$ nv config apply
    
    cumulus@leaf02:~$ nv set interface peerlink bond member swp49-50
    cumulus@leaf02:~$ nv set mlag mac-address 44:38:39:FF:00:AA
    cumulus@leaf02:~$ nv set mlag backup 10.10.10.1
    cumulus@leaf02:~$ nv set mlag peer-ip linklocal
    cumulus@leaf02:~$ nv config apply
    

    要将备份链路配置到 VRF,请在 backup-ip 参数中包含 VRF 的名称。以下示例将备份链路配置到 VRF mgmt

    cumulus@leaf02:~$ nv set mlag backup 10.10.10.1 vrf mgmt
    cumulus@leaf02:~$ nv config apply
    

    编辑 /etc/network/interfaces 文件以添加以下参数,然后运行 sudo ifreload -a 命令。

    • 机箱间绑定 (peerlink),绑定中有两个端口(以下示例命令中的 swp49 和 swp50)
    • 到网桥的 peerlink 绑定
    • 对等链路 VLAN (peerlink.4094),具有备份 IP 地址、对等链路 IP 地址 (linklocal) 和 MLAG 系统 MAC 地址(来自保留地址范围)。
    cumulus@leaf01:~$ sudo nano /etc/network/interfaces
    ...
    auto br_default
    iface br_default
        bridge-ports bond1 bond2 peerlink
        bridge-vlan-aware yes
    ...
    auto peerlink
    iface peerlink
        bond-slaves swp49 swp50
    

    auto peerlink.4094 iface peerlink.4094 clagd-backup-ip 10.10.10.2 clagd-peer-ip linklocal clagd-sys-mac 44:38:39:FF:00:AA …

    要将备份链路配置到 VRF,请在 clagd-backup-ip 参数中包含 VRF 的名称。以下示例将备份链路配置到 VRF RED

    cumulus@leaf01:~$ sudo nano /etc/network/interfaces
    ...
    auto peerlink.4094
    iface peerlink.4094
        clagd-backup-ip 10.10.10.2 vrf RED
        clagd-peer-ip linklocal
        clagd-sys-mac 44:38:39:FF:00:AA
    ...
    

    运行 sudo ifreload -a 命令以应用所有配置更改

    cumulus@leaf01:~$ sudo ifreload -a
    
    cumulus@leaf02:~$ sudo nano /etc/network/interfaces
    ...
    auto br_default
    iface br_default
        bridge-ports bond1 bond2 peerlink
        bridge-vlan-aware yes
    ...
    auto peerlink
    iface peerlink
        bond-slaves swp49 swp50
    

    auto peerlink.4094 iface peerlink.4094 clagd-backup-ip 10.10.10.1 clagd-peer-ip linklocal clagd-sys-mac 44:38:39:FF:00:AA …

    要将备份链路配置到 VRF,请在 clagd-backup-ip 参数中包含 VRF 的名称。以下示例将备份链路配置到 VRF RED

    cumulus@leaf02:~$ sudo nano /etc/network/interfaces
    ...
    auto peerlink.4094
    iface peerlink.4094
        clagd-backup-ip 10.10.10.1 vrf RED
        clagd-peer-ip linklocal
        clagd-sys-mac 44:38:39:FF:00:AA
    ...
    

    运行 sudo ifreload -a 命令以应用所有配置更改

    cumulus@leaf02:~$ sudo ifreload -a
    

  • 请勿将 VLAN 4094 添加到网桥 VLAN 列表;您无法将 VLAN 4094 配置为对等链路子接口的桥接 VLAN,且网桥 VID 在网桥下。
  • 请勿使用 169.254.0.1 作为 MLAG 对等链路 IP 地址;Cumulus Linux 将此地址用于 BGP 无编号接口。
  • 当您在 /etc/network/interfaces 文件中手动配置 MLAG 时,当您使用 sudo ifreload -a 命令启动对等链路接口时,更改才会生效。请勿使用 systemctl restart clagd.service 来应用新配置。
  • MLAG 绑定不支持 3 层配置。

MLAG 同步两个对等交换机之间的动态状态,但它不同步交换机配置。修改一个对等交换机的配置后,您必须对另一个对等交换机上的配置进行相同的更改。这适用于所有配置更改,包括

  • 端口配置,例如 VLAN 成员资格、MTU 和绑定参数。
  • 网桥配置,例如生成树参数或网桥属性。
  • 静态地址条目,例如静态 FDB 条目和静态 IGMP 条目。
  • QoS 配置,例如 ACL 条目。

可选配置

本节介绍可选的配置步骤。

设置角色和优先级

对中的每个启用 MLAG 的交换机都具有角色。当两个交换机之间建立对等关系时,一个交换机进入角色,另一个交换机进入辅助角色。当启用 MLAG 的交换机处于辅助角色时,它不会在双连接链路上发送 STP BPDU;它仅在单连接链路上发送 BPDU。主角色中的交换机在所有单连接和双连接链路上发送 STP BPDU。

默认情况下,交换机通过比较对等链路两侧的 MAC 地址来确定角色;MAC 地址较低的交换机承担主角色。您可以通过为对等链路设置 priority 选项来覆盖此设置

cumulus@leaf01:~$ nv set mlag priority 2084
cumulus@leaf01:~$ nv config apply

编辑 /etc/network/interfaces 文件并添加 clagd-priority 选项,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto peerlink.4094
iface peerlink.4094
    clagd-peer-ip linklocal
    clagd-backup-ip 10.10.10.2
    clagd-sys-mac 44:38:39:FF:00:AA
    clagd-priority 2048
...
cumulus@switch:~$ sudo ifreload -a

优先级值较低的交换机处于主角色;默认值为 32768,范围介于 0 和 65535 之间。

当交换机重启期间 MLAG 服务退出,或者如果您停止主交换机上的服务时,处于辅助角色的对等交换机会成为主交换机。

但是,如果主交换机在不停止 MLAG 服务的情况下宕机,或者对等链路宕机,则辅助交换机会更改其角色。如果对等交换机未激活,则辅助角色中的交换机会将 LACP 系统 ID 回滚为绑定接口 MAC 地址,而不是 MLAG 系统 MAC 地址 (clagd-sys-mac)。主角色中的交换机使用 MLAG 系统 MAC 地址作为绑定上的 LACP 系统 ID。

设置 clagctl 定时器

clagd 服务有几个定时器,您可以调整这些定时器以提高性能。

定时器
描述
--reloadTimer <秒>等待对等交换机变为活动状态的秒数。如果对等交换机在定时器到期后未变为活动状态,则 MLAG 绑定将离开初始化 (protodown) 状态并变为活动状态。这为 clagd 提供了足够的时间来确定对等交换机是正在启动还是永久不可达。
默认值为 300 秒。
--peerTimeout <秒>
clagd 在没有收到来自对等交换机的任何消息的情况下等待的秒数,然后确定对等方不再处于活动状态。此时,交换机将恢复所有配置更改,以便其作为标准非 MLAG 交换机运行。这包括删除所有静态分配的 MAC 地址、清除出口转发掩码,并允许地址从任何端口移动到对等端口。再次收到来自对等方的消息后,MLAG 操作将重新启动。如果未指定此参数,则 clagd 使用本地 lacpPoll 值的十倍。
--initDelay <秒>clagd 延迟启动 MLAG 绑定和任播 IP 地址的秒数。
默认值为 180 秒。NVIDIA 建议您在规模化环境中将此参数设置为 300 秒。
在以下情况下,此定时器会自动设置为 0
  • 当对等方未激活且备份链路在重新加载超时后未激活时
  • 当对等方发送告别消息时(通过对等链路或备份链路)
  • 当两个 MLAG 会话同时启动时
--sendTimeout <秒>clagd 等待发送套接字超时的秒数。如果发送数据到对等方的时间超过 sendTimeout 值,则 clagd 会生成异常。
默认值为 30 秒。
--lacpPoll <秒>clagd 在获取本地 LACP 信息之前等待的秒数。
默认值为 2 秒。

您可以使用 NVUE 设置的唯一定时器是初始延迟定时器。以下示例 NVUE 命令将初始延迟设置为 100 秒

cumulus@leaf01:~$ nv set mlag init-delay 100
cumulus@leaf01:~$ nv config apply

要设置 clagd 定时器,请编辑 /etc/network/interfaces 文件,将 clagd-args --<timer> 行添加到 peerlink.4094 节,然后运行 ifreload -a 命令。

以下示例命令将初始延迟定时器设置为 100 秒

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto peerlink.4094
iface peerlink.4094
    clagd-args --initDelay 100
    clagd-peer-ip linklocal
    clagd-backup-ip 10.10.10.2
    clagd-sys-mac 44:38:39:FF:00:AA
    clagd-priority 2048
...
cumulus@leaf01:~$ sudo ifreload -a

以下示例命令将对等超时设置为 900 秒

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto peerlink.4094
iface peerlink.4094
    clagd-args --peerTimeout 900
    clagd-peer-ip linklocal
    clagd-backup-ip 10.10.10.2
    clagd-sys-mac 44:38:39:FF:00:AA
    clagd-priority 2048
...
cumulus@leaf01:~$ sudo ifreload -a

使用传统网桥配置 MLAG

要使用传统模式网桥而不是 VLAN 感知模式网桥 配置 MLAG,您必须将对等链路和所有双连接链路配置为网桥上的 untagged(本机)端口(请注意 bridge-ports 行中没有任何 VLAN,并且缺少以下 bridge-vlan-aware 参数)

...
auto br0
iface br0
    bridge-ports peerlink bond1 bond2
...

以下示例向您展示了如何在对等链路中允许 VLAN 10

...
auto br0.10
iface br0.10
    bridge-ports peerlink.10 bond1.10 bond2.10
    bridge-stp on
...

在 MLAG 和传统网桥配置中,NVIDIA 建议您在对等链路上的所有 VLAN 上将网桥学习设置为关闭,但 3 层对等链路子接口除外;例如

...
auto peerlink
iface peerlink
    bridge-learning off
    
auto peerlink.1510
iface peerlink.1510
    bridge-learning off

auto peerlink.4094
iface peerlink.4094
...

配置备份 UDP 端口

默认情况下,Cumulus Linux 使用 UDP 端口 5342 和备份 IP 地址。要更改备份 UDP 端口,请编辑 /etc/network/interfaces 文件,将 clagd-args --backupPort <port> 添加到 auto peerlink.4094 节。

...
auto peerlink.4094
iface peerlink.4094
    clagd-args --backupPort 5400
    clagd-backup-ip 10.10.10.2
    clagd-peer-ip linklocal
    clagd-sys-mac 44:38:39:FF:00:AA
...

运行 sudo ifreload -a 命令以应用所有配置更改

cumulus@leaf01:~$ sudo ifreload -a

取消配置 MLAG

要取消配置 MLAG

运行以下命令以取消设置 MLAG,并取消设置 Cumulus Linux 自动创建的对等链路和对等链路 VLAN 子接口。您必须使用 nv config apply 命令同时运行这些命令。

cumulus@leaf01:~$ nv unset mlag
cumulus@leaf01:~$ nv unset interface peerlink
cumulus@leaf01:~$ nv unset interface peerlink.4094
cumulus@leaf01:~$ nv config apply

编辑 /etc/network/interfaces 文件。

  1. 删除 auto peerlink 节;例如,删除类似于以下内容的行
...
auto peerlink
iface peerlink
    bond-slaves swp49 swp50
auto peerlink.4094
iface peerlink.4094
clagd-backup-ip 10.10.10.2
clagd-peer-ip linklocal
clagd-sys-mac 44:38:39:FF:00:AA
...
  1. 从绑定节中删除 clag-id 行。在以下示例中,从 auto bond1 节中删除 clag-id 1,并从 auto bond2 节中删除 clag-id 2
...
auto bond1
iface bond1
    alias bond1 on swp1
    bond-slaves swp1
    clag-id 1

auto bond2
iface bond2
    alias bond2 on swp2
    bond-slaves swp2
    clag-id 2
...
  1. 从网桥节的 bridge-ports 行中删除 peerlink。在以下示例中,从 auto br_default 节中删除 peerlink
auto br_default
iface br_default
    bridge-ports bond1 bond2 peerlink
    bridge-vlan-aware yes
  1. 运行 sudo ifreload -a 命令
cumulus@leaf01:~$ sudo ifreload -a

最佳实践

在交换机上配置 MLAG 时,请遵循这些最佳实践。

MTU 和 MLAG

网桥 MTU 决定了 MLAG 流量中的 MTU。作为网桥成员的接口的最低 MTU 设置决定了网桥 MTU。如果您要设置 9216 字节以外的 MTU 默认值,则必须在每个物理接口和作为整个桥接域中每个 MLAG 网桥成员的绑定接口上配置 MTU。

以下示例命令为每个绑定接口(对等链路、上行链路、bond1、bond2)设置 1500 的 MTU,这些接口是网桥bridge的成员

cumulus@leaf01:~$ nv set interface peerlink.4094 link mtu 1500
cumulus@leaf01:~$ nv set interface uplink link mtu 1500
cumulus@leaf01:~$ nv set interface bond1 link mtu 1500
cumulus@leaf01:~$ nv set interface bond2 link mtu 1500
cumulus@leaf01:~$ nv config apply

编辑 /etc/network/interfaces 文件,然后运行 ifreload -a 命令。例如

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    bridge-ports peerlink uplink bond1 bond2

auto peerlink
iface peerlink
    mtu 1500

auto bond1
iface bond1
    mtu 1500

auto bond2
iface bond2
    mtu 1500

auto uplink
iface uplink
    mtu 1500
...
cumulus@leaf01:~$ sudo ifreload -a

STP 和 MLAG

始终在您的 2 层网络中启用 STP,并在面向主机的绑定接口上启用 BPDU Guard

  • 两个对等交换机上的 STP 全局配置必须相同。
  • 两个对等交换机上的双连接端口的 STP 配置必须相同。
  • 两个对等交换机上的 STP 优先级必须相同。
  • 在多网桥配置中,两个对等交换机上的所有网桥的 STP 优先级必须相同。
  • 为了在链路转换为转发状态时最大程度地缩短收敛时间,请配置边缘端口(对于标记和未标记的帧),并启用 PortAdminEdge 和 BPDU Guard。
  • 请勿在连接到 MLAG 绑定的系统上为 LACP ID 使用多播 MAC 地址;交换机会丢弃来自多播 MAC 地址的 STP BPDU。

与数据平面流量消耗的带宽相比,对等链路传输的流量很少。在典型的 MLAG 配置中,MLAG 对中两个交换机之间的大多数连接都是双连接的;跨对等链路的唯一流量是来自 clagd 进程的流量和一些 LLDP 或 LACP 流量。交换机不会将对等链路上收到的流量从双连接绑定中转发出去。

但是,在某些情况下,主机仅连接到 MLAG 对中的一个交换机;例如

  • 您的主机上存在硬件限制,其中只有一个 PCIE 插槽,因此系统上只有一个 NIC,因此主机仅通过该接口进行单连接。
  • 主机不支持 802.3ad,您无法在其上创建绑定。
  • 您正在考虑链路故障,其中主机变为单连接,直到故障解决。

确定有多少带宽在单连接接口之间传输,并将该带宽的一半设置为对等链路。平均而言,目的地为单连接主机的一半流量到达直接连接到单连接主机的交换机,另一半流量到达未直接连接到单连接主机的交换机。发生这种情况时,只有到达未直接连接到单连接主机的交换机的流量才需要遍历对等链路。

此外,您可以向对等链路绑定添加额外的链路,以处理对等链路绑定本身的链路故障。


  • 每台主机都有两个 10G 链路,每个 10G 链路都连接到 MLAG 对中的每个交换机。
  • 每台主机都有 20G 的双连接带宽;所有三台主机总共有 60G 的双连接带宽。
  • 为每个对等链路绑定设置至少 15G 的带宽,这表示单连接带宽的一半。

在规划完整机架的链路故障时,您只需设置足够的带宽即可满足您站点处理故障场景的策略。例如,对于具有 40 台服务器和两台交换机的完整机架,您可以计划在您响应事件之前,有 4 到 6 台服务器失去与单个交换机的连接并变为单连接。因此,如果您有 40 台主机,每台主机都具有 20G 的带宽双连接到 MLAG 对,则您可以为对等链路设置 20G 到 30G 的带宽,这占 4 到 6 台主机的单连接带宽的一半。

在 MLAG 环境中启用路由协议时,还需要管理上行链路;默认情况下,MLAG 不知道 3 层上行链路接口。如果发生对等链路故障,除非您使用单独的链路状态守护程序(例如 ifplugd),否则 MLAG 不会删除静态路由或关闭 BGP 或 OSPF 邻接关系。

当您将 MLAG 与 VRR 结合使用时,请在 peerlink.4094 接口上设置路由邻接关系。如果未在对等链路之间建立路由连接,则在 MLAG 对中的一台交换机上发生上行链路故障期间,如果目的地位于上行链路发生故障的交换机上,则出口流量不会转发。

要设置邻接关系,请根据您的网络配置 BGPOSPF 无编号对等互连。

  • 对于使用 Spectrum ASIC 的交换机,MLAG 环路避免机制还会丢弃到达 MLAG 对等链路接口并路由到双连接 VNI 的路由流量。如果您需要将未封装的流量路由到 MLAG 对等交换机以进行 VXLAN 转发,从而适应上行链路故障或其他设计需求,请在独立的路由接口(而不是 MLAG peerlink)上配置路由邻接关系。
  • 使用 Spectrum-2 ASIC 及更高版本的交换机允许到达对等链路的数据包路由到 VNI 以进行 VXLAN 封装。

对于 BGP,请使用如下配置

cumulus@leaf01:~$ nv set vrf default router bgp neighbor peerlink.4094 remote-as external
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
leaf01# configure terminal
leaf01(config)# router bgp 65101
leaf01(config-router)# bgp router-id 10.10.10.1
leaf01(config-router)# neighbor peerlink.4094 remote-as external
leaf01(config-router)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

如果您正在使用 EVPN 和 MLAG,则还需要在 peerlink.4094 接口上启用 EVPN 地址族

cumulus@leaf01:~$ sudo vtysh
leaf01# configure terminal
leaf01(config)# router bgp 65101
leaf01(config-router)# bgp router-id 10.10.10.1
leaf01(config-router)# neighbor peerlink.4094 remote-as external
leaf01(config-router)# address-family l2vpn evpn
leaf01(config-router-af)# neighbor peerlink.4094 activate
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

对于 OSPF,请使用如下配置

cumulus@leaf01:~$ nv set interface peerlink.4094 router ospf area 0.0.0.1
cumulus@leaf01:~$ nv config apply

MLAG 路由支持

除了通过 对等链路的路由邻接关系之外,Cumulus Linux 还支持在以下条件下从连接的网络设备到 MLAG 交换机的路由邻接关系

  • 路由器必须物理连接到交换机的单个接口。
  • 连接的路由器必须直接对等连接到物理连接的交换机上的本地地址。

路由器不能

  • 通过 MLAG 绑定接口连接到交换机。
  • 形成到虚拟地址(VRR 或 VRRP)的路由邻接关系。

故障排除

使用以下故障排除技巧来检查 MLAG 配置。

检查 MLAG 状态

要验证 MLAG 配置,请运行 nv show mlag 命令

cumulus@leaf01:mgmt:~$ nv show mlag
                operational              applied            description
--------------  -----------------------  -----------------  ------------------------------------------------------
enable                                   on                 Turn the feature 'on' or 'off'.  The default is 'off'.
debug                                    off                Enable MLAG debugging
init-delay                               100                The delay, in seconds, before bonds are brought up.
mac-address     44:38:39:FF:00:aa        44:38:39:FF:00:AA  Override anycast-mac and anycast-id
peer-ip         fe80::4638:39ff:fe00:5a  linklocal          Peer Ip Address
priority        32768                    32768              Mlag Priority
[backup]        10.10.10.2               10.10.10.2         Set of MLAG backups
backup-active   False                                       Mlag Backup Status
backup-reason                                               Mlag Backup Reason
local-id        44:38:39:00:00:59                           Mlag Local Unique Id
local-role      primary                                     Mlag Local Role
peer-alive      True                                        Mlag Peer Alive Status
peer-id         44:38:39:00:00:5a                           Mlag Peer Unique Id
peer-interface  peerlink.4094                               Mlag Peerlink Interface
peer-priority   32768                                       Mlag Peer Priority
peer-role       secondary                                   Mlag Peer Role

要显示 MLAG 接口信息,请运行 clagctl 命令

cumulus@leaf01:mgmt:~$ clagctl
The peer is alive
     Our Priority, ID, and Role: 32768 48:b0:2d:8b:f4:cb primary
    Peer Priority, ID, and Role: 32768 48:b0:2d:cf:ba:45 secondary
          Peer Interface and IP: peerlink.4094 fe80::4ab0:2dff:fecf:ba45 (linklocal)
                      Backup IP: 10.10.10.2 (active)
                     System MAC: 44:38:39:FF:00:aa

CLAG Interfaces
Our Interface      Peer Interface     CLAG Id   Conflicts              Proto-Down Reason
----------------   ----------------   -------   --------------------   -----------------
           bond1   -                  1         lacp partner mac       -              
                                                mismatch
           bond2   -                  2         lacp partner mac       -              
                                                mismatch
           bond3   -                  3         lacp partner mac       -              
                                                mismatch

显示所有 MLAG 设置

要查看所有 MLAG 设置,请运行 nv show mlag 命令

cumulus@leaf01:~$ nv show mlag
                operational                applied   
--------------  -------------------------  ----------
enable          on                         on        
mac-address     44:38:39:FF:00:aa          auto      
peer-ip         fe80::4ab0:2dff:fe52:1190  linklocal 
priority        1000                       1000      
init-delay      10                         10        
debug           off                        off       
[backup]        10.10.10.2                 10.10.10.2
peer-priority   2000                                 
backup-active   True                                 
local-id        48:b0:2d:d1:e4:e1                    
peer-id         48:b0:2d:52:11:90                    
local-role      primary                              
peer-role       secondary                            
peer-interface  peerlink.4094                        
peer-alive      True                                 
backup-reason                                        
anycast-ip      10.0.1.12

查看 MLAG 日志文件

默认情况下,运行时,clagd 服务会将状态消息记录到 /var/log/clagd.log 文件和 syslog

cumulus@spine01:~$ sudo tail /var/log/clagd.log
2016-10-03T20:31:50.471400+00:00 spine01 clagd[1235]: Initial config loaded
2016-10-03T20:31:52.479769+00:00 spine01 clagd[1235]: The peer switch is active.
2016-10-03T20:31:52.496490+00:00 spine01 clagd[1235]: Initial data sync to peer done.
2016-10-03T20:31:52.540186+00:00 spine01 clagd[1235]: Role is now primary; elected
2016-10-03T20:31:54.250572+00:00 spine01 clagd[1235]: HealthCheck: role via backup is primary
2016-10-03T20:31:54.252642+00:00 spine01 clagd[1235]: HealthCheck: backup active
2016-10-03T20:31:54.537967+00:00 spine01 clagd[1235]: Initial data sync from peer done.
2016-10-03T20:31:54.538435+00:00 spine01 clagd[1235]: Initial handshake done.
2016-10-03T22:47:35.255317+00:00 spine01 clagd[1235]: leaf01-02 is now dual connected.

监控 clagd 服务

由于 clagd 服务的关键性质,systemd 通过每 30 秒接收通知消息来持续监控其状态。如果 clagd 服务因任何原因终止或无响应,并且 systemd 在 60 秒后未收到任何消息,则 systemd 将重新启动 clagd 服务。systemd 将这些故障记录在 /var/log/syslog 文件中,并在首次故障时生成一个 cl-support 文件。

只要满足以下条件,监控就会自动进行

  • 您启用 clagd 服务。
  • 您为一个接口配置了对等 IP 地址 (clagd-peer-ip)、MLAG 系统 MAC 地址 (clagd-sys-mac) 和备份 IP 地址 (clagd-backup-ip)。
  • clagd 服务正在运行。如果您使用 systemctl stop clagd.service 命令停止 clagd,则 clagd 监控也会停止。

您可以使用 systemctl status 命令检查 clagd 是否正在运行

cumulus@leaf01:~$ systemctl status clagd.service
 ● clagd.service - Cumulus Linux Multi-Chassis LACP Bonding Daemon
    Loaded: loaded (/lib/systemd/system/clagd.service; enabled)
    Active: active (running) since Fri 2021-06-11 16:17:19 UTC; 12min ago
        Docs: man:clagd(8)
    Main PID: 27078 (clagd)
    CGroup: /system.slice/clagd.service
            └─27078 /usr/bin/python3 /usr/sbin/clagd --daemon linklocal peerlink.4094 44:38:39:FF:00:AA --priority 32768

当您进行 MLAG 配置更改时,Cumulus Linux 会自动验证两个 MLAG 对等设备上的相应参数,并根据其看到的冲突类型采取操作。对于每个冲突,/var/log/clagd.log 文件都会记录一条日志消息。

下表显示了 Cumulus Linux 采取的冲突类型和操作。

冲突类型操作
Bridge STP 模式全局当对等设备之间存在 STP 模式不匹配时,仅对辅助交换机上的 MLAG 链路执行 Protodown 操作。
MLAG 本征 VLAN接口当存在本征 VLAN 不匹配时,仅对辅助交换机上的 MLAG 链路执行 Protodown 操作。
STP 根桥优先级全局当对等设备之间存在 STP 优先级不匹配时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。
MLAG 系统 MAC 地址全局当对等设备之间存在 MLAG 系统 MAC 地址不匹配时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。
对等 IP全局当对等设备之间的同一子网内存在 IP 地址不匹配时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。一致性检查器不会触发链路本地关键字与静态 IPv4 地址之间,或跨子网的 IPv4 地址之间的 IP 地址不匹配。
对等链路 MTU全局当对等设备之间存在对等链路 MTU 不匹配时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。
对等链路本征 VLAN全局当对等设备之间存在对等链路 VLAN 不匹配时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。
当没有 PVID 时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。
VXLAN 任播 IP 地址全局当对等设备之间存在任播 IP 地址不匹配时,对辅助交换机上的 MLAG 链路和 VNI 执行 Protodown 操作。
在没有配置任播 IP 地址的节点上,对 MLAG 链路和 VNI 执行 Protodown 操作。
对等链路桥成员全局在存在对等链路桥成员冲突的 MLAG 交换机上,对 MLAG 链路和 VNI 执行 Protodown 操作。

对于此一致性检查,对等值始终显示 NOT-SYNCED,因为 Cumulus Linux 不强制对等链路使用相同的接口名称,并且由于传统桥的限制。

MLAG 链路桥成员接口如果 MLAG 链路不是桥成员,则在 MLAG 交换机上对 MLAG 链路和 VNI 执行 Protodown 操作。

对于此一致性检查,对等值始终显示 NOT-SYNCED,因为 Cumulus Linux 不强制对等链路使用相同的接口名称,并且由于传统桥的限制。

LACP 伙伴 MAC 地址接口如果存在 LACP 伙伴 MAC 地址不匹配或存在重复的 LACP 伙伴 MAC 地址,则在 MLAG 交换机上对 MLAG 链路执行 Protodown 操作。
MLAG VLAN接口如果 VLAN 不属于对等链路,或者 MLAG 对等设备之间的 MLAG 链路上配置的 VLAN 存在不匹配,则暂停任一 MLAG 对等设备上的不一致 VLAN。
对等链路 VLAN全局在所有双连接 MLAG 链路和 VXLAN 接口上,暂停任一 MLAG 对等设备上的不一致 VLAN。
MLAG 协议版本全局一致性检查记录 MLAG 对等设备之间的 MLAG 协议版本不匹配。Cumulus Linux 不会采取任何中断性操作。
MLAG 软件包版本全局一致性检查记录 MLAG 对等设备之间的 MLAG 软件包版本不匹配。Cumulus Linux 不会采取任何中断性操作。

您还可以使用以下命令手动检查 MLAG 不一致性

以下示例命令显示了每个对等设备的全局 MLAG 设置,并指示 MLAG 系统 MAC 地址不匹配。

cumulus@leaf01:mgmt:~$ nv show mlag consistency-checker global
Global Consistency-checker
=============================
    Parameter               LocalValue                 PeerValue                  Conflict  Summary
    ----------------------  -------------------------  -------------------------  --------  -------
    anycast-ip              -                          -                          -                
    bridge-priority         32768                      32768                      -                
    bridge-stp              on                         on                         -                
    bridge-type             vlan-aware                 vlan-aware                 -                
    clag-pkg-version        1.6.0-cl5.7.0u2            1.6.0-cl5.7.0u2            -                
    clag-protocol-version   1.6.1                      1.6.1                      -                
    peer-ip                 fe80::4ab0:2dff:fe3c:61d1  fe80::4ab0:2dff:fe3c:61d1  -                
    peerlink-bridge-member  Yes                        Yes                        -                
    peerlink-mtu            9216                       9216                       -                
    peerlink-native-vlan    1                          1                          -                
    peerlink-vlans          1, 10, 20, 30              1, 10, 20, 30              -                
    redirect2-enable        yes                        yes                        -                
    system-mac              44:38:39:FF:00:aa          44:38:39:FF:00:aa          system mac mismatch between clag peers

以下示例命令显示了每个对等设备上所有接口的 MLAG 设置,且没有冲突

cumulus@leaf01:mgmt:~$ nv show interface --view=mlag-cc
Interface  Conflict  LocalValue         Parameter         PeerValue
---------  --------  -----------------  ----------------  -----------------
bond1    -         yes                bridge-learning   yes
bond1    -         1                  clag-id           1
bond1    -         44:38:39:FF:00:aa  lacp-actor-mac    44:38:39:FF:00:aa
bond1    -         00:00:00:00:00:00  lacp-partner-mac  00:00:00:00:00:00
bond1    -         br_default         master            NOT-SYNCED
bond1    -         9216               mtu               9216
bond1    -         1                  native-vlan       1
bond1    -         1, 10, 20, 30      vlan-id           1, 10, 20, 30
bond2    -         yes                bridge-learning   yes
bond2    -         2                  clag-id           2
bond2    -         44:38:39:FF:00:aa  lacp-actor-mac    44:38:39:FF:00:aa
bond2    -         00:00:00:00:00:00  lacp-partner-mac  00:00:00:00:00:00
bond2    -         br_default         master            NOT-SYNCED
bond2    -         9216               mtu               9216
bond2    -         1                  native-vlan       1
bond2    -         1, 10, 20, 30      vlan-id           1, 10, 20, 30
bond3    -         yes                bridge-learning   yes
bond3    -         3                  clag-id           3
bond3    -         44:38:39:FF:00:aa  lacp-actor-mac    44:38:39:FF:00:aa
bond3    -         00:00:00:00:00:00  lacp-partner-mac  00:00:00:00:00:00
bond3    -         br_default         master            NOT-SYNCED
bond3    -         9216               mtu               9216
bond3    -         1                  native-vlan       1
bond3    -         1, 10, 20, 30      vlan-id           1, 10, 20, 30

以下示例命令显示了每个对等设备上 bond1 的 MLAG 设置,并指示 MTU 不匹配

cumulus@leaf01:mgmt:~$ nv show interface bond1 bond mlag consistency-checker
Parameter           LocalValue         PeerValue          Conflict  Summary
------------------  -----------------  -----------------  --------  -------
bridge-learning   yes                yes                -
clag-id           1                  1                  -
lacp-actor-mac    44:38:39:FF:00:aa  44:38:39:FF:00:aa  -
lacp-partner-mac  00:00:00:00:00:00  00:00:00:00:00:00  -
master            br_default         NOT-SYNCED         -
mtu               4800               1500               mtu mismatch on clag interface between clag peers
native-vlan       1                  1                  -
vlan-id           1, 10, 20, 30      1, 10, 20, 30      -

以下示例命令显示了每个对等设备的全局 MLAG 设置,并指示 MLAG 系统 MAC 地址不匹配。

cumulus@leaf02:mgmt:~$ clagctl consistency-check global
Parameter              LocalValue               PeerValue                Conflict
---------------------  -----------------------  -----------------------  --------------------------------------
system-mac             44:38:39:FF:00:ab        44:38:39:FF:00:aa        system mac mismatch between clag peers
clag-protocol-version  1.6.0                    1.6.0                    -
clag-pkg-version       1.6.0-cl5.0.1+u15        1.6.0-cl5.0.1+u15        -
bridge-priority        32768                    32768                    -
anycast-ip             -                        -                        -
peer-ip                fe80::4638:39ff:fe00:59  fe80::4638:39ff:fe00:59  -
redirect2-enable       yes                      yes                      -
peerlink-mtu           9216                     9216                     -
bridge-type            vlan-aware               vlan-aware               -
peerlink-master        br_default               NOT-SYNCED               -
peerlink-vlans         1, 10, 20, 30            1, 10, 20, 30            -
bridge-stp             on                       on                       -
peerlink-native-vlan   1                        1                        -

以下示例命令显示了每个对等设备上所有接口的 MLAG 设置,且没有冲突

cumulus@leaf01:mgmt:~$ clagctl consistency-check interface
Clag Interface: bond1
=====================
Parameter         LocalValue         PeerValue          Conflict
----------------  -----------------  -----------------  ----------
clag-id           1                  1                  -
lacp-partner-mac  00:00:00:00:00:00  00:00:00:00:00:00  -
lacp-actor-mac    44:38:39:FF:00:aa  44:38:39:FF:00:aa  -
vlan-id           1, 10, 20, 30      1, 10, 20, 30      -
native-vlan       1                  1                  -
master            br_default         NOT-SYNCED         -
mtu               9216               9216               -
bridge-learning   yes                yes                -

Clag Interface: bond2
=====================
Parameter         LocalValue         PeerValue          Conflict
----------------  -----------------  -----------------  ----------
clag-id           2                  2                  -
lacp-partner-mac  00:00:00:00:00:00  00:00:00:00:00:00  -
lacp-actor-mac    44:38:39:FF:00:aa  44:38:39:FF:00:aa  -
vlan-id           1, 10, 20, 30      1, 10, 20, 30      -
native-vlan       1                  1                  -
master            br_default         NOT-SYNCED         -
mtu               9216               9216               -
bridge-learning   yes                yes                -

Clag Interface: bond3
=====================
Parameter         LocalValue         PeerValue          Conflict
----------------  -----------------  -----------------  ----------
clag-id           3                  3                  -
lacp-partner-mac  00:00:00:00:00:00  00:00:00:00:00:00  -
lacp-actor-mac    44:38:39:FF:00:aa  44:38:39:FF:00:aa  -
vlan-id           1, 10, 20, 30      1, 10, 20, 30      -
native-vlan       1                  1                  -
master            br_default         NOT-SYNCED         -
mtu               9216               9216               -
bridge-learning   yes                yes                -

以下示例命令显示了每个对等设备上 bond1 的 MLAG 参数,并指示 MTU 不匹配

cumulus@leaf01:mgmt:~$ clagctl consistency-check interface bond1
Parameter         LocalValue         PeerValue          Conflict
----------------  -----------------  -----------------  ----------
clag-id           1                  1                  -
lacp-partner-mac  00:00:00:00:00:00  00:00:00:00:00:00  -
lacp-actor-mac    44:38:39:FF:00:aa  44:38:39:FF:00:aa  -
vlan-id           1, 10, 20, 30      1, 10, 20, 30      -
native-vlan       1                  1                  -
master            br_default         NOT-SYNCED         -
mtu               1480               1500               mtu mismatch on clag interface between clag peers
bridge-learning   yes                yes                -

当存在冲突时,Cumulus Linux 采取的操作具有中断性。如果您愿意,您可以配置交换机在发生冲突时不采取任何操作。编辑 /etc/network/interfaces 文件,在对等链路节中添加 clagd-args --gracefulConsistencyCheck FALSE 参数。

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto peerlink.4094
iface peerlink.4094
    clagd-args --gracefulConsistencyCheck FALSE
    clagd-backup-ip 10.10.10.2
    clagd-peer-ip linklocal
    clagd-sys-mac 44:38:39:FF:00:AA
...

您可以预期其中一个对等链路接口上会出现大量丢包。这些丢包用于防止 BUM(广播、未知单播、多播)数据包的环路。当交换机通过对等链路接收到数据包时,如果目标查找结果是作为双连接链路的出站接口,则交换机不会转发该数据包(以防止环路)。对等链路记录丢弃的数据包。

要检查对等链路接口上的丢包,请运行 ethtool -S <interface> 命令

cumulus@leaf01:mgmt:~$ ethtool -S swp49
NIC statistics:
     rx_queue_0_packets: 136
     rx_queue_0_bytes: 36318
     rx_queue_0_drops: 0
     rx_queue_0_xdp_packets: 0
     rx_queue_0_xdp_tx: 0
     rx_queue_0_xdp_redirects: 0
     rx_queue_0_xdp_drops: 0
     rx_queue_0_kicks: 1
     tx_queue_0_packets: 200
     tx_queue_0_bytes: 44244
     tx_queue_0_xdp_tx: 0
     tx_queue_0_xdp_tx_drops: 0
     tx_queue_0_kicks: 195

您还可以运行 nv show interface counters 命令。丢包的数量显示在 RX_DRP 列中。

cumulus@leaf01:mgmt:~$ nv show interface counters
Interface       MTU    RX_OK  RX_ERR  RX_DRP  RX_OVR  TX_OK  TX_ERR  TX_DRP  TX_OVR  Flg  
--------------  -----  -----  ------  ------  ------  -----  ------  ------  ------  -----
BLUE            65575  0      0       0       0       0      0       1       0       OmRU 
RED             65575  0      0       0       0       0      0       1       0       OmRU 
bond1           9000   0      0       0       0       1336   0       0       0       BMmRU
bond2           9000   0      0       0       0       1337   0       0       0       BMmRU
bond3           9000   0      0       0       0       1336   0       0       0       BMmRU
br_default      9216   69     0       0       0       191    0       0       0       BMRU 
eth0            1500   6184   0       0       0       3384   0       0       0       BMRU 
lo              65536  3835   0       0       0       3835   0       0       0       LRU  
mgmt            65575  4098   0       0       0       0      0       13      0       OmRU 
peerlink        9216   14604  0       0       0       14134  0       0       0       BMmRU
peerlink.4094   9216   9923   0       0       0       9423   0       0       0       BMRU 
swp1            9000   5      0       5       0       1336   0       0       0       BMsRU
swp2            9000   5      0       5       0       1337   0       0       0       BMsRU
swp3            9000   5      0       5       0       1336   0       0       0       BMsRU
swp4            1500        

除了标准的 UP 和 DOWN 管理状态外,作为 MLAG 链路成员的接口也可能处于 protodown 状态。当 MLAG 检测到可能导致连接问题的故障时,它会将该接口置于 protodown 状态。此类连接问题包括

  • 当对等链路断开但对等交换机处于运行状态时(备份链路处于活动状态)。
  • 当链路具有 MLAG ID 但 clagd 服务未运行时(您停止了服务或服务崩溃)。
  • 当启用 MLAG 的节点启动或重新启动时,交换机会将 MLAG 链路置于 protodown 状态,直到节点建立与对等交换机的连接,或五分钟后。

当接口进入 protodown 状态时,会导致接口上的本地 OPER DOWN(载波下降)。

要显示处于 protodown 状态的接口,请运行 Linux ip link show 命令。例如

cumulus@leaf01:mgmt:~$ ip link show
3: swp1 state DOWN: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 9216 master pfifo_fast master host-bond1 state DOWN mode DEFAULT qlen 500 protodown on
    link/ether 44:38:39:00:69:84 brd ff:ff:ff:ff:ff:ff

LACP 伙伴 MAC 地址重复或不匹配

在以下情况下,Cumulus Linux 会将接口置于 protodown 状态

  • 当存在 LACP 伙伴 MAC 地址不匹配时。例如,如果一个链路使用 clag-id 启动,而对等设备正在使用具有相同 clag-id 但不同 LACP 伙伴 MAC 地址的链路。NVUE nv show mlag lacp-conflict 或 Linux clagctl 命令输出将 protodown 原因显示为 partner-mac-mismatch

  • 当存在重复的 LACP 伙伴 MAC 地址时。例如,当同一两个 LACP 端点之间存在多个 LACP 链路时。NVUE nv show mlag lacp-conflict 或 Linux clagctl 命令输出将 protodown 原因显示为 duplicate-partner-mac

    为了防止在使用中的 LACP 伙伴 MAC 地址的 MLAG 链路启动时链路启动,请使用 --clag-args --allowPartnerMacDup False 选项。此选项会将该链路接口的从属接口置于 protodown 状态,并且 clagctl 输出会将 protodown 原因显示为 duplicate-partner-mac

在您进行必要的电缆或配置更改以避免 protodown 状态,并且您希望 MLAG 重新评估 LACP 伙伴之后,运行 NVUE nv action clear mlag lacp-conflict 命令或 Linux clagctl clearconflictstate 命令以从 protodown 链路中删除 duplicate-partner-macpartner-mac-mismatch,从而允许它们恢复正常运行。

配置示例

下面的示例显示了一个基本的 MLAG 配置,其中

  • leaf01 和 leaf02 是 MLAG 对等设备
  • MLAG 在三个链路上,每个链路具有一个端口,一个对等链路是一个具有两个成员端口的链路,每个端口上有三个 VLAN

有关 MLAG 和 BGP 的配置示例,请参阅 BGP 配置示例

cumulus@leaf01:~$ nv set interface lo ip address 10.10.10.1/32
cumulus@leaf01:~$ nv set interface swp1-3,swp49-51
cumulus@leaf01:~$ nv set interface bond1 bond member swp1
cumulus@leaf01:~$ nv set interface bond2 bond member swp2
cumulus@leaf01:~$ nv set interface bond3 bond member swp3
cumulus@leaf01:~$ nv set interface bond1 bond mlag id 1
cumulus@leaf01:~$ nv set interface bond2 bond mlag id 2
cumulus@leaf01:~$ nv set interface bond3 bond mlag id 3
cumulus@leaf01:~$ nv set interface vlan10 ip address 10.1.10.2/24
cumulus@leaf01:~$ nv set interface vlan20 ip address 10.1.20.2/24
cumulus@leaf01:~$ nv set interface vlan30 ip address 10.1.30.2/24
cumulus@leaf01:~$ nv set bridge domain br_default vlan 10,20,30
cumulus@leaf01:~$ nv set interface bond1-3 bridge domain br_default 
cumulus@leaf01:~$ nv set interface peerlink bond member swp49-50
cumulus@leaf01:~$ nv set system global anycast-mac 44:38:39:FF:00:AA
cumulus@leaf01:~$ nv set mlag backup 10.10.10.2
cumulus@leaf01:~$ nv set mlag peer-ip linklocal
cumulus@leaf01:~$ nv set mlag init-delay 100
cumulus@leaf01:~$ nv config apply
cumulus@leaf02:~$ nv set interface lo ip address 10.10.10.2/32
cumulus@leaf02:~$ nv set interface swp1-3,swp49-51
cumulus@leaf02:~$ nv set interface bond1 bond member swp1
cumulus@leaf02:~$ nv set interface bond2 bond member swp2
cumulus@leaf02:~$ nv set interface bond3 bond member swp3
cumulus@leaf02:~$ nv set interface bond1 bond mlag id 1
cumulus@leaf02:~$ nv set interface bond2 bond mlag id 2
cumulus@leaf02:~$ nv set interface bond3 bond mlag id 3
cumulus@leaf02:~$ nv set interface vlan10 ip address 10.1.10.3/24
cumulus@leaf02:~$ nv set interface vlan20 ip address 10.1.20.3/24
cumulus@leaf02:~$ nv set interface vlan30 ip address 10.1.30.3/24
cumulus@leaf02:~$ nv set bridge domain br_default vlan 10,20,30
cumulus@leaf02:~$ nv set interface bond1-3 bridge domain br_default
cumulus@leaf02:~$ nv set interface peerlink bond member swp49-50
cumulus@leaf02:~$ nv set system global anycast-mac 44:38:39:FF:00:AA
cumulus@leaf02:~$ nv set mlag backup 10.10.10.1
cumulus@leaf02:~$ nv set mlag peer-ip linklocal
cumulus@leaf02:~$ nv set mlag init-delay 100
cumulus@leaf02:~$ nv config apply
cumulus@spine01:~$ nv set interface lo ip address 10.10.10.101/32
cumulus@spine01:~$ nv set interface swp1-2
cumulus@spine01:~$ nv config apply
- set:
    bridge:
      domain:
        br_default:
          vlan:
            10,20,30: {}
    interface:
      bond1:
        bond:
          member:
            swp1: {}
          mlag:
            enable: on
            id: 1
        bridge:
          domain:
            br_default: {}
        type: bond
      bond2:
        bond:
          member:
            swp2: {}
          mlag:
            enable: on
            id: 2
        bridge:
          domain:
            br_default: {}
        type: bond
      bond3:
        bond:
          member:
            swp3: {}
          mlag:
            enable: on
            id: 3
        bridge:
          domain:
            br_default: {}
        type: bond
      eth0:
        ip:
          address:
            dhcp: {}
          vrf: mgmt
        type: eth
      lo:
        ip:
          address:
            10.10.10.1/32: {}
        type: loopback
      peerlink:
        bond:
          member:
            swp49: {}
            swp50: {}
        type: peerlink
      peerlink.4094:
        base-interface: peerlink
        type: sub
        vlan: 4094
      swp1:
        type: swp
      swp2:
        type: swp
      swp3:
        type: swp
      swp49:
        type: swp
      swp50:
        type: swp
      swp51:
        type: swp
      vlan10:
        ip:
          address:
            10.1.10.2/24: {}
        type: svi
        vlan: 10
      vlan20:
        ip:
          address:
            10.1.20.2/24: {}
        type: svi
        vlan: 20
      vlan30:
        ip:
          address:
            10.1.30.2/24: {}
        type: svi
        vlan: 30
    mlag:
      backup:
        10.10.10.2: {}
      enable: on
      init-delay: 100
      peer-ip: linklocal
    router:
      bgp:
        autonomous-system: 65101
        enable: on
        router-id: 10.10.10.1
    service:
      ntp:
        mgmt:
          server:
            0.cumulusnetworks.pool.ntp.org: {}
            1.cumulusnetworks.pool.ntp.org: {}
            2.cumulusnetworks.pool.ntp.org: {}
            3.cumulusnetworks.pool.ntp.org: {}
    system:
      aaa:
        class:
          nvapply:
            action: allow
            command-path:
              /:
                permission: all
          nvshow:
            action: allow
            command-path:
              /:
                permission: ro
          sudo:
            action: allow
            command-path:
              /:
                permission: all
        role:
          nvue-admin:
            class:
              nvapply: {}
          nvue-monitor:
            class:
              nvshow: {}
          system-admin:
            class:
              nvapply: {}
              sudo: {}
        user:
          cumulus:
            full-name: cumulus,,,
            hashed-password: $6$S2E6GFmpZnyoFDOp$bb7l0oMB4DfsWrTSxiWr4JmEnF/Qtt9bXO2MF.EPR3uN8u0W4yXZCVLf7d21vxswoEIe5nfKaWrp4oYsaqMlz1
            role: system-admin
      api:
        state: enabled
      config:
        auto-save:
          enable: on
      control-plane:
        acl:
          acl-default-dos:
            inbound: {}
          acl-default-whitelist:
            inbound: {}
      global:
        anycast-mac: 44:38:39:FF:00:AA
        fabric-mac: 00:00:5E:00:01:01
        system-mac: 44:38:39:22:01:7a
      hostname: leaf01
      reboot:
        mode: cold
      ssh-server:
        state: enabled
      wjh:
        channel:
          forwarding:
            trigger:
              l2: {}
              l3: {}
              tunnel: {}
        enable: on
    vrf:
      default:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
            enable: on
            neighbor:
              swp51:
                remote-as: external
                type: unnumbered
- set:
    bridge:
      domain:
        br_default:
          vlan:
            10,20,30: {}
    interface:
      bond1:
        bond:
          member:
            swp1: {}
          mlag:
            enable: on
            id: 1
        bridge:
          domain:
            br_default: {}
        type: bond
      bond2:
        bond:
          member:
            swp2: {}
          mlag:
            enable: on
            id: 2
        bridge:
          domain:
            br_default: {}
        type: bond
      bond3:
        bond:
          member:
            swp3: {}
          mlag:
            enable: on
            id: 3
        bridge:
          domain:
            br_default: {}
        type: bond
      eth0:
        ip:
          address:
            dhcp: {}
          vrf: mgmt
        type: eth
      lo:
        ip:
          address:
            10.10.10.2/32: {}
        type: loopback
      peerlink:
        bond:
          member:
            swp49: {}
            swp50: {}
        type: peerlink
      peerlink.4094:
        base-interface: peerlink
        type: sub
        vlan: 4094
      swp1:
        type: swp
      swp2:
        type: swp
      swp3:
        type: swp
      swp49:
        type: swp
      swp50:
        type: swp
      swp51:
        type: swp
      vlan10:
        ip:
          address:
            10.1.10.3/24: {}
        type: svi
        vlan: 10
      vlan20:
        ip:
          address:
            10.1.20.3/24: {}
        type: svi
        vlan: 20
      vlan30:
        ip:
          address:
            10.1.30.3/24: {}
        type: svi
        vlan: 30
    mlag:
      backup:
        10.10.10.1: {}
      enable: on
      init-delay: 100
      peer-ip: linklocal
    router:
      bgp:
        autonomous-system: 65102
        enable: on
        router-id: 10.10.10.2
    service:
      ntp:
        mgmt:
          server:
            0.cumulusnetworks.pool.ntp.org: {}
            1.cumulusnetworks.pool.ntp.org: {}
            2.cumulusnetworks.pool.ntp.org: {}
            3.cumulusnetworks.pool.ntp.org: {}
    system:
      aaa:
        class:
          nvapply:
            action: allow
            command-path:
              /:
                permission: all
          nvshow:
            action: allow
            command-path:
              /:
                permission: ro
          sudo:
            action: allow
            command-path:
              /:
                permission: all
        role:
          nvue-admin:
            class:
              nvapply: {}
          nvue-monitor:
            class:
              nvshow: {}
          system-admin:
            class:
              nvapply: {}
              sudo: {}
        user:
          cumulus:
            full-name: cumulus,,,
            hashed-password: $6$JW5a3iLCLTHo1x3N$q9EkD6TfEPFd9OyAFsFHi09eQljep/UF7YidEO1xMjIs0Tv7oAoIvdurs2i1xs44AGXTD2dIeOehiqyIBUOGG0
            role: system-admin
      api:
        state: enabled
      config:
        auto-save:
          enable: on
      control-plane:
        acl:
          acl-default-dos:
            inbound: {}
          acl-default-whitelist:
            inbound: {}
      global:
        anycast-mac: 44:38:39:FF:00:AA
        system-mac: 44:38:39:22:01:78
      hostname: leaf02
      reboot:
        mode: cold
      ssh-server:
        state: enabled
      wjh:
        channel:
          forwarding:
            trigger:
              l2: {}
              l3: {}
              tunnel: {}
        enable: on
    vrf:
      default:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
            enable: on
            neighbor:
              swp51:
                remote-as: external
                type: unnumbered
- set:
    interface:
      eth0:
        ip:
          address:
            dhcp: {}
          vrf: mgmt
        type: eth
      lo:
        ip:
          address:
            10.10.10.101/32: {}
        type: loopback
      swp1:
        type: swp
      swp2:
        type: swp
    router:
      bgp:
        autonomous-system: 65199
        enable: on
        router-id: 10.10.10.101
    service:
      ntp:
        mgmt:
          server:
            0.cumulusnetworks.pool.ntp.org: {}
            1.cumulusnetworks.pool.ntp.org: {}
            2.cumulusnetworks.pool.ntp.org: {}
            3.cumulusnetworks.pool.ntp.org: {}
    system:
      aaa:
        class:
          nvapply:
            action: allow
            command-path:
              /:
                permission: all
          nvshow:
            action: allow
            command-path:
              /:
                permission: ro
          sudo:
            action: allow
            command-path:
              /:
                permission: all
        role:
          nvue-admin:
            class:
              nvapply: {}
          nvue-monitor:
            class:
              nvshow: {}
          system-admin:
            class:
              nvapply: {}
              sudo: {}
        user:
          cumulus:
            full-name: cumulus,,,
            hashed-password: $6$hkck.ZuD4W5LusMJ$hVOsTgz/oyjK8axsEAExzZ2.hb3JDBR/tnsHjRpF5vrh2DgsWmSQshj7/Qg6oaaPl5BgSsJfe6bScC2yayvnT0
            role: system-admin
      api:
        state: enabled
      config:
        auto-save:
          enable: on
      control-plane:
        acl:
          acl-default-dos:
            inbound: {}
          acl-default-whitelist:
            inbound: {}
      global:
        system-mac: 44:38:39:22:01:82
      hostname: spine01
      reboot:
        mode: cold
      ssh-server:
        state: enabled
      wjh:
        channel:
          forwarding:
            trigger:
              l2: {}
              l3: {}
              tunnel: {}
        enable: on
    vrf:
      default:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
            enable: on
            neighbor:
              swp1:
                remote-as: external
                type: unnumbered
              swp2:
                remote-as: external
                type: unnumbered
auto lo
iface lo inet loopback
    address 10.10.10.1/32
auto mgmt
iface mgmt
    address 127.0.0.1/8
    address ::1/128
    vrf-table auto
auto eth0
iface eth0 inet dhcp
    ip-forward off
    ip6-forward off
    vrf mgmt
auto swp1
iface swp1
auto swp2
iface swp2
auto swp3
iface swp3
auto swp49
iface swp49
auto swp50
iface swp50
auto swp51
iface swp51
auto bond1
iface bond1
    bond-slaves swp1
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
    clag-id 1
auto bond2
iface bond2
    bond-slaves swp2
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
    clag-id 2
auto bond3
iface bond3
    bond-slaves swp3
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
    clag-id 3
auto vlan10
iface vlan10
    address 10.1.10.2/24
    hwaddress 44:38:39:22:01:b1
    vlan-raw-device br_default
    vlan-id 10
auto vlan20
iface vlan20
    address 10.1.20.2/24
    hwaddress 44:38:39:22:01:b1
    vlan-raw-device br_default
    vlan-id 20
auto vlan30
iface vlan30
    address 10.1.30.2/24
    hwaddress 44:38:39:22:01:b1
    vlan-raw-device br_default
    vlan-id 30
auto peerlink
iface peerlink
    bond-slaves swp49 swp50
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
auto peerlink.4094
iface peerlink.4094
    clagd-peer-ip linklocal
    clagd-backup-ip 10.10.10.2
    clagd-sys-mac 44:38:39:FF:00:AA
    clagd-args --initDelay 100
auto br_default
iface br_default
    bridge-ports bond1 bond2 bond3 peerlink
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20 30
    bridge-pvid 1
auto lo
iface lo inet loopback
    address 10.10.10.2/32
auto mgmt
iface mgmt
    address 127.0.0.1/8
    address ::1/128
    vrf-table auto
auto eth0
iface eth0 inet dhcp
    ip-forward off
    ip6-forward off
    vrf mgmt
auto swp1
iface swp1
auto swp2
iface swp2
auto swp3
iface swp3
auto swp49
iface swp49
auto swp50
iface swp50
auto swp51
iface swp51
auto bond1
iface bond1
    bond-slaves swp1
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
    clag-id 1
auto bond2
iface bond2
    bond-slaves swp2
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
    clag-id 2
auto bond3
iface bond3
    bond-slaves swp3
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
    clag-id 3
auto vlan10
iface vlan10
    address 10.1.10.3/24
    hwaddress 44:38:39:22:01:af
    vlan-raw-device br_default
    vlan-id 10
auto vlan20
iface vlan20
    address 10.1.20.3/24
    hwaddress 44:38:39:22:01:af
    vlan-raw-device br_default
    vlan-id 20
auto vlan30
iface vlan30
    address 10.1.30.3/24
    hwaddress 44:38:39:22:01:af
    vlan-raw-device br_default
    vlan-id 30
auto peerlink
iface peerlink
    bond-slaves swp49 swp50
    bond-mode 802.3ad
    bond-lacp-bypass-allow no
auto peerlink.4094
iface peerlink.4094
    clagd-peer-ip linklocal
    clagd-backup-ip 10.10.10.1
    clagd-sys-mac 44:38:39:FF:00:AA
    clagd-args --initDelay 100
auto br_default
iface br_default
    bridge-ports bond1 bond2 bond3 peerlink
    hwaddress 44:38:39:22:01:af
    bridge-vlan-aware yes
    bridge-vids 10 20 30
    bridge-pvid 1
auto lo
iface lo inet loopback
    address 10.10.10.101/32
auto mgmt
iface mgmt
    address 127.0.0.1/8
    address ::1/128
    vrf-table auto
auto eth0
iface eth0 inet dhcp
    ip-forward off
    ip6-forward off
    vrf mgmt
auto swp1
iface swp1

auto swp2 iface swp2

此模拟正在运行 Cumulus Linux 5.11。Cumulus Linux 5.12 模拟即将推出。

模拟以 MLAG 配置示例开始。该演示使用 NVUE 命令预先配置。

要验证配置,请运行上面故障排除部分中列出的命令。