Multi-chassis Link Aggregation Group
RouterOS 中的 MLAG 通过在两台设备上配置 LACP bond 来实现物理冗余,使客户端感知为单一连接,同时确保故障转移。它使用 ICCP 进行对端通信,支持 STP 协议,并且需要在专用端口上仔细配置 VLAN。对于大型网络,MLAG 是 CPU 密集型的,并且与 L3 卸载或 MVRP 的兼容性有限
多机箱链路聚合组
简介
RouterOS 中的 MLAG(多机箱链路聚合组)实现允许在两台独立设备上配置 LACP bond,而客户端设备会认为它连接到了同一台机器。这在交换机发生故障时提供物理冗余。
两个对端通过 ICCP(机箱间控制协议)经由 mlag-peer-port 建立 MLAG 接口并更新桥接主机表。RouterOS ICCP 不需要 IP 配置;它发送标记为 EtherType 0x88B5、目的 MAC 地址为 01:80:C2:00:00:0E 的未打标签二层数据包。ICCP 数据包是链路本地的,这意味着它们始终由 MLAG 设备自身接收和处理,绝不会被转发到网络的其他部分。每台 MLAG 设备上的 peer-port 必须彼此直接相连。还建议将对端端口使用的未打标签 VLAN 与网络其余部分隔离开,方法可以是分配一个专用的未打标签 VLAN(使用 pvid),或者将对端端口设置为只允许 VLAN 标签帧(使用 frame-types=admit-only-vlan-tagged)。对端端口可以配置为单个以太网接口或 bonding 接口。不过,建议使用 bonding 接口,因为这有助于防止单个接口故障影响连通性,尤其是在两个 MLAG 节点都仍在运行时。
当 mlag-peer-port 运行且 ICCP 建立后,会进行主设备选举并选择 system-id。优先级最低的对端将充当主设备。如果优先级相同,则桥接 MAC 地址最低的对端成为主设备。此 system-id 用于 STP BPDU 桥标识符和 LACP system ID。MLAG 支持 STP、RSTP 或 MSTP 协议。请在两个节点上双连接的桥接端口上使用相同的 STP 优先级和相同的 STP 配置。当 MLAG 桥被选举为 STP 根桥时,两台设备都将在 bridge monitor 中显示为根桥。
信息
MLAG 是按桥接接口配置的。任何 RouterOS 设备(包括虚拟 CHR 实例)都可以用作 MLAG 节点。
桥接硬件卸载 MLAG 仅在采用 Marvell Prestera 交换芯片的 MikroTik 设备上可用。所有其他设备仅支持软件方式实现的 MLAG。
信息
MLAG 与 L3 硬件卸载不兼容。使用 MLAG 时,必须禁用 L3 硬件卸载。
MLAG 与 多 VLAN 注册协议(MVRP)不兼容。双连接 bond 上已注册的 VLAN 不会同步到另一台 MLAG 节点。
危险
在拥有大量主机和 VLAN 的网络中,MLAG 主机同步可能会占用大量 CPU 和内存。对于采用单核 MIPSBE CPU 的交换机(例如 CRS326-24S+2Q+RM、CRS354-48P-4S+2Q+RM、CRS518-16XS-2XQ-RM),建议仅在主机数量不超过 1,000 的网络中使用 MLAG。
在主机数量更多的网络中,这些交换机上的 MLAG 可能导致意外行为。

