bonding说明

bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能,有很多优势。

bonding技术是linux系统内核层面实现的,它是一个内核模块(驱动)。使用它需要系统有这个模块, 我们可以modinfo命令查看下这个模块的信息, 一般来说都支持.

[root@centos76_1 network-scripts]# modinfo 
modinfo: ERROR: missing module or filename.
[root@centos76_1 network-scripts]# modinfo bonding
filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/net/bonding/bonding.ko.xz
author:         Thomas Davis, tadavis@lbl.gov and many others
description:    Ethernet Channel Bonding Driver, v3.7.1
version:        3.7.1
license:        GPL
alias:          rtnl-link-bond
retpoline:      Y
rhelversion:    7.6
srcversion:     120C91D145D649655185C69
depends:        
intree:         Y
vermagic:       3.10.0-957.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        B7:0D:CF:0D:F2:D9:B7:F2:91:59:24:82:49:FD:6F:E8:7B:78:14:27
sig_hashalgo:   sha256
parm:           max_bonds:Max number of bonded devices (int)
parm:           tx_queues:Max number of transmit queues (default = 16) (int)
parm:           num_grat_arp:Number of peer notifications to send on failover event (alias of num_unsol_na) (int)
parm:           num_unsol_na:Number of peer notifications to send on failover event (alias of num_grat_arp) (int)
parm:           miimon:Link check interval in milliseconds (int)
parm:           updelay:Delay before considering link up, in milliseconds (int)
parm:           downdelay:Delay before considering link down, in milliseconds (int)
parm:           use_carrier:Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default) (int)
parm:           mode:Mode of operation; 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb (charp)
parm:           primary:Primary network device to use (charp)
parm:           primary_reselect:Reselect primary slave once it comes up; 0 for always (default), 1 for only if speed of primary is better, 2 for only on active slave failure (charp)
parm:           lacp_rate:LACPDU tx rate to request from 802.3ad partner; 0 for slow, 1 for fast (charp)
parm:           ad_select:802.3ad aggregation selection logic; 0 for stable (default), 1 for bandwidth, 2 for count (charp)
parm:           min_links:Minimum number of available links before turning on carrier (int)
parm:           xmit_hash_policy:balance-alb, balance-tlb, balance-xor, 802.3ad hashing method; 0 for layer 2 (default), 1 for layer 3+4, 2 for layer 2+3, 3 for encap layer 2+3, 4 for encap layer 3+4 (charp)
parm:           arp_interval:arp interval in milliseconds (int)
parm:           arp_ip_target:arp targets in n.n.n.n form (array of charp)
parm:           arp_validate:validate src/dst of ARP probes; 0 for none (default), 1 for active, 2 for backup, 3 for all (charp)
parm:           arp_all_targets:fail on any/all arp targets timeout; 0 for any (default), 1 for all (charp)
parm:           fail_over_mac:For active-backup, do not set all slaves to the same MAC; 0 for none (default), 1 for active, 2 for follow (charp)
parm:           all_slaves_active:Keep all frames received on an interface by setting active flag for all slaves; 0 for never (default), 1 for always. (int)
parm:           resend_igmp:Number of IGMP membership reports to send on link failure (int)
parm:           packets_per_slave:Packets to send per slave in balance-rr mode; 0 for a random slave, 1 packet per slave (default), >1 packets per slave. (int)
parm:           lp_interval:The number of seconds between instances where the bonding driver sends learning packets to each slaves peer switch. The default is 1. (uint)
[root@centos76_1 network-scripts]# 

BONGDING_OPTS是什么

介绍BONGDING_OPTS,需要知道这是什么对吧。
BONGDING_OPTS 是配置bond链路的时候使用到的;
就是这个:
在这里插入图片描述
下面会依次介绍其中作用

bongding配置

配置详细方法见这篇博客吧
超详细linux手动配置单网卡和双网卡(bond0和team)以及DNS,ps:使用命令配置

7种mode模式说明

第一种模式:mode=0,即:(balance-rr) Round-robin policy(平衡抡循环策略)【默认】

  • mode=0mode=balance-rr 同效

  • 特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。

第二种模式:mode=1,即: (active-backup) Active-backup policy(主-备份策略)【常用】

  • mode=1mode=active-backup同效
  • 特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。

第三种模式:mode=2,即:(balance-xor) XOR policy(平衡策略)【不常用】

  • mode=2mode=balance-xor 同效
  • 特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力。

第四种模式:mode=3,即:broadcast(广播策略)【不常用】

  • mode=3mode=broadcast 同效
  • 特点:在每个slave接口上传输每个数据包,此模式提供了容错能力

第五种模式:mode=4,即:(802.3ad) IEEE 802.3adDynamic link aggregation(IEEE 802.3ad 动态链接聚合)【较少使用】

  • mode=4mode=802.3ad 同效

  • 特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
    外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。

  • 必要条件:

    • 条件1:ethtool支持获取每个slave的速率和双工设定
    • 条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
    • 条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

第六种模式:mode=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)【不常用】

  • mode=5mode=balance-tlb 同效

  • 特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

  • 该模式的必要条件:ethtool支持获取每个slave的速率

第七种模式:mode=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)【较少使用】

  • mode=6mode=balance-alb 同效
  • 特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。

各类参数说明

mode

 mode=value (值)
  • mode有7种方法,每种的功能见上面的说明;

miimon

miimon=time_in_milliseconds (时间 毫秒)
  • 指定MII链路监控频率,单位是毫秒(ms)。这将决定驱动检查每个slave链路状态频率。0表示禁止MII链路监控。100可以作为一个很好的初始参 考值。下面的use_carrier选项将会影响如果检测链路状态。更多的信息可以参考“高可靠性”章节。缺省值为0。

