Show Table of Contents
4.5. 使用频道绑定
为增强性能,可调整可用模块选项确定最佳组合。特别要注意
miimon
或者 arp_interval
和 arp_ip_target
参数。有关可用选项列表及如何迅速决定要绑定的最佳接口详情,请查看 第 4.5.1 节 “Bonding 模块指令”。
4.5.1. Bonding 模块指令
最好是在将绑定接口添加到绑定接口配置文件(例如:
ifcfg-bond0
)的 BONDING_OPTS="bonding parameters"
指令前,测试最适合的频道 bonding 模块参数。修改 sysfs
文件系统中的文件即可在不载入(及重新载入)bonding 模块的情况下配置绑定接口参数。
sysfs
是一个虚拟文件系统,将内核对象视为目录、文件及符号链接。可使用 sysfs
查询内核对象信息,也可以通过使用常规文件系统命令处理那些对象。sysfs
虚拟文件系统是挂载到 /sys/
目录下。所有绑定接口都可以通过与 /sys/class/net/
目录的文件互动和操作动态进行配置。
为确定绑定接口的最佳参数,可创建一个绑定接口文件,比如
ifcfg-bond0
,方法如 第 4.4.2 节 “创建频道绑定接口” 所述。在每个绑定到 bond0
的接口的配置文件中插入 SLAVE=yes
和 MASTER=bond0
指令。完成后,即可测试这些参数。
首先,请作为
root
运行 ifup bondN
启动您创建的绑定:
~]# ifup bond0
如果已正确创建
ifcfg-bond0
绑定接口文件,则可以作为 root
运行 ip link show
命令,查看该命令输出结果中列出的 bond0
:
~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
link/ether 52:54:00:e9:ce:d2 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
link/ether 52:54:00:38:a6:4c brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
link/ether 52:54:00:38:a6:4c brd ff:ff:ff:ff:ff:ff
要查看所有现有绑定(包括未启动的绑定),请运行:
~]$ cat /sys/class/net/bonding_masters
bond0
可处理
/sys/class/net/bondN/bonding/
目录中的各个文件配置每个绑定。首先,您要配置的绑定必须处于 down 状态:
~]# ifdown bond0
例如:要以 1 秒为间隔启用 bond0 中的 MII 监控,请作为
root
运行:
~]# echo 1000 > /sys/class/net/bond0/bonding/miimon
要为
balance-alb
模式配置 bond0,请运行:
~]# echo 6 > /sys/class/net/bond0/bonding/mode
......或者使用该模式名称:
~]# echo balance-alb > /sys/class/net/bond0/bonding/mode
配置有问题绑定的选项后,可运行
ifup bondN
启动并测试该连接。如果决定要更改选项,则需要先断开该接口,使用 sysfs
修改参数,然后启动接口,并再次测试。
确定绑定连接的最佳参数后,为要配置的绑定接口在
/etc/sysconfig/network-scripts/ifcfg-bondN
文件的 BONDING_OPTS=
指令中以空格分开的方式添加那些参数。无论何时连接该接口时(例如:若设置 ONBOOT=yes
指令,则在系统引导序列中),BONDING_OPTS
中指定的绑定选项即可生效。
以下列表提供了很多常见的频道绑定参数名称及其功能说明。有关详情,请查看
modinfo bonding
输出中每个 parm
的概述,或查看 https://www.kernel.org/doc/Documentation/networking/bonding.txt 了解更详细的内容。
绑定接口参数
ad_select=value
- 指定要使用的 802.3ad 聚合选择逻辑,可能值为:
stable
或者0
— 默认设置。由最大聚合带宽选择的活动聚合器。只有全部从属聚合器失效,或活跃聚合器没有从属聚合器时,才会重新选择活动聚合器。bandwidth
或者1
— 活动聚合器由最大聚合带宽选择。出现在以下情况下会重新选择:- 在绑定中添加或删除从属;
- 任意从属链接发生变化;
- 任意与 802.3ad 有关的状态变化;
- 绑定的管理状态改为 up。
count
或者2
— 活动聚合器由号码最大从属连接选择。重新选择的条件与上述bandwidth
一致。
bandwidth
和count
选择策略允许活动聚合器部分失灵时进行 802.3ad 聚合故障转移。这样可保证聚合器高度可用,即 bandwidth 或从属连接数一直保持活动。 arp_interval=time_in_milliseconds
- 以毫秒为单位指定
ARP
监控的频繁度。重要
关键是要指定arp_interval
或arp_ip_target
参数,或者指定miimon
参数。否则会在链接失败时使网络性能降级。如果在mode=0
或者mode=2
(两种负载平衡模式)中使用这个设置,则必须配置网络交换机,以便使用网卡平均发送数据包。有关如何完成此操作的详情,请查看 https://www.kernel.org/doc/Documentation/networking/bonding.txt。默认将这个数值设定为0
,即禁用该功能。 arp_ip_target=ip_address[,ip_address_2,…ip_address_16]
- 启用
arp_interval
参数后,指定ARP
请求的目标IP
地址。在使用逗号分开的列表中最多可指定 16 个IP
地址。 arp_validate=value
- 验证
ARP
探测的源/分配,默认为none
。其他值为active
、backup
和all
。 downdelay=time_in_milliseconds
- 以毫秒为单位指定从链接失败到禁用该链接前要等待的时间。该值必须是
miimon
参数中的多个数值。默认将其设定为0
,即禁用该功能。 fail_over_mac=value
- 指定 active-backup 模式是否应该将所有从属连接设定为使用同一 MAC 地址作为 enslavement(传统行为),或在启用时根据所选策略执行绑定 MAC 地址的特殊处理。可能值为:
none
或0
-- 默认设置。这个设置禁用fail_over_mac
,并造成在 enslavement 时间内将所有 active-backup 绑定的从属连接绑定到同一 MAC 地址。active
或者1
— “active”fail_over_mac
策略表示绑定的 MAC 地址应永远是目前活动从属连接的 MAC 地址。从属连接的 MAC 地址不会更改,但在故障转移过程中会更改绑定的 MAC 地址。这个策略对永远无法更改其 MAC 地址的设备,或拒绝使用其自主源 MAC 地址传入多播的设备(影响 ARP 监控)很有帮助。这个策略的缺点是该网络中的每个设备必须通过免费 ARP 更新,这与切换 snoop 传入流量以便更新其 ARP 表的常规方法相反。如果免费 ARP 链接丢失,则可能破坏通讯。使用这个策略同时采用 MII 监控时,在可真正传输并接受数据前就声明链接处于 up 状态的设备很可能会丢失免费 ARP,并可能需要设置正确的呼叫建立延迟(updelay)。follow
或者2
— “follow”fail_over_mac
策略可保证正常选择绑定的 MAC 地址(通常是绑定的第一从属链接的 MAC 地址)。但第二从属连接及之后的从属连接不适用这个 MAC 地址,虽然他们是备份角色;故障转移时从属连接是使用绑定的 MAC 地址编程(之前活动的从属连接接收新激活的从属 MAC 地址)。这个策略对使用同一 MAC 地址编程时变得混乱或发生性能损失的多端口设备有帮助。
- lacp_rate=value
- 指定链接伙伴应使用 802.3ad 模式传输 LACPDU 的速率:
slow
或者0
— 默认设置。这是让链接伙伴每 30 秒传输一次 LACPDU。fast
或者0
— 默认设置。这是让链接伙伴每 1 秒传输一次 LACPDU。
miimon=time_in_milliseconds
- 以毫秒为单位指定 MII 链接监控的频率。这在需要高可用性时有用,因为 MII 是用来验证网卡是否激活。要验证某个支持 MII 工具的具体网卡的驱动程序,请作为 root 运行以下命令:
~]#
ethtool interface_name | grep "Link detected:"
在这个命令中使用设备接口(比如eth0
),而不是绑定接口替换 interface_name。如果支持 MII,则该命令会返回:Link detected: yes
如果为高可用性使用绑定的接口,则每个网卡的模块都必须支持 MII。将该值设定为0
(默认设置)即关闭此功能。配置这个设定时,最好从100
开始。重要
关键是要指定arp_interval
或arp_ip_target
参数,或者指定miimon
参数。否则会在链接失败时使网络性能降级。 mode=value
- 允许您指定绑定的策略。value 可为以下之一:
balance-rr
或者0
— 为容错及负载平衡设定轮询机制。从第一个可用的绑定从属接口开始按顺序接收和发送传输数据。active-backup
或者1
— 为容错设定 active-backup 策略。 通过第一个可用的绑定从属接口接收和发送传输文件。只有在活动的绑定从属接口失败时才使用其他绑定从属接口。balance-xor
或者2
— 只根据所选哈希策略传输数据。默认为使用源的 XOR 和目标 MAC 地址与从属接口数的余数相乘生成哈希。在这个模式中,指向具体对等接口的模式流量总是使用同一接口发送。因为目标是由 MAC 地址决定,因此这个方法最适合相同链接或本地网络的对等接口流量。如果流量必须通过单一路由器,那么这个流量平衡模式将是次选模式。broadcast
或者3
— 为容错设定广播策略。可在所有从属接口中传输所有数据。802.3ad
或者4
— 设定 IEEE 802.3ad 动态链接聚合策略。创建一个共享同一速度和双工设置的聚合组。在所有活跃聚合器中传输和接受数据。需要兼容 802.3ad 的交换机。balance-tlb
或者5
— 为容错及负载平衡设定传输负载平衡(TLB)策略。传出流量会根据每个从属接口的当前负载分布。传入流量由当前从属接口接收。如果接收数据从属接口失败,另一个从属接口会接管失败从属接口的 MAC 地址。这个模式只适用于内核绑定模式了解的本地地址,因此无法在桥接后的虚拟机中使用。balance-alb
或者6
— 为容错及负载平衡设定自适应负载平衡(ALB)策略,包括用于IPv4
流量的传输及接收负载平衡。使用ARP
协商获得接收负载平衡。这个模式只适用于内核 binding 模块了解的本地地址,因此无法在桥接后的虚拟机中使用。
primary=interface_name
- 指定主设备的接口名称,比如
eth0
。主
设备是要使用的第一个绑定接口,且在其失败前不会放弃。当绑定接口的一个网卡较快并可处理较大负载时,这个设置特别有帮助。只有在绑定接口处于active-backup
模式时这个设置才有用。详情请查看 https://www.kernel.org/doc/Documentation/networking/bonding.txt。 primary_reselect=value
- 为主从属接口指定重新选择策略。这会影响在活动从属接口失败或恢复主从属接口时,将主从属接口选为活动从属接口的方式。这个参数是用来防止主从属接口和其他从属接口之间的反转。可能值为:
always
或者0
(默认) — 无论何时有备份时,主从属接口成为活动从属接口。better
或者1
— 如果主从属接口的速度及双工由于当前活动从属接口的速度及双工,有备份时,主从属接口成为活动从属接口。failure
或者2
— 只有当前活动从属接口失败且主从属接口处于 up 状态时,主从属接口方成为活动从属接口。
在两种情况下会忽略primary_reselect
设置:- 如果没有从属接口处于活动状态,第一个要恢复的从属接口则成为活动从属接口。
- 成为从属接口后,主从属接口总是活动从属接口。
使用sysfs
更改primary_reselect
策略后,会立即根据新策略选择最佳活动从属接口。这可能或可能不会造成活动从属接口变化,要看具体情况。 resend_igmp=range
- 指定故障转移事件后要进行的 IGMP 成员报告数。故障转移后会立即提交一个报告,之后会每隔 200 毫秒发送数据包。有效值范围为
0
到255
,默认值为1
。数值0
可防止发出的 IGMP 成员报告响应故障转移事件。这个选项在绑定模式balance-rr
(mode 0)、active-backup
(mode 1)、balance-tlb
(mode 5) 和balance-alb
(mode 6) 中有帮助,这样可让故障转移将 IGMP 流量从一个从属接口转移到另一个从属接口。因此必须刷新 IGMP 报告以便让交换机将传入 IGMP 流量通过新选择的从属接口转发。 updelay=time_in_milliseconds
- 以毫秒为单位指定启用某个链接前要等待的时间。该数值必须是在
miimon
参数值指定值的倍数。默认设定为0
,即禁用该参数。 use_carrier=number
- 指定
miimon
是否应该使用 MII/ETHTOOL ioctls 或者netif_carrier_ok()
来决定该链接状态。netif_carrier_ok()
功能以来设备驱动程序维持其netif_carrier_on/off
状态,大多数设备驱动程序支持此功能。MII/ETHTOOL ioctls 工具利用内核中的弃用调用序列。但这还是可以配置的,以防您的设备驱动程序不支持netif_carrier_on/off
。有效数值是:1
— 默认设置。启用netif_carrier_ok()
功能。0
— 启用 MII/ETHTOOL ioctls 功能。
注意
如果绑定接口坚持链接应处于 up 状态(即使它不应处于该状态),原因可能是因为您的网络设备驱动程序不支持netif_carrier_on/off
。 xmit_hash_policy=value
- 选择
balance-xor
和802.3ad
模式中用来选择从属接口的传输哈希策略。可能值为:0
或者layer2
— 默认设置。这个参数使用硬件 MAC 地址的 XOR 生成哈希。使用的公式为:(source_MAC_address XOR destination_MAC) MODULO slave_count
这个算法会将所有流量放到同一从属接口的特定对等网络中,且该网络兼容 802.3ad。1
或者layer3+4
— 使用上层协议信息(可用时)生成该哈希。这样可让流量进入特定对等网络并跨多个从属接口,虽然单一连接无法跨多个从属接口。未碎片化 TCP 及 UDP 数据包使用的公式为:((source_port XOR dest_port) XOR ((source_IP XOR dest_IP) AND
0xffff
) MODULO slave_count在碎片化 TCP 或 UDP 以及所有其他IP
协议流量中会省略源及目标端口信息。非IP
流量的公式与layer2
传输哈希策略相同。这个策略旨在模拟某些交换机的行为,特别是附带 PFC2 以及一些 Foundry 和 IBM 产品的 Cisco 交换机。这个策略使用的算法不兼容 802.3ad。2
或者layer2+3
— 联合使用 layer2 和 layer3 协议信息生成该哈希。使用硬件 MAC 地址及IP
地址生成该哈希。这个公式为:(((source_IP XOR dest_IP) AND
0xffff
) XOR ( source_MAC XOR destination_MAC )) MODULO slave_count这个算法将所有流量放到同一从属接口的特定对等网络中。非IP
流量的公式与 layer2 传输哈希策略相同。这个策略旨在提供比单独使用 layer2 更平衡的流量分配,特别是在需要 layer3 网关设备的环境,以便连接到大多数目标。这个算法兼容 802.3ad。