数据包转发与负载均衡
BUM(广播、未知单播、组播)数据包转发分两个阶段进行。
阶段 1 - 本地转发
当节点收到 BUM 流量时,会像传统(非 MLAG)设置那样在本地将数据包泛洪到同一 VLAN 的所有成员端口。此外,它还会通过 peer-port 将流量转发到另一台 MLAG 节点。
信息
只有当 peer-port 也是该 VLAN 的成员时,才会通过 peer-port 进行转发。这就是文档强调应将 peer-port 纳入跨越两个 MLAG 节点的所有 VLAN 的原因。
阶段 2 - 由对端进行远端转发
当对端节点通过 peer-port 收到 BUM 流量时,它会将流量泛洪到同一 VLAN 的所有常规桥接端口。这些端口是未指定 mlag-id 的端口(即独立的以太网接口或 bond 接口)。对于 mlag-id bond 接口,对端节点会根据链路状态做出决定:
- 如果两条链路(本地和远端)都处于活动状态,它不会将流量泛洪到自己的 MLAG bond 端口 —— 这样可以避免发送重复数据包,因为第一个节点已经处理过了。
- 如果远端对端的链路处于非活动状态,而本地链路处于活动状态,则对端节点会将流量泛洪到 MLAG bond 以确保交付。
单播流量的行为类似,但在比较常规 LAG 与 MLAG 时有一个关键区别。在常规 LAG 设置中,出站数据包会根据发送哈希策略在所有活动链路上进行负载均衡。在两条链路都活动的 MLAG 设置中,流量不会在两台交换机之间通过 peer-port 进行负载均衡。相反,流量仅通过 MLAG 的本地成员链路转发 —— 它始终走最短路径。只有在本地 MLAG 链路发生故障时才会使用 peer-port。在这种情况下,流量会通过 peer-port 转发到另一节点以到达目的地。发生这种情况时,主机表还会更新在 MLAG bond 上学习到的 MAC 地址条目,以表明该目的地现在可以通过 peer-port 到达。在 MLAG bond 由 2+2 条活动链路组成(每个节点 2 条链路)的设置中,发送哈希仅在两条本地链路之间进行 —— 而不是在所有四条链路之间。当 MLAG 对用于多个双连接 bond,且入站流量已经分布到两个对时,可以实现负载均衡。
快速设置
在此示例中,使用 CRS317 和 CRS309 设备作为 MLAG 对端,任何具有两个 SFP+ 接口的设备都可以用作 LACP 客户端。两个对端节点上都使用 SFP+1 接口来创建 mlag-peer-port,并用于 ICCP,请参见下面的网络示意图。
在 Peer1 和 Peer2 设备上为 MLAG 配置 bonding 接口,在两台对端设备上使用匹配的 mlag-id 设置,并设置 1 秒的 LACPDU 发送速率:
# Peer1
/interface/bonding
add mlag-id=10 mode=802.3ad name=client-bond slaves=sfp-sfpplus2 lacp-rate=1sec
# Peer2
/interface/bonding
add mlag-id=10 mode=802.3ad name=client-bond slaves=sfp-sfpplus2 lacp-rate=1sec
设置启用了 vlan-filtering 的桥接接口。指定 mlag-peer-port 以启用 MLAG。要控制哪台设备成为主 MLAG 节点,请在首选设备上设置更低的 mlag-priority 值。在此示例中,我们希望 Peer1 成为主节点,因此将其设为 priority=50。Peer2 保留默认优先级 128,成为备用节点。
在此示例中,我们希望两个 MLAG 节点都充当根桥,因此使用 priority=0x1000 分配一个更优(更低)的桥优先级。请确保两个 MLAG 节点使用相同的优先级值。
可选地,你可以在桥接接口上设置 frame-types=admit-only-vlan-tagged 以禁用默认的未打标签 VLAN 1(pvid=1)。
# Peer1
/interface/bridge
add name=bridge1 vlan-filtering=yes mlag-peer-port=sfp-sfpplus1 mlag-priority=50 priority=0x1000 frame-types=admit-only-vlan-tagged
# Peer2
/interface/bridge
add name=bridge1 vlan-filtering=yes mlag-peer-port=sfp-sfpplus1 priority=0x1000 frame-types=admit-only-vlan-tagged
接下来,将必要的接口添加到桥接中。在此示例中,只需添加对端端口(sfp-sfpplus1)和 client-bond 接口。
对于对端端口,我们通过将其配置为只接受 VLAN 标签流量(frame-types=admit-only-vlan-tagged)来禁用默认的未打标签 VLAN 1(pvid=1)。
对于 client-bond 接口,我们希望未打标签流量属于 VLAN 10,因此在该接口上设置 pvid=10。
# Peer1
/interface/bridge/port
add bridge=bridge1 interface=sfp-sfpplus1 frame-types=admit-only-vlan-tagged
add bridge=bridge1 interface=client-bond pvid=10
# Peer2
/interface/bridge/port
add bridge=bridge1 interface=sfp-sfpplus1 frame-types=admit-only-vlan-tagged
add bridge=bridge1 interface=client-bond pvid=10
危险
MLAG 支持 STP、RSTP 或 MSTP 协议。请在两个节点上双连接的桥接端口上使用相同的 STP 优先级和相同的 STP 配置(例如 path-cost、priority、edge)。
信息
如果双连接的 bond 接口未连接到任何其他 RSTP/MSTP 桥或交换机,你可以在两个 MLAG 节点的该接口上设置
edge=yes。此设置允许 bond 端口快速进入转发状态,有助于在 MLAG 一侧再次可用时减少数据包丢失。
在此示例中,client-bond 接口使用 VLAN 10 处理未打标签流量(通过 pvid=10 设置),我们还希望允许打标签的 VLAN 20。为确保两个 VLAN 的流量都能在 MLAG 设备之间通过,我们需要在两个 MLAG 节点上将 peer 端口添加为 VLAN 10 和 20 的打标签成员。重要的是,要将 peer 端口纳入其他桥接端口上使用的所有 VLAN 中。这包括未打标签和打标签的 VLAN。以下是两台对端设备的配置命令:
# Peer1
/interface/bridge/vlan
add bridge=bridge1 tagged=sfp-sfpplus1 vlan-ids=10
add bridge=bridge1 tagged=sfp-sfpplus1,client-bond vlan-ids=20
# Peer2
/interface/bridge/vlan
add bridge=bridge1 tagged=sfp-sfpplus1 vlan-ids=10
add bridge=bridge1 tagged=sfp-sfpplus1,client-bond vlan-ids=20
危险
桥接从属端口使用的所有 VLAN 也必须为 peer-port 配置为打标签 VLAN,这样 peer-port 才是这些 VLAN 的成员并能够转发数据。
最后,检查对端设备上的 MLAG 状态,并确保 Client LACP 的两个接口都处于活动状态。
# Peer1
[admin@Peer1] > /interface/bridge/monitor [find name=bridge1]
state: enabled
current-mac-address: B8:69:F4:1B:B0:7C
bridge-id: 0x1000.B8:69:F4:1B:B0:7C
root-bridge: yes
root-bridge-id: 0x1000.B8:69:F4:1B:B0:7C
root-path-cost: 0
root-port: none
port-count: 2
designated-port-count: 2
fast-forward: no
mlag-state: connected
mlag-active-role: primary
# Peer2
[admin@Peer2] > /interface/bridge/monitor [find name=bridge1]
state: enabled
current-mac-address: B8:69:F4:1B:B0:7C
bridge-id: 0x1000.B8:69:F4:1B:B0:7C
root-bridge: yes
root-bridge-id: 0x1000.B8:69:F4:1B:B0:7C
root-path-cost: 0
root-port: none
port-count: 2
designated-port-count: 1
fast-forward: no
mlag-state: connected
mlag-active-role: secondary
# Client
[admin@Client] > /interface/bonding/monitor bond1
mode: 802.3ad
active-ports: sfp-sfpplus1,sfp-sfpplus2
inactive-ports:
lacp-system-id: 74:4D:28:7B:7F:96
lacp-system-priority: 65535
lacp-partner-system-id: B8:69:F4:1B:B0:7C
如果 Client 设备是 RouterOS,下面是创建常规 LACP bonding 的配置命令。为加快 LACP 链路建立,请使用 1 秒的 LACPDU 发送速率:
/interface/bonding
add mode=802.3ad name=bond1 slaves=sfp-sfpplus1,sfp-sfpplus2 lacp-rate=1sec
MLAG 设置与监控
有几个与 MLAG 相关的设置和监控选项:interface/bridge 菜单中的 mlag-heartbeat、mlag-peer-port、mlag-priority,以及 interface/bonding 菜单中的 mlag-id。
使用 /interface/bridge/monitor 命令查看当前的 MLAG 状态和活动角色。
[admin@Peer1] > /interface/bridge/monitor [find name=bridge1]
state: enabled
current-mac-address: B8:69:F4:1B:B0:7C
bridge-id: 0x1000.B8:69:F4:1B:B0:7C
root-bridge: yes
root-bridge-id: 0x1000.B8:69:F4:1B:B0:7C
root-path-cost: 0
root-port: none
port-count: 2
designated-port-count: 2
fast-forward: no
mlag-state: connected
mlag-active-role: primary
LACP bonding 接口和 bonding 从属端口可以使用 monitor 和 monitor-slaves 命令进行监控。更多细节请参见 Bonding 监控。