Bonding
Bonding 允许将多个以太网接口组合成一条虚拟链路,以获得更高带宽和故障转移能力;MikroTik RouterOS 支持多种模式,包括 LACP 以及特定芯片的硬件卸载。
Bonding
概述
Bonding 是一种将多个类似以太网的接口聚合为单条虚拟链路的技术,从而获得更高的数据速率并提供故障转移。
警告
接口 bonding 并不会创建一条具有更高链路速率的接口。接口 bonding 创建的是一条可以对多条接口进行流量负载均衡的虚拟接口。更多细节请参见 LAG 接口与负载均衡 页面。
信息
采用 Marvell Prestera 交换芯片以及 88E6393X、88E6191X、88E6190 交换芯片的 MikroTik 设备支持 bonding 接口的桥接硬件卸载。
只有
802.3ad(LACP)、balance-xor(静态 LAG)和active-backup这几种 bonding 模式支持硬件卸载;其他 bonding 模式将使用 CPU 资源。采用 Marvell Prestera 交换芯片的 MikroTik 设备始终使用 Layer2+Layer3+Layer4 作为发送哈希策略,而 88E6393X、88E6191X、88E6190 交换芯片仅限使用 Layer2 发送哈希。在使用硬件卸载时手动更改发送哈希策略不会产生任何效果。
更多细节请参见 Marvell Prestera 交换芯片特性。
快速设置指南
假设每台路由器(Router1 和 Router2)上都有两个以太网接口,并且希望在这两台路由器之间获得最大数据速率。要实现这一点,请按照以下步骤操作:
-
确保在将被用作 bonding 接口从属接口的接口上没有配置 IP 地址。
-
在 Router1 上添加一个 bonding 接口和一个 IP 地址:
/interface/bonding/add slaves=ether1,ether2 name=bond1 /ip/address/add address=172.16.0.1/24 interface=bond1 -
在 Router2 上执行相同操作:
/interface/bonding/add slaves=ether1,ether2 name=bond1 /ip/address/add address=172.16.0.2/24 interface=bond1 -
从 Router1 测试链路:
[admin@Router1] > ping 172.16.0.2 SEQ HOST SIZE TTL TIME STATUS 0 172.16.0.2 56 64 0ms 1 172.16.0.2 56 64 0ms 2 172.16.0.2 56 64 0ms sent=3 received=3 packet-loss=0% min-rtt=0ms avg-rtt=0ms max-rtt=0ms
警告
bonding 接口需要几秒钟才能与其对端建立连接。
链路监控
启用一种可用的链路监控选项至关重要。在上面的示例中,如果其中一条已绑定的链路发生故障,bonding 驱动程序会继续通过故障链路发送数据包,从而导致网络性能下降。RouterOS bonding 目前支持两种监控从属设备链路状态的方法:MII 和 ARP 监控。由于 bonding 驱动程序本身的限制,无法同时使用这两种方法。
ARP 监控
ARP 监控通过发送 ARP 查询,并将应答作为链路正常运行的依据,以此确定链路状态。ARP 应答不会被校验 —— 只要从属接口收到任何数据包,就会将该接口标记为活动状态。这种方法可以确保流量确实在链路上传输。
在使用 balance-rr 或 balance-xor 模式时,所连接的交换机必须配置为在所有链路路径上均匀分发数据包。否则,来自目标的所有 ARP 应答都会在同一个从属接口上收到,这可能导致其他已绑定的链路显示为故障。
ARP 监控通过配置三个属性来启用:link-monitoring、arp-ip-targets 和 arp-interval。可以指定多个 ARP 目标地址,这在高可用设置中特别有用。依赖单个目标会形成潜在的单点故障 —— 配置更多目标可提升 ARP 监控机制的可靠性。
要在 Router1 上启用 ARP 监控:
/interface/bonding/set [find name=bond1] link-monitoring=arp arp-ip-targets=172.16.0.2
在 Router2 上:
/interface/bonding/set [find name=bond1] link-monitoring=arp arp-ip-targets=172.16.0.1
在 RouterOS 中 arp-interval 值默认为 100ms,在此示例中无需修改。要验证链路监控是否正常工作,请断开其中一条线缆。在 ARP 监控检测到链路故障之前,你可能会观察到一些 ping 超时。
[admin@MikroTik] > /ping 172.16.0.2
SEQ HOST SIZE TTL TIME STATUS
0 172.16.0.2 56 64 0ms
1 172.16.0.2 56 64 0ms
2 172.16.0.2 56 64 0ms
3 172.16.0.2 56 64 0ms
4 172.16.0.2 timeout
5 172.16.0.2 56 64 0ms
6 172.16.0.2 56 64 0ms
sent=7 received=6 packet-loss=14% min-rtt=0ms avg-rtt=0ms max-rtt=0ms
说明
ARP 监控不需要在设备上配置 IP 地址 —— 无论任何接口上是否设置了 IP 地址,它都能正常工作。
危险
当 ARP 监控处于活动状态时,即使在与 arp-ip-targets 地址处于同一子网的 VLAN 接口上配置了 IP 地址,bonding 从属接口也会发送不带 VLAN 标签的 ARP 请求。
MII 监控
MII 监控仅监控本地接口的状态。MII Type 1 是一种由设备驱动程序判断链路是 up 还是 down 的方法。如果设备驱动程序不支持此选项,链路将始终显示为 up。MII 监控的主要缺点是,即使链路被检测为 up,它也无法判断该链路是否真的能够传输数据包流量。MII 监控通过设置 link-monitoring 和 mii-interval 参数来配置。
要在 Router1 和 Router2 上启用 MII Type1 监控:
/interface/bonding/set [find name=bond1] link-monitoring=mii
我们将 mii-interval 保留为默认值(100ms)。拔掉其中一根线缆时,与 ARP 链路监控相比,故障几乎会立即被检测到。
Bonding 模式
802.3ad
802.3ad 模式是一项 IEEE 标准,也称为 LACP(链路聚合控制协议)。它提供聚合的自动配置,所需的交换机配置极少。该标准还要求帧按顺序交付,因此连接不应出现数据包乱序。此外,聚合中的所有设备必须以相同的速度和双工模式运行。
LACP 基于哈希后的协议头部信息在活动端口之间均衡出站流量,并接受来自任意活动端口的入站流量。哈希包括以太网源地址和目的地址、VLAN 标签(如果有)以及 IPv4/IPv6 源地址和目的地址。计算方法取决于 transmit-hash-policy 参数。不建议使用 ARP 链路监控,因为由于 LACP 对端设备上的发送哈希策略,ARP 应答数据包可能只到达一个从属端口。这会导致发送流量不均衡,因此推荐使用 MII 链路监控。
警告
第 3 层和第 4 层发送哈希模式与 LACP 并不完全兼容。更多细节请参见 https://www.kernel.org/doc/Documentation/networking/bonding.txt
balance-xor
此模式使用哈希后的协议头部在活动端口之间均衡出站流量,并接受来自任意活动端口的入站流量。该模式与 LACP 非常相似,区别在于它并未标准化。此模式可以与所连接交换机上的静态链路聚合组(LAG)接口配置一起使用。
balance-rr
设置此模式后,数据包会从第一个可用从属接口到最后一个从属接口按顺序依次发送。balance-rr 模式是唯一能够跨属于同一 TCP/IP 连接的多条接口发送数据包的 bonding 模式。当使用多条发送链路和多条接收链路时,数据包经常会乱序到达,从而导致分段重传。对于 UDP 等其他协议,如果客户端软件能够容忍乱序数据包,则这不是问题。如果使用交换机将多条链路聚合在一起,则需要适当的交换机端口配置;然而,许多交换机不支持 balance-rr。快速设置指南 演示了 balance-rr bonding 模式的用法。如你所见,它的设置相当简单。balance-rr 还可用于绑定多条无线链路;但它要求所有已绑定链路具有相等的带宽。如果其中一条已绑定链路的带宽下降,则整个 bond 的总带宽将等于最慢的那条已绑定链路的带宽。
active-backup
此模式仅使用一个活动从属接口来发送数据包。只有当主从属接口发生故障时,备用从属接口才会变为活动状态。bonding 接口的 MAC 地址会呈现在活动端口上,以防止交换机产生混淆。active-backup 是采用多台互连交换机的高可用设置的最佳选择。
警告
当两台路由器设备直接相连时,ARP 监控无法正常工作。在此类设置中,必须使用 MII 监控,或者在两台路由器设备及其对端之间放置一台交换机。
broadcast
当端口配置为 broadcast 模式时,所有从属端口都会将相同的数据发送到目的地。此模式提供容错能力,但不提供负载均衡。
balance-tlb
此模式按对端均衡出站流量。每条已绑定链路可以以不同的速度和双工设置运行,并且与其他 bonding 模式不同,它不需要特定的交换机配置。此模式的局限性在于它仅支持 MII 链路监控 —— 配置了 ARP 监控也会被忽略 —— 并且入站流量不会被均衡。入站流量将使用被指定为 "primary" 的接口所在链路。
配置示例
假设路由器有两条链路 —— ether1 最大带宽为 10Mbps,ether2 最大带宽为 5Mbps。第一条链路带宽更大,因此我们将其设置为 primary 链路:
/interface/bonding/add mode=balance-tlb slaves=ether1,ether2 primary=ether1