arp_interval

miimon=time_in_milliseconds (时间 毫秒)

指定ARP链路监控频率,单位是毫秒(ms)。如果APR监控工作于以太兼容模式(模式0和模式2)下,需要把switch(交换机)配置为在所有链路上 均匀的分发网络包。如果switch(交换机)被配置为以XOR方式分发网络包,所有来自ARP目标的应答将会被同一个链路上的其他设备收到,这将会导致 其他设备的失败。ARP监控不应该和miimon同时使用。设定为0将禁止ARP监控。缺省值为0。

arp_ip_target

arp_ip_target=ip_address[,ip_address_2,…ip_address_16]

指定一组IP地址用于ARP监控的目标,它只在arp_interval > 0时有效。这些IP地址是ARP请求发送的目标,用于判定到目标地址的链路是否工作正常。该设定值为ddd.ddd.ddd.ddd格式。多个IP地址通 过逗号分隔。至少指定一个IP地址。最多可以指定16个IP地址。缺省值是没有IP地址。

arp_validate

arp_validate=value

验证 ARP 探测的源/分配,默认为 none。其他值为 active、backup 和 all。

downdelay

miimon=time_in_milliseconds (时间 毫秒)

指定一个时间,用于在发现链路故障后,等待一段时间然后禁止一个slave,单位是毫秒(ms)。该选项只对miimon监控有效。downdelay值应该是miimon值的整数倍,否则它将会被取整到最接近的整数倍。缺省值为0。

max_bonds

arp_validate=value

为bonding驱动指定创建bonding设备的数量。比如,如果max_bonds为3,而且bonding驱动还没有加载,那么bond0,bond1,bond2将会被创建。缺省值为1。

lacp_rate

arp_validate=value

指定在802.3ad(mode=4)模式下,我们希望的链接对端传输LACPDU包的速率。可能的选项:

slow 或者 0
请求对端每30s传输LACPDU

fast 或者 1
请求对端每1s传输LACPDU,缺省值是slow

updelay

arp_validate=value
  • 指定当发现一个链路恢复时,在激活该链路之前的等待时间,以毫秒计算。该选项只对miimon链路侦听有效。updelay应该是miimon值的整数倍,如果不是,它将会被向下取整到最近的整数。缺省值为0。

primary

primary=interface_name
  • 指定哪个slave成为主设备(primary device),取值为字符串,如eth0,eth1等。只要指定的设备可用,它将一直是激活的slave。只有在主设备(primary device)断线时才会切换设备。这在希望某个slave设备优先使用的情形下很有用,比如,某个slave设备有更高的吞吐率。

  • primary选项只对active-backup(mode=1)模式有效。

use_carrier

use_carrier=number

指定miimon是否需要使用MII或者ETHTOOL ioctls还是netif_carrier_ok()来判定链路状态。MII或ETHTOOL ioctls更低效一些,而且使用了内核里废弃的旧调用序列;而netif_carrier_ok()依赖于设备驱动来维护状态(判断载波),在本文写作 时,大多数但不是全部设备驱动支持这个特性。

如果bonding总是认为链路是通的,但实际上是断的,这有可能是由于你的网络设备驱动不支持netif_carrier_on/off。因为 netif_carrier的缺省状态是"carrier on",因此如果驱动不支持netif_carrier,则会显示链路永远正常。在这种情况下,把use_carrier设为0,从而让bonding使 用MII/ETHTOOL ictl来判定链路状态。

该选项设为1会使用netif_carrier_ok(),而设为0则会使用废弃的MII/ETHTOOL ioctls,缺省值是1。

ad_selec

ad_select=value

指定要使用的 802.3ad(mode=4) 聚合选择逻辑,可能值为:

  • stable 或者 0 — 默认设置。由最大聚合带宽选择的活动聚合器。只有全部从属聚合器失效,或活跃聚合器没有从属聚合器时,才会重新选择活动聚合器。

  • bandwidth 或者 1 — 活动聚合器由最大聚合带宽选择。出现在以下情况下会重新选择:

    • 在绑定中添加或删除从属;
    • 任意从属链接发生变化;
    • 任意与 802.3ad 有关的状态变化;
      • 绑定的管理状态改为 up。
  • count 或者 2 — 活动聚合器由号码最大从属连接选择。重新选择的条件与上述 bandwidth 一致。

bandwidth 和 count 选择策略允许活动聚合器部分失灵时进行 802.3ad 聚合故障转移。这样可保证聚合器高度可用,即 bandwidth 或从属连接数一直保持活动。

fail_over_mac

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 地址编程时变得混乱或发生性能损失的多端口设备有帮助。

resend_igmp

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 流量通过新选择的从属接口转发。

use_carrier

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

xmit_hash_policy=value

在balance-xor和802.3ad模式下选择不同的hash模式,以用于slave选举。可能的取值有:

  • 0 或者 layer2 — 默认设置
    使用硬件MAC地址的XOR来生成hash。公式为:
(source_MAC_address XOR destination_MAC) MODULO slave_count

(源MAC地址 XOR 目的MAC地址)% slave数目
该算法会将某个网络对(network peer)上所有的流量全部分配到同一个slave上。

  • 1 或者 layer3+4 ——使用上层协议信息(可用时)生成该哈希。这样可让流量进入特定对等网络并跨多个从属接口,虽然单一连接无法跨多个从属接口。

该策略在可能的时候使用上层协议的信息来生成hash。这将允许特定网络对(network peer)的流量分摊到多个slave上,尽管同一个连接(connection)不会分摊到多个slave上。
未碎片化 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。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