7.7. 使用频道绑定
要提高性能,请调整可用的模块选项以确定哪个组合最适合。请特别注意 miimon 或 arp_interval 和 arp_ip_target 参数。有关可用选项列表以及如何快速确定绑定接口的最佳选项,请参阅 第 7.7.1 节 “绑定模块指令”。
7.7.1. 绑定模块指令
在将绑定模块参数添加到
BONDING_OPTS=" 绑定参数" 指令(例如ifcfg-bond0)之前,最好测试哪个通道绑定模块参数
最适合您的绑定接口参数
。通过处理 sysfs
文件系统中的文件,可以在不卸载(和重新加载)绑定模块的情况下配置绑定接口的参数。
sysfs
是将内核对象表示为目录、文件和符号链接的虚拟文件系统。sysfs
可用于查询有关内核对象的信息,也可通过使用普通文件系统命令来操控这些对象。sysfs
虚拟文件系统挂载到 /sys/
目录下。通过与 /sys/class/net/
目录交互和管理文件,可以动态配置所有绑定接口。
要确定绑定接口的最佳参数,请按照 第 7.4.2 节 “创建频道绑定接口” 中的说明创建通道绑定接口文件,如
ifcfg-bond0。
在绑定到 bond 0 的每个接口的配置文件中插入 SLAVE=yes
和 MASTER=bond
0
指令。完成此操作后,您可以继续测试参数。
首先,以
root
用户身份运行 ifup bondN
来打开您创建的绑定:
~]# ifup bond0
如果您正确创建了
ifcfg-bond0
bonding 接口文件,您可以看到运行 ip 链接的输出中列出的 bond0
以 root
用户身份显示 :
~]# 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: enp1s0: <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: enp2s0: <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/
目录中的文件来单独配置每个绑定。首先,您要配置的绑定必须关闭:
~]# ifdown bond0
例如,要在 bond0 上以 1 秒间隔启用 MII 监控,以
root
用户身份运行:
~]# echo 1000 > /sys/class/net/bond0/bonding/miimon
要为
balance-alb
模式配置 bond0,请运行:
~]# echo 6 > /sys/class/net/bond0/bonding/mode
...or,使用模式名称:
~]# 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 绑定 输出中每个
parm
的简短描述,或者参阅 https://www.kernel.org/doc/Documentation/networking/bonding.txt。
绑定接口参数
-
ad_select=value
- 指定要使用的 802.3ad 聚合选择逻辑。可能的值有:
stable
或者0
- 默认设置。活动聚合器由最大的聚合带宽来选择。只有在活跃聚合器的所有端口都停机或活跃聚合器没有端口时,才会重新选择活跃的聚合器。bandwidth
或者1
- 活跃的聚合器由最大聚合带宽选择。在以下情况下进行重新选择:- 在绑定中添加或删除了端口 ;
- 任何端口的链接状态更改;
- 任何端口的 802.3ad 关联状态更改;
- 绑定的管理状态变为 up。
count
或者2
- 活跃的聚合器由最大端口数量选择。重新选择按照上述带宽设置所述进行
。
当活跃聚合器发生部分故障时,带宽和
802.3ad 聚合。这会使聚合器具有最高的可用性,可以是带宽或端口数量,随时激活。计数选择策略允许故障转移
-
arp_interval=time_in_milliseconds
- 以毫秒为单位指定
ARP 监控的频率
。重要务必要同时指定arp_interval
和arp_ip_target
参数,或者指定miimon
参数。否则可能会导致链接失败时的网络性能下降。如果在 mode=0 或 mode
=2(
两种负载平衡模式)中使用这个设置,网络交换机必须配置为在 NIC 间平均分发数据包。有关如何完成此操作的详情请参考 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 地址(启用时),或者根据所选策略执行绑定 MAC 地址的特殊处理。可能的值有:
none
或者0
- 默认设置。此设置禁用fail_over_mac
,并使绑定在分配时将 active-backup 绑定的所有端口设置为同一 MAC 地址。active
或者1
- “活跃的”fail_over_mac
策略表示绑定的 MAC 地址应该始终是当前活跃端口的 MAC 地址。端口的 MAC 地址没有改变,而是在故障切换过程中更改绑定的 MAC 地址。此策略对无法更改 MAC 地址的设备或拒绝传入广播的设备和自己的源 MAC(会干扰 ARP 监控器)的设备很有用。此策略的缺点在于,网络中的每个设备都必须通过粒度 ARP 更新,而非检测传入流量以更新其 ARP 表的正常交换机方法。如果发行版 ARP 丢失,通信可能会中断。当此策略与 MII 监控器结合使用时,在实际传输和接收之前确认链接的设备特别容易遭受无饱和性 ARP 的损失,并且可能需要适当的延迟设置。follow
或者2
- 以下fail_over_mac
策略会导致正常选择绑定的 MAC 地址(通常是添加到绑定的第一个端口的 MAC 地址)。“”但是,第二个和后续端口没有在备份角色中被设置为这个 MAC 地址;一个端口在故障转移时被编程为带有绑定的 MAC 地址(而前者活跃端口接收新活跃端口的 MAC 地址)。此策略对多端口设备很有用,当多个端口被编程为相同的 MAC 地址时,这些设备会变得混乱或造成性能损失。
- lacp_rate=value
- 指定链接合作伙伴应在 802.3ad 模式下传输 LACPDU 数据包的速率。可能的值有:
slow
或者0
- 默认设置。这规定合作伙伴应每 30 秒传输一次 LACPDU。fast
或1
- 指定合作伙伴应每 1 秒传输一次 LACPDU。
-
miimon=time_in_milliseconds
- 指定 MII 链接监控的频率(以毫秒为单位)。如果需要高可用性,这很有用,因为 MII 用于验证 NIC 是否活跃。要验证特定 NIC 的驱动程序是否支持 MII 工具,以 root 用户身份输入以下命令:
~]# ethtool interface_name | grep "Link detected:"
在这个命令中,将 interface_name 替换为设备接口的名称,如enp1s0
,而不是绑定接口。如果支持 MII,命令会返回:Link detected: yes
如果使用绑定接口来实现高可用性,则每个 NIC 的模块必须支持 MII。将值设置为0
(默认值),关闭此功能。在配置此设置时,此参数的良好起点是100
。重要务必要同时指定arp_interval
和arp_ip_target
参数,或者指定miimon
参数。否则可能会导致链接失败时的网络性能下降。 -
mode=值
- 允许您指定绑定策略。该值可以是 :
balance-rr
或0
- 为容错和负载均衡设置循环策略。每个绑定接口中按顺序接收和发送传输时,从第一个可用端口接口开始。active-backup
或1
- 为容错设置主动备份策略。通过第一个可用的绑定接口接收和发送传输。只有在活跃的绑定端口接口失败时,才会使用另一个绑定的端口接口。balance-xor
或者2
- 传输基于所选的 hash 策略。默认值为根据源的 XOR 和目的地 MAC 地址生成哈希值,以端口接口的模数乘以模数。在此模式中,目标为特定同级的通信始终将通过同一个接口发送。由于目的地由 MAC 地址决定,此方法最适合发送到同一链路或本地网络上同级设备的通信。如果流量必须穿过单个路由器,这种流量均衡模式将不理想。broadcast
或3
- 为容错设置广播策略。所有传输都将在所有端口接口上发送。802.3ad
或4
- 设置 IEEE 802.3ad 动态链路聚合策略。创建共享相同速度和双工设置的聚合组。在活跃的聚合器中的所有端口上传输并接收接收。需要兼容 802.3ad 的交换机。balance-tlb
或5
- 为容错和负载均衡设置传输负载平衡(TLB)策略。传出流量会根据每个端口接口的当前负载进行分发。传入流量由当前端口接收。如果接收端口失败,则另一个端口通过失败的端口的 MAC 地址。此模式仅适用于内核绑定模块已知的本地地址,因此无法与虚拟机在桥接后面使用。balance-alb
或者6
- 为容错和负载均衡设置自适应负载均衡(ALB)策略。包括IPv4
流量的传输和接收负载平衡。通过ARP
协商实现负载平衡。此模式仅适用于内核绑定模块已知的本地地址,因此无法与虚拟机在桥接后面使用。
有关上游交换机上所需设置的详情,请参考 第 7.6 节 “切换中绑定模式和所需设置概述”。 -
primary=interface_name
- 指定主设备的接口名称,如
enp1s0
。主
设备是要使用的绑定接口中的第一个,除非失败,否则不会被恢复。当绑定接口中的一个 NIC 速度更快,因此能够处理更大的负载时,此设置特别有用。这个设置只有在绑定接口处于active-backup
模式时才有效。如需更多信息,请参阅 https://www.kernel.org/doc/Documentation/networking/bonding.txthttps://www.kernel.org/doc/Documentation/networking/bonding.txt。 -
primary_reselect=value
- 指定主端口的 reselection 策略。这会影响选择在主端口故障或恢复主端口时如何成为活动端口的激活端口。这个参数用于防止在主端口和其他端口之间进行软盘。可能的值有:
always
或者0
(默认)- 主端口在备份时都会变为活跃端口。better
或者1
- 当主端口恢复时,主端口成为活跃端口,如果主端口的速度和双工比当前活跃端口的速度和 duplex 更好。failure
或者2
- 只有当前活跃端口失败且主端口启动时才会激活端口。
在两种情况下,primary_reselect
设置会被忽略:- 如果没有激活端口,则要恢复的第一个端口就会变为活动端口。
- 最初分配给绑定时,主端口始终由活动端口组成。
通过sysfs
更改 main_reselect
策略将导致根据新策略立即选择最佳活跃端口。根据具体情况,这可能会造成活动端口的更改 -
resend_igmp=range
- 指定要在故障转移事件后发布的 IGMP 成员资格报告的数量。故障转移后会立即发布一份成员报告,后续数据包每 200ms 间隔发送一次。有效范围为
0
到255
;默认值为1
。值为0
可防止为响应故障转移事件发布 IGMP 成员资格报告。这个选项对于绑定模式 balance-rr (模式 0)、active-backup (模式 1)、balance-tlb (模式 5)和 balance-alb (模式 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。
注意如果绑定接口坚持链接不应启动,则您的网络设备驱动程序可能不支持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
流量,公式与 L2 传输哈希策略相同。该政策旨在模拟某些交换机的行为;特别是,Cisco 使用 PFC2 以及一些 Foundry 和 IBM 产品进行切换。此策略使用的算法不兼容 802.3ad。2
或layer2+3
- 使用 layer2 和 layer3 协议信息的组合来生成哈希。使用硬件 MAC 地址和IP 地址
XOR 生成哈希。公式是:(((source_IP XOR dest_IP) AND
0xffff
) XOR ( source_MAC XOR destination_MAC )) MODULO slave_count此算法会将所有流量都放在同一端口上的特定网络对等点。对于非IP
流量,公式与 L2 传输哈希策略相同。此策略旨在提供比 L2 更均衡的流量分布,特别是在需要 L3 网关设备到达大多数目的地的环境中。这个算法符合 802.3ad。