4.5. 使用频道绑定

为增强性能,可调整可用模块选项确定最佳组合。特别要注意 miimon 或者 arp_intervalarp_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=yesMASTER=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 一致。
bandwidthcount 选择策略允许活动聚合器部分失灵时进行 802.3ad 聚合故障转移。这样可保证聚合器高度可用,即 bandwidth 或从属连接数一直保持活动。
arp_interval=time_in_milliseconds
以毫秒为单位指定 ARP 监控的频繁度。

重要

关键是要指定 arp_intervalarp_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。其他值为 activebackupall
downdelay=time_in_milliseconds
以毫秒为单位指定从链接失败到禁用该链接前要等待的时间。该值必须是 miimon 参数中的多个数值。默认将其设定为 0,即禁用该功能。
fail_over_mac=value
指定 active-backup 模式是否应该将所有从属连接设定为使用同一 MAC 地址作为 enslavement(传统行为),或在启用时根据所选策略执行绑定 MAC 地址的特殊处理。可能值为:
  • none0 -- 默认设置。这个设置禁用 fail_over_mac,并造成在 enslavement 时间内将所有 active-backup 绑定的从属连接绑定到同一 MAC 地址。
  • active 或者 1active fail_over_mac 策略表示绑定的 MAC 地址应永远是目前活动从属连接的 MAC 地址。从属连接的 MAC 地址不会更改,但在故障转移过程中会更改绑定的 MAC 地址。
    这个策略对永远无法更改其 MAC 地址的设备,或拒绝使用其自主源 MAC 地址传入多播的设备(影响 ARP 监控)很有帮助。这个策略的缺点是该网络中的每个设备必须通过免费 ARP 更新,这与切换 snoop 传入流量以便更新其 ARP 表的常规方法相反。如果免费 ARP 链接丢失,则可能破坏通讯。
    使用这个策略同时采用 MII 监控时,在可真正传输并接受数据前就声明链接处于 up 状态的设备很可能会丢失免费 ARP,并可能需要设置正确的呼叫建立延迟(updelay)。
  • follow 或者 2follow 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_intervalarp_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 毫秒发送数据包。
有效值范围为 0255,默认值为 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-xor802.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。