3.2.4 802.1AX:链路聚合 (以前的 802.3ad)
一些具有多个网络接口的系统拥有捆绑(bonding)(或称为链路聚合(link aggregation))功能
链路聚合(link aggregation)让两个或多个接口被视为一个接口
以便通过冗余实现更高的可靠性(主备),或通过在多个接口之间拆分(条带化(striping))数据来实现更高的性能
IEEE 修订 802.1AX [802.1AX-2008] 定义了执行链路聚合的最常用方法和管理此类链路的链路聚合控制协议(Link Aggregation Control Protocol (LACP))
LACP 使用特定格式(称为 LACPDU)的 IEEE 802 帧
用支持链路聚合的以太网交换机代替拥有高速网络端口的交换机更经济划算
如果可以聚合一个以上的端口来提供足够的带宽就不需要更高速度的端口了
链路聚合不仅可以在网络交换机上使用,还可以用在主机上的多个网络接口卡(network interface cards (NICs))上
通常,被聚合的端口必须属于同一种类型,并且以相同的模式(即:半双工或全双工)运行
Linux 能够使用以下命令在不同类型的设备上实现链路聚合(捆绑(bonding)):
Linux# modprobe bonding
Linux# ifconfig bond0 10.0.0.111 netmask 255.255.255.128
Linux# ifenslave bond0 eth0 wlan0
这组命令首先加载 bonding 驱动程序,它是一种特殊类型的支持链路聚合的设备驱动程序
第二条命令用提供的 IPv4 地址信息创建了 bond0
接口
尽管提供与 IP 相关的信息对于创建聚合接口来说并不是必要的,但一般都会这么做
一旦 ifenslave
命令执行,bonding 设备 bond0
将被标记为 MASTER
,eth0
和 wlan0
设备则被标记为 SLAVE
:
bond0 Link encap:Ethernet HWaddr 00:11:A3:00:2C:2A
inet addr:10.0.0.111 Bcast:10.0.0.127 Mask:255.255.255.128
inet6 addr: fe80::211:a3ff:fe00:2c2a/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:2146 errors:0 dropped:0 overruns:0 frame:0
TX packets:985 errors:0 dropped:0 overruns:0 carrier:0
collisions:18 txqueuelen:0
RX bytes:281939 (275.3 KiB) TX bytes:141391 (138.0 KiB)
eth0 Link encap:Ethernet HWaddr 00:11:A3:00:2C:2A
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1882 errors:0 dropped:0 overruns:0 frame:0
TX packets:961 errors:0 dropped:0 overruns:0 carrier:0
collisions:18 txqueuelen:1000
RX bytes:244231 (238.5 KiB) TX bytes:136561 (133.3 KiB)
Interrupt:20 Base address:0x6c00
wlan0 Link encap:Ethernet HWaddr 00:11:A3:00:2C:2A
UP BROADCAST SLAVE MULTICAST MTU:1500 Metric:1
RX packets:269 errors:0 dropped:0 overruns:0 frame:0
TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:38579 (37.6 KiB) TX bytes:4830 (4.7 KiB)
在本例中,我们将有线以太网接口与 Wi-Fi 接口捆绑到一起
主(master)设备 bond0
被分配了 IPv4 地址信息(和平时分配给任何一个单独接口的地址信息一样),默认情况下,它接收第一个从(slave)设备的 MAC 地址
当 IPv4 流量从 bond0
虚拟接口发送出去时,围绕哪个从(slave)接口携带这些流量的问题,存在多种可能的选择
在 Linux 中,可以通过加载 bonding 驱动程序时提供的参数来确定
可以通过 mode 选项决定:
- 在接口之间轮训
- 一个接口作为另一个接口的备份
- 基于执行 MAC 源地址和目的地址的 XOR 来选择接口
- 复制帧到所有的接口
- 使用 802.3ad 标准链路聚合
- 或使用更多高级负载平衡选项
第二种模式用于高可用系统,如果一个链路停止运行(可通过 MII 监控检测到,详细信息见 [BOND]),该系统可以故障转移到一个冗余的网络基础设施上
第三种模式旨在根据流量选择从(slave)接口
只要有足够多的目的地,两站点之间的流量就会固定在一个接口上
这在需要在多个接口之间负载均衡,同时又想最小化重排序时非常有用
第四种模式是为了容错
第五种模式与支持 802.3ad 的交换机一起使用,以便在同类链路上启用动态聚合
设计 LACP 协议的目的是为了通过避免手动配置来使设置链路聚合变得更简单
通常,一旦启用,LACP “ 参与者(actor)”(客户端)与 “ 合作伙伴(partner)”(服务器)就会每秒发送一次 LACPDU
LACP 会自动确定哪些成员链路可以聚合到链路聚合组(link aggregation group (LAG))中,并将它们聚合起来
这是通过在链路上发送一组信息(MAC 地址、端口优先级、端口号和密钥)来实现的
一个接收站点可以比较它从其他端口看到的值,并在它们匹配时进行聚合
[802.1AX-2008] 中介绍了 LACP 的详细信息