交换机不需要额外配置。上图说明了 balance-tlb 模式的工作原理。如你所见,路由器可以以两条链路的合计带宽(15Mbps)与连接到交换机的所有客户端通信。但正如你所知,balance-tlb 不会均衡入站流量。在我们的示例中,客户端可以以 primary 链路的带宽与路由器通信,在我们的配置中该带宽为 10Mbps。
balance-alb
此模式与 balance-tlb 基本相同,但入站 IPv4 流量也会被均衡。接收负载均衡通过 ARP 协商实现。bonding 驱动程序会拦截本地生成的 ARP 消息,在其发出时用 bond 中某个从属接口的唯一地址覆盖源硬件地址,从而使不同的对端使用不同的硬件地址。仅支持 MII 链路监控(配置了 ARP 链路监控也会被忽略)。此模式的另一个缺点是它需要设备驱动程序具备更改 MAC 地址的能力。该模式与 local-proxy-arp 设置不兼容。

上图说明了 balance-alb 模式的工作原理。与 balance-tlb 模式相比,来自客户端的流量也可以使用备用链路与路由器通信。
Bonding 监控
对于 802.3ad bonding 模式,可以使用更详细的监控选项。
/interface/bonding/monitor [find]
mode: 802.3ad active-backup
active-ports: ether4 ether6
ether5
inactive-ports: ether7
lacp-system-id: CC:2D:E0:11:22:33
lacp-system-priority: 65535
lacp-partner-system-id: B8:69:F4:44:55:66
要监控各个 bonding 端口,请使用 monitor-slaves 命令。
/interface/bonding/monitor-slaves bond1
Flags: A - active, P - partner
AP port=ether4 key=17 flags="A-GSCD--" partner-sys-id=D4:CA:6D:12:06:65 partner-sys-priority=65535 partner-key=9 partner-flags="A-GSCD--"
AP port=ether5 key=17 flags="A-GSCD--" partner-sys-id=D4:CA:6D:12:06:65 partner-sys-priority=65535 partner-key=9 partner-flags="A-GSCD--"