当前位置:首页 >> 信息与通信 >>

详解Suse双网卡绑定步骤


?

suse-9-Suse Linux 下双网卡 bonding
Suse Linux 下双网卡 bonding Linux 双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备 看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的 IP 地址 而并行链接聚合成一个逻辑链路工作。其实这项技术在 Sun 和 Cisco 中早

已存在, 被称为 Trunking 和 Etherchannel 技术,在 Linux 的 2.4.x 的内核中也采用这这种技 术,被称为 bonding. bonding 驱动最早来自于 Donald Becker 的 beowulf 对 kernel2.0 的补丁.但是已经 有了很大的改进和变化,最早来自于 extreme-linux 和 beowulf 的工具已经不适用 于现在版本的驱动了。 随着 bonding 技术的发展,bonding 现在已经发展到 6 种模式,不再是简单的链路 聚合模式了. 以下是 bonding 的六种模式介绍,目前主要应用的是前四种模式,尤其是第一种和 第二种 bonding 模式

mode=0 (balance-rr) Round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance. mode=1 (active-backup) Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond's MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode. mode=2 (balance-xor) XOR policy: Transmit based on [(source MAC address XOR'd with destination MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance. mode=3 (broadcast) Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.

mode=4 (802.3ad) IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification. Pre-requisites: 1. Ethtool support in the base drivers for retrieving the speed and duplex of each slave. 2. A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require some type of configuration to enable 802.3ad mode. mode=5 (balance-tlb) Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave. Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave. mode=6 (balance-alb) Adaptive load balancing: includes balance-tlb plus receive load balancing (rlb) for IPV4 traffic, and does not require any special switch support. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the local system on their way out and overwrites the source hardware address with the unique hardware address of one of the slaves in the bond such that different peers use different hardware addresses for the server. 1) 检查 bonding 网卡配置文件,配置 bonding 的两块网卡首先需要激活,也就是查看 /etc/sysconfig/network/目录下是否存在物理网卡,物理网卡对应的 ifcfg-eth-id-xx:xx:xx:xx:xx:xx 文件(其中 xx 将被设备的 MAC 地址所代替), 每个文件对应一块网卡,如果不存在,通过运行 yast 生成网卡配置文件 ifcfg-eth-id-xx:xx:xx:xx:xx:xx,不需要做任何配置,只需要生成配置文件. 例如 linux3:/etc/sysconfig/network # ls -al ifcfg-eth-id-00\:19\:c6\:9a\:7b\:9* -rw-r--r-- 1 root root 215 Nov 29 18:15 ifcfg-eth-id-00:19:c6:9a:7b:9a

-rw-r--r-- 1 root root 216 Nov 29 18:15 ifcfg-eth-id-00:19:c6:9a:7b:9b linux3:/etc/sysconfig/network # 2) 修改第一块 bonding 网卡(例如 eth0)的配置文件,无需配置 ip 地址和网络掩码,只 要确保 STARTMODE='off',BOOTPROTO='none',其它可不修改.例如: _nm_name='bus-pci-0000:01:00.0' # 保持原值,注意 bus-pci-0000:01:00.0 表明 eth0,bus-pci-0000:01:00.1 表明 eth1, # bus-pci-0000:02:00.0 表明 eth2,bus-pci-0000:01:00.1 表明 eth3 同样的方法修改第二块 bonding 网卡(例如 eth1)的配置文件。

linux3:/etc/sysconfig/network # cat ifcfg-eth-id-00\:19\:c6\:9a\:7b\:9a BOOTPROTO='none' # 需要注意,配置 bonding 的网卡这里必须是 none BROADCAST='192.200.100.255' # 保持原值,无需和本例相同 IPADDR='192.200.100.55' # 保持原值,无需和本例相同 MTU='' # 保持原值,无需和本例相同

NETMASK='255.255.255.0' # 保持原值,无需和本例相同 NETWORK='192.200.100.0' # 保持原值,无需和本例相同 REMOTE_IPADDR='' # 保持原值,无需和本例相同 STARTMODE='off' # 需要注意,配置 bonding 的网卡这里必须是 off UNIQUE='VCu0.6WcPctQ2xE0' # 保持原值,无需和本例相同 _nm_name='bus-pci-0000:01:00.0' # 保持原值,无需和本例相同.注意 # bus-pci-0000:01:00.0 是 eth0,连 Ges7 的 Base # bus-pci-0000:01:00.1 是 eth1,连 Ges8 的 Base # bus-pci-0000:02:00.0 是 eth2,连 Ges7 的 Fabric # bus-pci-0000:01:00.1 是 eth3,连 Ges8 的 Fabric linux3:/etc/sysconfig/network # 3) 创建 bond 配置文件 创建文件名为/etc/sysconfig/network/ifcfg-bond0,可以通过 #cp ifcfg.template ifcfg-bond0 的方式创建 ifcfg-bond0, 也可以直接手工 touch 一个 ifcfg-bond0 ifcfg-bond0 文件内容如下: linux3:/etc/sysconfig/network # cat ifcfg-bond0 BOOTPROTO='static' # 需要注意,这里需要设置为 static BROADCAST='255.255.255.0' # bond0 对应的广播地址 IPADDR='192.200.123.180' # bond0 对应工作 ip MTU='' # 可以不填

NETMASK='255.255.255.0' # bond0 对应的子网掩码 NETWORK='192.200.123.0' # bond0 对应的网络地址 REMOTE_IPADDR='' # 可以不填 STARTMODE='onboot' # 需要注意,这里需要设置为 onboot BONDING_MASTER='yes' # 设置为 yes BONDING_MODULE_OPTS='mode=active-backup miimon=100' # 说明:miimon 是用来进行链路监测的。 比如:miimon=100,那么系统每 100ms

# 监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode 的值表示 # 工作模式,主要应用有 0,1,2,3 四种模式,常用的为 0,1 两种. # # mode=0 表示 load balancing (round-robin)为负载均衡方式,两块网卡都工作。 mode=1 表示 fault-tolerance (active-backup)提供冗余功能,工作方式是主备的

# 工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份. # bonding 只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换

# 机对外的链路 down 掉了,而交换机本身并没有故障,那么 bonding 会认为链路没有 # 问题而继续使用 BONDING_SLAVE0='bus-pci-0000:01:00.0' BONDING_SLAVE1='bus-pci-0000:01:00.1' # 说明: 也可以使用如下方式 # BONDING_SLAVE0='eth0' # BONDING_SLAVE1='eth1' # 说明: 为每个从设备准备一个 BONDING_SLAVEn='slave_device' 变量赋值。

# 'slave_device' 既可为接口名,如:'eth0',也可为网络设备描述符.设备名 # 很容易使用,但是这个名字由于是逻辑名因此并非持久命名。它会因网络驱 # 动的加载顺序而改变.设备描述符'bus-pci-0000:06:08.1'指向特定的物理 # 网络设备,除非设备在总线上的位置发生变化(在机器里更换插槽)否则是不 # 会因驱动加载顺序而改变的。 linux3:/etc/sysconfig/network # 4) 重启网络模块或者重启机器 # /etc/init.d/network restart 可以通过如下方式查看 bonding 情况,例如 linux3:/etc/sysconfig/network # cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v2.6.5 (November 4, 2005) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None

Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:19:c6:9a:7b:9a Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:19:c6:9a:7b:9b linux3:/etc/sysconfig/network #

在学习 Suse 的时候,我们会遇到很多的情况,我研究了一些 Suse 的问题,今天所要讲 的就是怎样进行 Suse 双网卡绑定,通过本文希望你能过学习记住 Suse 双网卡绑定的过程。 1, 比较简单的方法 , 将两块 Fabric 网卡绑定为 bond1 # vi /etc/sysconfig/network/ifcfg-bond1 BOOTPROTO='static' IPADDR='10.69.16.102' NETMASK='255.255.255.0' STARTMODE='onboot' BONDING_MASTER='yes' BONDING_MODULE_OPTS='mode=1 miimon=200' BONDING_SLAVE0='eth1' BONDING_SLAVE1='eth2' 删掉原来的网卡配置文件,重启网络服务 cd /etc/sysconfig/network/ rm ifcfg-eth1 rm ifcfg-eth2

rcnetwork restart 使用 ifconfig 命令检查网卡绑定是否成功。如果已经启用 bond0 的 IP 地址,而且原来的两 个网卡没有附着 IP,而且 mac 地址一致,则说明绑定成功。 2,比较正规的方法 , 步骤 1 进入到网络配置目录下:

# cd /etc/sysconfig/network 步骤 2 # vi ifcfg-bond0 在 ifcfg-bond0 配置文件中添加如下内容。 #suse 9 kernel 2.6 ifcfg-bond0 BOOTPROTO='static' device='bond0' IPADDR='10.71.122.13' NETMASK='255.255.255.0' NETWORK='10.71.122.0' BROADCAST='10.71.122.255' STARTMODE='onboot' BONDING_MASTER='yes' BONDING_MODULE_OPTS='mode=1 miimon=200' BONDING_SLAVE0='eth0' BONDING_SLAVE2='eth1' 步骤 3 步骤 4 配置完成,保存该文件并退出。 创建 ifcfg-eth0 配置文件。(装完 SUSE9 操作系统后/etc/sysconfig/network 会 创建 ifcfg-bond0 配置文件。

有两块网卡 MAC 地址命名的文件,直接把下面的 ifcfg-eth0 文件内容覆盖那两个配置文件, 不用新建 ifcfg-eth0,ifcfg-eth1,SUSE10 下则按下面操作) # vi ifcfg-eth0 在 ifcfg-eth0 配置文件中添加如下内容。 DEVICE='eth0' BOOTPROTO='static' STARTMODE='onboot' 步骤 5 保存该文件并退出。

步骤 6 # vi ifcfg-eth1

创建 ifcfg-eth1 配置文件。

在 ifcfg-eth1 配置文件中添加如下内容。 DEVICE='eth1' BOOTPROTO='static' STARTMODE='onboot' 步骤 7 步骤 8 保存该文件并退出。 重启系统网络配置,使配置生效。

# rcnetwork restart 3,SUSE 厂家主流推荐的方法,个人也比较推崇! , 厂家主流推荐的方法,个人也比较推崇! 一、配置加在网卡驱动 在/etc/sysconfig/kernel 中的 MODULES_LOADED_ON_BOOT 参数加上网卡的驱动,例如 MODULES_LOADED_ON_BOOT=”tg3 e1000” 注意: 大多数情况下不需要配置这一步骤, 只有某些网卡不能在启动过程中驱动初始较 慢没有识别导致绑定不成功,也就是有的 slave 设备没有加入绑定,才需要配置。 二、创建要绑定的网卡配置文件 /etc/sysconfig/network/ifcfg-eth*,其中*为数字,例如 ifcfg-eth0 , ifcfg-eth1 等等。 每个文件的内容如下: BOOTPROTO='none' STARTMODE='off' 三、创建 bond0 的配置文件 /etc/sysconfig/network/ifcfg-bond0 内容如下: BOOTPROTO='static' BROADCAST='192.168.1.255' IPADDR='192.168.1.1' NETMASK='255.255.255.0' NETWORK='192.168.1.0' STARTMODE='onboot'

BONDING_MASTER='yes' BONDING_MODULE_OPTS='mode=1 miimon=100 use_carrier=1 ' #其中 mode=1 为 active-backup 模式,mode=0 为 balance_rr 模式 BONDING_SLAVE0='eth0' BONDING_SLAVE1='eth1' 对于 active-backup 模式, 模式, 四、 需要在 BONDING_MODULE_OPTS 参数中加上制定主 设备的参数,例如: 设备的参数 BONDING_MODULE_OPTS='mode=1 miimon=100 use_carrier=1 primary=eth0' 五、重新启动 networkf 服务 rcnetwork restart 六、注意事项 (1)在某些情况下网卡驱动的初始化的时间可能会比较长,从而导致 bonding 不成功,那 么可以修改 /etc/sysconfig/network/config 配置文件的 WAIT_FOR_INTERFACES 参数,将其值改成 30。 (2)配置完 bonding 之后,可以通过在客户端 ping,然后在服务器端拔插网线来验证是否 已经正常工作。 (3)cat /proc/net/bonding/bond0 可以查看 bonding 的状态。 这样你就完成了 Suse 双网卡绑 定。 MII 监控通过监控本地网络接口的载波状态来实现监控链路状态。 可以通过三种方法之一实 现:通过依赖设备驱动来维护载波状态;通过查询设备的 MII 寄存器;或者通过给设备发 送 ethtool 查询。
注意:红色字体是重点 #cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.55 NETMASK=255.255.255.0 #cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static #cat /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1 ONBOOT=yes BOOTPROTO=static # cat /etc/modprobe.conf 在最后面添加 alias bond0 bonding options bond0 miimon=100 mode=1 #cat /etc/rc.d/rc.local 在最后面添加 ifenslave bond0 eth0 eth1

补充: ifenslave 是一个在 linux 下做负载均衡的工具,需要安装这个包之后上面的方案才能使用。 工作原理很简单,我举个例子,不一定成功,但能说明原理: 建一个组,把 eth0 和 eth1 加进去 #ifenslave bond0 eth0 #ifenslave bond0 eth1 #ifconfig bond0 [ip] [submark] 这个时候会新建一个 bond0 虚拟设备,使用我设置的 IP 地址,这个时候 eth0 和 eth1 工作模式变成了 混杂模式,什么数据都收。 但数据过来之后由 ifenslave 的底层驱动来作负载均衡,决定哪些数据规组里面的哪个成员(eth0,eth1) 处理。 注意这个解决方案的配置文件,其中有一句: options bond0 miimon=100 mode=1 如果达到负载均衡的目的,应该是 0,1 是热备状态。 miimon 是毫秒数,每 100 毫秒触发检测线路稳定性的事件。 mode= 是 ifenslave 的工作状态。 一共有 7 种方式: =0: (balance-rr) Round-robin policy: (平衡抡循环策略):传输数据包顺序是依次传输,直到最 后一个传输完毕, 此模式提供负载平衡和容错能力,这需要设置交换机的配合才能完成。 =1: (active-backup) Active-backup policy:(主-备份策略):只有一个设备处于活动状态。 一个宕掉另一个马上由备份转换为主设备。mac 地址是外部可见得。 此模式提供了容错能力。 =2:(balance-xor) XOR policy:(广播策略):将所有数据包传输给所有接口。 此模式提供了容错能 力。 =3:(balance-xor) XOR policy: (平衡 策略): 传输根据原地址布尔值选择传输设备。 此模式提供负载平衡和容错能力。 =4:(802.3ad) IEEE 802.3ad Dynamic link aggregation. IEEE 802.3ad 动态链接聚合:创建共享相同的速度和双工设置的聚合组。 =5:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡) :没有特殊策略, 第一个设备传不通就用另一个设备接管第一个设备正在处理的 mac 地址, 帮助上一个 传。 =6:(balance-alb) Adaptive load balancing: (适配器传输负载均衡):大致意思是包括 mode5,

bonding 驱动程序截获 ARP 在本地系统发送出的请求,用其中之一的硬件地址覆盖从属设备的原地址。 就像是在服务器上不同的人使用不同的硬件地址一样。(我没太看明白) 确认网卡状态: cat /proc/net/bonding/bond0

、4. 查询 Bonding 配置
================================= 4.1 Bonding 配置 --------------------------------每个 bonding 设备对应于一个只读文件,存在于/proc/net/bonding 目录,文 件内容包括 bonding 配置的信息,选项以及每个 slave 的状态。 例如,在使用参数 mode=0,miimon=1000 时,加载驱动后, /proc/net/bonding/bond0 的内容为: Ethernet Channel Bonding Driver: 2.6.1 (October 29, 2004) Bonding Mode: load balancing (round-robin) Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 1000 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 1 Slave Interface: eth0 MII Status: up Link Failure Count: 1 根据你配置、状态、以及 bonding 驱动版本的差异,上述内容的精确格式和内 容有可能不同。 4.2 网路配置 --------------------------------网络配置可以通过 ifconfig 命令查看,Bonding 设备会设上 MASTER 标记, slave 设备会设上 SLAVE 标记。ifconfig 的输出不包含哪个 slave 关联于哪个 master 的关系。

在上例中, bond0 接口是 master (MASTER) 而 eth0 和 eth0 是 slave , (SLAVE) 。 注意除了 TLB 和 ALB 模式外,所有 bond0 的 slave 和 bond0 有着同样的 MAC 地 址(HWaddr),TLB 和 ALB 需要每个 slave 有独立的 MAC 地址。 # /sbin/ifconfig bond0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0 UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:7224794 errors:0 dropped:0 overruns:0 frame:0 TX packets:3286647 errors:1 dropped:0 overruns:1 carrier:0 collisions:0 txqueuelen:0 eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0 TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x1080 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0 TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:9 Base address:0x1400

eth1

5. 交换机配置 ================================= 在本节中,"交换机(switch)"指被 bond 设备直接连接的系统(也就是说,另 一端电缆连接着的) 这可能是一个专职的交换机设备, , 也可能是其它的系统 (比 如,另一个运行 Linux 的系统)。 active-backup、balance-tlb 和 balance-alb 模式不需要对交换机做任何的 配置。 802.3ad 模式需要交换机有对应的配置为 802.3ad 聚合的端口,具体的配置方 法因交换机类型而异,比如,Cisco 3550 系列交换机要求对应的端口首先必须 被分组在一个单独的 etherchannel 实例, 然后这个 etherchannel 设置为"lacp" 模式已启用 802.3ad(取代标准 EtherChannel)。 balance-rr、balance-xor 和 broadcast 模式通常需要交换机对应的端口被分

组在一起,不同的交换机对分组有着不同的命名,可能会被叫做 “etherchannel”(比如上文的 Cisco 示例),或者叫做“trunk group”,或 者其他类似的命令。对于这些模式,每个交换机也会有它自己的针对到 bond 的 传输策略的配置选项。典型的选择包括对每个 MAC 地址或者 IP 地址进行 XOR 操 作,两端的传输策略不一定完全一致。对这三种模式,bonding 模式会针对一个 EtherChannel 组选择一种传输策略;所有这三种模式都会和另一个 EtherChannel 组进行互操作。 --------------------------------------------------------------------------------------The balance-rr, balance-xor and broadcast modes generally require that the switch have the appropriate ports grouped together. The nomenclature for such a group differs between switches, it may be called an "etherchannel" (as in the Cisco example, above), a "trunk group" or some other similar variation. For these modes, each switch will also have its own configuration options for the switch's transmit policy to the bond. Typical choices include XOR of either the MAC or IP addresses. The transmit policy of the two peers does not need to match. For these three modes, the bonding mode really selects a transmit policy for an EtherChannel group; all three will interoperate with another EtherChannel group. --------------------------------------------------------------------------------------6. 支持 802.1q VLAN ================================= 我们可以使用 8021q 驱动在一个 bond 接口上配置 VLAN 设备,然而,只有来自 8021q 设备和经过(pass through)bonding 的数据包缺省会被打上 VLAN 标记。自 生成的数据包,比如,bonding 的学习包、在 ALB 模式生成 ARP 包或者 ARP 监测 机制的 ARP 包,这些包都会被 bonding 自身在内部打上标记。因此,bonding 必 须要“学习”在它上面的 VLAN ID 的配置,然后使用这些 ID 来标记自生成的数 据包。 简单起见,为了支持那些可以使用 VLAN hardware acceleration offloading 的适配器,bonding 接口把它自身声明为一个完全 hardware offloading 能力的 设备,它通过获取 add_vid/kill_vid 通知来获取必备的信息,然后它把这些动 作传播给 slave。在混合的适配器类型下,那些打上硬件加速标记的数据包,如 果经过一个不支持 offloading 的适配器,bonding 驱动将“un-accelerated”, 因此 VLAN 标记依然存在正确的位置。 --------------------------------------------------------------------------------------For reasons of simplicity, and to support the use of adapters

that can do VLAN hardware acceleration offloading, the bonding interface declares itself as fully hardware offloading capable, it gets the add_vid/kill_vid notifications to gather the necessary information, and it propagates those actions to the slaves. In case of mixed adapter types, hardware accelerated tagged packets that should go through an adapter that is not offloading capable are "un-accelerated" by the bonding driver so the VLAN tag sits in the regular location. --------------------------------------------------------------------------------------在从属 slave 至少有一个的情况下,VLAN 接口"必须"被增加在 bonding 接口 的最上面。直到第一个 slave 加入前,bonding 接口的硬件地址将是 00:00:00:00:00:00。如果 VLAN 接口在第一个 slave 加入前被创建,它会选择一 个全 0 的硬件地址, 一旦第一个 slave 加入到 bond, bond 设备自己就会选择 slave 的硬件地址,VLAN 设备也将会使用这个地址。 同时,要注意到如果所有的 slave 都被从 bond 移除,而 bond 上还有一个或多 个 VLAN 接口时,类似的问题也会发生,当新的 slave 加入,bonding 接口将获 取第一个 slave 的硬件地址,而这可能和当前 VLAN 接口的硬件地址不一样(当 前 VLAN 接口的硬件地址是从之前的 slave 上获取的)。 有两种方法来保证 VLAN 设备一直使用正确的硬件地址,即使所有 slave 被从 bond 接口上移除: 1. 移除所有 VLAN 接口,然后重新创建它们 2. 手动设置 bonding 接口的硬件地址,使它和 VLAN 接口的硬件地址一致。 要注意改变一个 VLAN 接口的硬件地址将会改变它下面的设备(比如 bonding 接口)到混杂模式,这有可能不是你期望的结果。 7. 链路监控 ================================= 当前的 bonding 驱动支持两种模式,来监控 slave 设备的链路状态:ARP 监控 和 MII 监控。 由于 bonding 驱动自身的实现限制, 现在我们不可能同时启用 ARP 和 MII 监控。 7.1 ARP 监控操作 --------------------------------ARP 监控正如其名字所暗示的:它想网络上的对端系统发送 ARP 请求,并且通

过 ARP 相应作为链路是否可用的标志,这可以保证网络两端的流量确实是通的。 ARP 监控依赖于设备驱动来验证流量是否是通的,进一步,驱动必须保留上次 接收时间,dev->last_rx,以及传输起始时间,dev->trans_start。如果这些值 不会被驱动更新,则 ARP 监控立刻会认为对应于该驱动的 slave 出现了故障,这 些 slave 将会进入断开状态。如果网络监控工具(比如 tcpdump)显示 ARP 请求 和相应都正常,那有可能是你的设备驱动没有更新 last_rx 和 trans_start。 7.2 配置多 ARP 目的地址 --------------------------------尽管 ARP 监控可以只用一个目的地址来实现,但在高可靠性(High Availability)环境下,如果能够对多个目的地址进行监控也是很有用的。在只 有一个目的地址的情况下,如果目标本身被关闭或者遇到问题以致无法响应 ARP 请求,这时额外的一个目标(或更多)可以增加 ARP 监控的可靠性。 多 ARP 目的地址之间必须以逗号分割,如下: # 3 个目的地址的 ARP 监控选项示例 alias bond0 bonding options bond0 arp_interval=60 arp_ip_target=192.168.0.1,192.168.0.3,192.168.0.9 如果只有一个目的地址,配置也很类似: # 只有 1 个目的地址的 ARP 监控选项示例 alias bond0 bonding options bond0 arp_interval=60 arp_ip_target=192.168.0.100 7.3 MII 监控操作 --------------------------------MII 监控通过监控本地网络接口的载波状态来实现监控链路状态。可以通过 3 种方法之一来实现:通过依赖设备驱动来维护载波状态;通过查询设备的 MII 寄存器;或者通过给设备发送 ethtool 查询。 如果模块参数 use_carrier 被设为 1(缺省值),MII 监控将会依赖于设备来 获取载波状态信息 (通过 netif_carrier 子系统) 正如前文介绍的 use_carrier 。 参数信息, 如果 MII 监控不能发现设备的载波消失 (比如当电缆被物理拔断时) , 那有可能时设备不支持 netif_carrier。 如果 use_carrier 为 0,MII 监控首先会查询设备(通过 ioctl)的 MII 寄存 器并检查链路状态,如果查询失败(返回载波断开不属于失败),则 MII 监控会 发送一个 ethtool ETHOOL_GLINK 查询以尝试获取类似的信息,如果两种方法都

失败了(设备不支持或者在处理 MII 寄存器和 ethtool 查询时发生了错误),那 么 MII 监控将会假定链路是正常的。 8. 潜在问题缘由 ================================= 8.1 路由历险记 --------------------------------如果配置了 bonding,很重要的一点是 slave 设备不能拥有传递到 master 的 路由 (或者, 通常根本没有路由) 比如, , 假定 bonding 设备 bond0 有两个 slave: eth0 和 eth1,路由表如下: Kernel IP routing table Destination Gateway Window irtt Iface 10.0.0.0 0.0.0.0 0 0 eth0 10.0.0.0 0.0.0.0 0 0 eth1 10.0.0.0 0.0.0.0 0 0 bond0 127.0.0.0 0.0.0.0 0 0 lo

Genmask 255.255.0.0 255.255.0.0 255.255.0.0 255.0.0.0

Flags U U U U

MSS 40 40 40 40

路由配置有可能持续更新设备的接收/发送次数(ARP 监控需要),但可能旁 路了 bonding 设备(在这个示例里,外出到网络网络 10 的流量将会在 bond0 之 前使用 eth0 或者 eth1)。 ARP 监控(以及 ARP 本身)可能会被这个配置所混淆,因为 ARP 请求(ARP 监 控生成)会在某个接口(bond0)上发出,但对应的响应在另一个接口上到达 (eth0),这个响应将会被视为一个未关联 ARP 响应(因为 ARP 通过接口进行匹 配)。MII 监控不会被路由表状态所影响。 这里的解决方法是:保证 slave 没有它们自己的路由,如果由于某些原因它们 必须要有,这些路由不要传递到它们的 master,通常情况下都是这样的,但某 些特别的配置或者错误的操作或者静态添加路由可能会导致问题。 8.2 Ethernet 设备重命名 --------------------------------有些系统,它的网络配置脚本没有直接把网络接口名和物理设备关联(如果关 联的话,同样的物理设备总是有同样的"ethX"名),对于这些系统,可能需要增 加一些特别的逻辑到/etc/modules.conf 或者/etc/modprobe.conf(由系统中安

装的部件决定)。 比如,某个 modules.conf 包含如下内容: alias bond0 bonding options bond0 mode=some-mode miimon=50 alias eth0 tg3 alias eth1 tg3 alias eth2 e1000 alias eth3 e1000 如果 eth0 和 eth1 都是 bond0 的 slave,则当 bond0 接口启用时,这两个设备 可能被重新排序,这是因为 bonding 会被首先加载,然后它的 slave 设备驱动才 会加载, 既然没有其他驱动被加载, e1000 驱动加载时, 当 它将会把 eth0 和 eth1 认为是它的设备,但是 bonding 配置尝试把 eth2 和 eth3 从属过来(而 eth2 和 eth3 可能被赋予 tg3 设备)。 增加如下内容: add above bonding e1000 tg3 这样,当 bonding 加载时,将会导致 modprobe 在 tg3 前加载 e1000。该命令 在 modules.conf 手册里有完整的描述。 对于使用 modprobe.conf(或者 modprobe.conf.local)的系统,同样的问题 也会发生。这时,可以在 modprobe.conf(或 modprobe.conf.local)加入如下 内容(所有内容在同一行,这里清晰起见分行了): install bonding /sbin/modprobe tg3; /sbin/modprobe e1000; /sbin/modprobe --ignore-install bonding 这将会导致,当加载 bonding 模块时,除了执行正常的操作,同时还执行指定 的命令,该命令以正确的顺序加载设备驱动,然后以--ignore- install 来调用 modprobe,这将导致随后调用通常的操作。完整的描述在 modprobe.conf 和 modprobe 的手册里。 8.3 速度变慢或 Miimon 无法监测到链路异常 --------------------------------缺省地,bonding 会启用 use_carrier 选项,这将使得 bonding 信任设备来维 护载波状态。 正如在上文选项一节所述, 某些驱动不支持 netif_carrier_on/_off 链路状态 跟踪系统,当启用 use_carrier,bonding 将会永远认为链路是正常的,而不管

它们的实际状态。 而且,某些驱动虽然支持 netif_carrier,但并不实时维护它,比如只是以某 个固定的间隔轮训。在这种情况下,miimon 会检测到链路异常,但是可能在某 个很长的时间间隔后,如果发现 miimon 很慢才能检测到链路异常,尝试着设置 use_carrier=0,看看能不能改善。如果可以改善,则很可能是驱动需要一个很 长的固定间隔才会检查载波状态,而且没有缓存 MII 寄存器的值(因此当 use_carrier=0 时查询寄存器可以正常工作);如果 use_carrier=0 不能解决问 题,则可能是驱动缓存了 MII 寄存器的值,或者是其它的问题。 同时,请记住 miimon 只会检查设备的载波状态,它无法判定设备是否处于打 开状态, 或对端交换机的状态, 或交换机拒绝传输流量, 即使载波状态依然正常。 9. SNMP 代理 ================================= 如果运行 SNMP 代理, bonding 驱动应该在任何网络驱动参与到 bond 前被加载, 这个要求是由于接口索引(ipAdEntIfIndex)被关联到第一个有着指定 IP 地址 的被发现的接口,也就是说,对每个 IP 地址只有一个 ipAdEntIfIndex,比如, 如果 eth0 和 eth1 是 bond0 的 slave,eth0 的驱动在 bonding 驱动前被加载, IP 地址的接口将会被关联到 eth0 接口,配置如下,IP 地址 192.168.1.1 将会使 用接口索引 2,这将指向 ifDescr 表(ifDescr.2)中的 eth0: interfaces.ifTable.ifEntry.ifDescr.1 = lo interfaces.ifTable.ifEntry.ifDescr.2 = eth0 interfaces.ifTable.ifEntry.ifDescr.3 = eth1 interfaces.ifTable.ifEntry.ifDescr.4 = eth2 interfaces.ifTable.ifEntry.ifDescr.5 = eth3 interfaces.ifTable.ifEntry.ifDescr.6 = bond0 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 =

= 5 = 2 = 4 1

如果在所有参与到 bond 的网络驱动加载前加载 bonding 驱动,我们可以避免 这个问题。如下是一个示例,它会首先加载 bonding 驱动,IP 地址 192.168.1.1 被正确地关联到 ifDescr.2: interfaces.ifTable.ifEntry.ifDescr.1 interfaces.ifTable.ifEntry.ifDescr.2 interfaces.ifTable.ifEntry.ifDescr.3 interfaces.ifTable.ifEntry.ifDescr.4 interfaces.ifTable.ifEntry.ifDescr.5 interfaces.ifTable.ifEntry.ifDescr.6 = = = = = = lo bond0 eth0 eth1 eth2 eth3

ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 =

= 6 = 2 = 5 1

当某些发行包没有在 ifDescr 中报告接口名,IP 地址和 IfIndex 的关联依然 保留,而且 SNMP 功能,比如 Interface_Scan_Next 将会报告这些关联。 10. 混杂模式 ================================= 当运行网络监控工具,比如 tcpdump,经常会要打开设备德混杂模式,这样所 有流量都会被发现(不仅仅看到目标为本机的流量)。bonding 驱动处理针对 bonding 主设备的混杂模式(比如 bond0),并把设定传播给其他 slave 设备。 对于 balance-rr,balance-xor,broadcast 和 802.3ad 模式,混杂模式设置 会被传播给所有 slave。 对于 active-backup,balance-tlb 和 balance-alb 模式,混杂模式设置仅会 被传播给激活的 slave。 对于 balance-tlb 模式,激活的 slave 是指当前正在接收 inbound 流量的 slave。 对于 balance-alb 模式, 激活的 slave 是指用做"primary"的 slave, 这个 slave 用于模式相关的控制流量,对于发送到未指定对端或如果流量未做均衡。 --------------------------------------------------------------------------------------For balance-alb mode, the active slave is the slave used as a "primary." This slave is used for mode-specific control traffic, for sending to peers that are unassigned or if the load is unbalanced. --------------------------------------------------------------------------------------对于 active-backup,balance-tlb 和 balance-alb 模式,当激活的 slave 改 变时(比如由于链路异常),混杂设定会被传播给新的激活 slave。 11. 配置 Bonding 用于高可靠性(High Availability,缩写为 HA) ========================================================== High Availability 指提供最大网络可靠性的配置,通过在主机和其他设备间 的冗余或备份设备、链路或交换机,目标是提供最大的网络链接可靠性(要求网 络一直可用),尽管其它的配置可能提供更高的吞吐量(性能)。

11.1 单交换机拓扑下的 HA --------------------------------如果两个主机(或一个主机和一个交换机)通过多个物理链路直连,想要优化 最大带宽就不具有可行性。在这种情况下,只有一个交换机(或对端),如果它 坏了,那没有替代的链接来接替。此外,bonding 负载均衡模式支持成员的链路 监控,因此如果单个链路坏了,负载将会被均衡到剩余的设备。 参看第 12 节“配置 Bonding 用于最大吞吐量”,如果你想配置只有一个对端 设备的 bonding。 11.2 多交换机拓扑下的 HA --------------------------------如果有多个交换机,bonding 和网络的配置戏剧性的发生了变化。在多交换机 拓扑下,在网络可靠性和可用贷款间存在着平衡。 如下是一个简单的网络,配置用于最大化网络可靠性: | | |port3 port3| +-----+----+ +-----+----+ | |port2 ISL port2| | | switch A +--------------------------+ switch B | | | | | +-----+----+ +-----++---+ |port1 port1| | +-------+ | +-------------+ host1 +---------------+ eth0 +-------+ eth1 在该配置中, 两个交换机间存在着一个链路 (交换机间链路, ISL, Inter Switch Link),并存在多个连到外部的端口(每个交换机上的"port3"),从技术角度 看,把它扩充到 3 个或更多交换机没有任何问题。 11.2.1 多交换机拓扑下的 HA 模式选择 --------------------------------在如上例所示的拓扑中,可用于优化可靠性的 bonding 模式只有 active-backup 和 broadcast 模式,其他的模式要求在同一个对端断开的所有链 路能够有特定的行为。 active-backup: 通常是推荐的模式,尤其是如果交换机间存在 ISL 并能一起很 好的工作。如果一个交换机被配置为备份交换机(比如,有更低的处理能力,更

高的费用等等),则可以使用 primary 选项来保证期望的链路在它可用时总是用 它。 broadcast:该模式是一种特定目的的模式,只在特定的需求下才需要。比如, 如果两个交换机没有互联(没有 ISL),而且它们连接的网络是完全独立的,在 这种情况下,如果需要某些特定的单向流量能够都到达这两个独立的网络,那可 能需要 broadcast 模式。 11.2.2 多交换机拓扑下的 HA 链路监控选择 --------------------------------链路监控的选择根本上是依赖于你的交换机, 如果交换机可以在发生异常时可 靠地断开端口,则 MII 或 ARP 监控都是可以的。比如,在上例中,如果"port3" 在远端的链路异常,由于 MII 监控没有直连所以无法监测到,而 ARP 监控如果想 监测到必须要配置为 port3 的远端的目标地址,这样如果没有路由器的支持,要 想监测这一类错误时不可能的。 一般来说,在多交换机拓扑下,ARP 监控可以在监测端到端连接错误(可能由 任何独立部件在传输流量方面的异常导致) 方面提供更高层的可靠性。 此外, ARP 监控应该被配置为多个目标(至少网络里的每个交换机都有一个),这可以保证 不管哪个交换机可用,ARP 监控总是有个合适的目标来查询。 12. 配置 Bonding 用于最大吞吐量(Maximizing Throughput,缩写为 MT) =============================================================== 12.1 单交换机拓扑下的最大吞吐量 --------------------------------在单交换机配置情况下, 最好的最大化吞吐量的方法依赖于应用程序和网络环 境,不同的环境下,不同的负载均衡模式由不同的优点和缺点,如下文所述。 对这些讨论,我们将把拓扑分为两类,根据大部分流量的目的地,我们把拓扑 分为“网关”(gatewayed)和“本地”(local)配置。 在网关型配置下,“交换机”主要时担当一个路由的功能,主要的网络流浪通 过这个路由器到达其他网络,如下图所示:

+----------+ +----------+ | |eth0 port1| | to other networks | Host A +---------------------+ router +-------------------> | +---------------------+ | Hosts B and C are out | |eth1 port2| | here somewhere +----------+ +----------+

路由器可能是一个专用的路由器设备,也可能是其它充当网关的主机。对我们 的讨论,重要的一点是:从 Host A 来的大部分网络流量将会在到达目的地前先 通过路由器到其它的网络。 在路由器网络配置情况下,尽管 Host A 可能和很多其它系统通信,但所有流 量将通过本地网络中的一个对端(路由器)来发送和接收。 要说明的是:配置 bonding 的目的,对于两个系统通过多个物理链接直连,和 网关型配置其实是一样的,在这种情况下,碰巧所有流量都通向“网关”自身, 而不是网关外的其它网络。 在本地型配置情况下,“交换机”主要充当交换的功能,主要的流量通过这个 交换机到达同一个网络上的其它工作站,下图是一个示例: +----------+ +----------+ +--------+ | |eth0 port1| +-------+ Host B | | Host A +------------+ switch |port3 +--------+ | +------------+ | +--------+ | |eth1 port2| +------------------+ Host C | +----------+ +----------+port4 +--------+

同样的, 交换机可以是一个专用的交换机设备, 也可以是其它充当网关的主机。 对我们的讨论,重要的一点是:从 Host A 来的大部分流量将会到达同一本地网 络的其它主机(本例中的 Host B 和 Host C)。 总结一下,在网关型配置下,来自和发自 bond 设备的流量将会到网络上的同 一个对端 MAC 地址(网关本身,比如路由器),而不管它的最终目的地是什么。 在本地型配置下,流量直接来自或发往最终目的地,这样,每个目的地(Host B, Host C)将会通过它们独立的 MAC 地址被指定。 网关型和本地型网络配置的差别很重要, 是因为很多负载均衡模式使用本地网 络源和目的地的 MAC 地址来做处负载均衡的决定。 每种模式的具体行为在下文描 述: 12.1.1 单交换机拓扑下的 MT Bonding 模式选择 ----------------------------------------这个配置是最容易配置和理解的, 尽管你不得不决定哪种 bonding 模式对于你 的需求最适合。每种模式的折衷如下所示: balance-rr: 该模式可以允许某个单一的 TCP/IP 连接在多个接口上分割 (stripe)流量,而且该模式是唯一支持该功能的模式。因此它也是唯一的允许

单个 TCP /IP 流利用多于一个的接口来提高吞吐量的模式。然而这导致一定的开 销,分割通常导致对端系统接收数据时乱序,从而导致 TCP/IP 拥堵控制机制发 生作用,通常通过重发分段。 当然也可以调整 TCP/IP 的拥塞限制,通过修改 sysctl 的 net.ipv4.tcp_reordering 参数即可。通常的缺省值时 3,最大可用值为 127。 对于一个四个接口的 balance-rr 模式的 bond,单个 TCP/IP 流不应期望使用超 过大概 2.3 个接口来提高吞吐量,即使调整过 tcp_reording 的值。 请注意,这里乱序传递只在发送方和接收方都利用多个接口 bond 时发生。考 虑这样的配置,balance-rr 模式 bond 流入单个高容量网络通道(比如,多个 100Mb/sec 以太网通过具备 etherchannel 功能的路由器流入一个千兆以太网), 这时,来自多个 100Mb 设备的流量发往连接着千兆设备的目的地时,将意识不到 数据包的乱序。然而,来自千兆设备发往多个 100Mb 设备的流量,可能看到也可 能看不到流量乱序,这依赖于交换机的均衡策略。很多交换机不支持分割流量的 模式(而是基于 IP 或 MAC 级地址来选择一个端口),对于这些设备,从千兆设 备流向多个 100Mb 设备时只会利用一个接口。 如果你想使用 TCP/IP 以外的协议,比如 UDP,而且你的应用能够容忍乱序投 递,那么这种模式可以为单个流数据包提供线性性能增长,随着加入到 bond 里 的接口数量。 该模式要求交换机有适当的端口配置为“etherchannel”或“trunking”。 active-backup: 对于 active-backup 模式,在这种网络拓扑下使用并没有什么 特别的好处,因为所有的未激活备份设备都作为 primary 连接到同样的对端。这 种情况下,一种负载均衡模式(利用链路监控)将提供同样的网络可靠性,但增 加了可用带宽。此外,active-backup 模式不要求交换机的任何配置,因此如果 当前硬件不支持任何负载均衡模式时,该模式就很有用了。 balance-xor: 该模式将限定流量,以保证到达特定对端的流量总是从同一个接 口上发出。既然目的地是通过 MAC 地址来决定的,因此该模式在“本地”网络配 置(上文曾提及)下可以工作得很好。如果所有流量是通过单个路由器(比如上 文提及的“网关”型网络配置),那该模式就不是最好的选择。 和 balance-rr 一样,交换机端口需要能配置为“etherchannel”或 “trunking”。 broadcast: 和 active-backup 类似,在这种网络拓扑下该模式没有什么特别的 优点。 802.3ad: 对于这种网络拓扑,该模式是一个很好的选择。802.3ad 模式是 IEEE 标准,因此所有实现了 802.3ad 的对端都可以很好的互操作。802.3ad 协议包括 聚合的自动配置,因此只需要很少的对交换机的手动配置(要指出的是,只有某

些设备才能使用 802.3ad)。802.3ad 标准也要求帧按顺序(一定程度上)传递, 因此通常单个连接不会看到包的乱序。802.3ad 也有些缺点:标准要求所有设备 在聚合操作时,要在同样的速率和双工模式,而且,和除了 balance-rr 模式外 的其它 bonding 负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。 此外,linux bonding 的 802.3ad 实现通过对端来分发流量(通过 MAC 地址的 XOR 值),因此在“网关”型配置下,所有外出(Outgoing)流量将使用同一个 设备。进入(Incoming)的流量也可能在同一个设备上终止,这依赖于对端 802.3ad 实现里的均衡策略。在“本地”型配置下,路两将通过 bond 里的设备 进行分发。 最后,802.3ad 模式要求使用 MII 监控,因此,ARP 监控在该模式下不可用。 balance-tlb: balance-tlb 模式通过对端均衡外出(outgoing)流量。既然它 是根据 MAC 地址进行均衡,在“网关”型配置(如上文所述)下,该模式会通过 单个设备来发送所有流量,然而,在“本地”型网络配置下,该模式以相对智能 的方式(不是 balance-xor 或 802.3ad 模式里提及的 XOR 方式)来均衡多个本地 网络对端,因此那些数字不幸的 MAC 地址(比如 XOR 得到同样值)不会聚集到同 一个接口上。 不像 802.3ad,该模式的接口可以有不同的速率,而且不需要特别的交换机配 置。 不利的一面在于, 该模式下所有进入的 (incoming) 流量会到达同一个接口; 该模式要求 slave 接口的网络设备驱动有某种 ethtool 支持; 而且 ARP 监控不可 用。 balance-alb: 该模式有着所有 balance-tlb 有的功能(以及局限性),同时, 它还会均衡从本地网络对端进入的(incoming)流量(如上文的 Bonding 模块选 项一节所述)。 该模式唯一额外的不利在于, 网络设备驱动必须支持在设备启动时改变硬件地 址。 12.1.2 单交换机拓扑下的 MT 链路监控 --------------------------------链路监控的选择很大程度上依赖于你选择的 bond 模式。最先进的负载均衡模 式不支持 ARP 监控,因此就只能使用 MII 监控(而这不能提供如 ARP 监控那样的 高阶端到端确认)。 12.2 多交换机拓扑下的最大吞吐量 --------------------------------可能利用多个交换机来优化吞吐量, 当它们并行地配置为两个或更多系统中间 的一个独立的网络,例如:

+-----------+ | Host A | +-+---+---+-+ | | | +--------+ | +---------+ | | | +------+---+ +-----+----+ +-----+----+ | Switch A | | Switch B | | Switch C | +------+---+ +-----+----+ +-----+----+ | | | +--------+ | +---------+ | | | +-+---+---+-+ | Host B | +-----------+ 在这种配置情况下,交换机间相互隔离。应用这种拓扑的原因可能是,对于一 个有很多主机的独立网络(比如配置为高性能的 Cluster 系统),使用多个小型 交换机可以比使用一个大型交换机要节省费用,比如,在有 24 个主机的网路里, 三个 24 口交换机会比一个 72 口交换机的便宜得多。 如果要访问到这个网络外面,可以使用一个独立的主机,它有一个附加的网路 设备连接到外部网络,这个主机可以充当一个网关的作用。 12.2.1 多交换机拓扑下的 MT Bonding 模式选择 ----------------------------------------实际操作时,典型的应用于这种类型的 bonding 模式时 balance-rr。历史上, 在这种网络配置下, 通常的关于投递数据包乱序的警告可以通过使用某些网络适 配器解决,这些适配器不进行任何包组合(通过使用 NAPI,或者因为设备本身 只在某些数量的包到达后才产生中断)。当使用这个功能时,balance-rr 模式 允许两个主机间的独立连接有效地利用多于一个接口的带宽。 12.1.2 多交换机拓扑下的 MT 链路监控 --------------------------------同样的,在实际操作中,对于这种配置最常使用 MII 监控,由于效率相对于可 用性更优先。ARP 监控在这种拓扑下也可以工作,但由于它的侦测数量随着引入 系统的数量而增长(记得网络里的每个主机都需要配置),因此它相对于 MII 监控的优点就不值一提了。 13. 交换机行为的问题 =================================

13.1 链路建立和故障恢复的延时 --------------------------------某些交换机会出现不合适的行为,关于交换机报告的链路启动和关闭的时间。 首先,当链路启动时,某些交换机可能指示链路已经启动(载波有效),但在 一段时间里并没有把流量从这个接口上通过, 这个延迟一般是由于某种类型的自 协商或路由协议,但也可能在交换机初始化时发生(比如在交换机失败后恢复 时),如果你发现这是个问题,给 bonding 模块的 updelay 选项指定一个合适的 值,用于指定相关接口的延时值。 其次,某些交换机可能一次或多次“反弹”(bounce)链路状态,当链路改变 状态时。这最通常在交换机初始化时发生,同样,一个合适的 updelay 值可以解 决问题。 要注意的是:当 bonding 接口没有激活的链路,驱动会立刻重用第一个链路, 即使指定了 updelay 参数(这时 updelay 被忽略),如果有 slave 接口等待 updelay 超时,第一个进入该状态的接口会立刻被重用,这可以减少网络的断线 时间,如果 updelay 值被设得过大,而且由于这只在没有连接时发生,就算忽略 updelay 也没有任何问题。 其它的关于交换机时间的考虑在于,如果交换机需要很长时间进入备份模式, 在一个链路断开后不要立刻激活备份接口可能更合适。错误恢复可以通过指定 bonding 模块的 downdelay 选项来指定延时。 13.2 Incoming 包重复 --------------------------------有时你会发现在 bonding 设备第一次使用时,或在它休眠了一段时间后,会发 生短暂的重复数据包爆发。这很容易通过"ping"网络中的其它主机来发现,可以 发现 ping 的输出中有重复标记(通常每个 slave 重复一个)。 比如,一个在 active-backup 模式下的 bond,有五个 slave 都连接到同一个 交换机,输出可能如下: # ping -n 10.0.4.2 PING 10.0.4.2 (10.0.4.2) from 10.0.3.10 : 64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 64 bytes from 10.0.4.2: icmp_seq=2 ttl=64

56(84) bytes of data. time=13.7 ms time=13.8 ms (DUP!) time=13.8 ms (DUP!) time=13.8 ms (DUP!) time=13.8 ms (DUP!) time=0.216 ms

64 bytes from 10.0.4.2: icmp_seq=3 ttl=64 time=0.267 ms 64 bytes from 10.0.4.2: icmp_seq=4 ttl=64 time=0.222 ms 这不是由于 bonding 驱动的错误, 这是很多交换机在更新它们的 MAC 转发表的 一个副作用。开始的时候,交换机没有关联包里的 MAC 地址到一个特定的交换机 端口,因此它可能把这个包发送给所有的端口,直到 MAC 转发表被更新。既然 bond 绑定的接口可能占有一个交换机上的多个端口,当交换机(临时地)给所 有端口发送流量时,bond 设备就会收到同一个包的多份复制(每个 slave 设备 一份)。 重复包行为是由交换机决定的,某些交换机有这个问题,而有些没有。如果交 换机有这个问题,你可能清楚 MAC 转发表来发现它(在大多数 Cisco 交换机上, 特权指令“clear mac address-table dynamic”可以清楚)。 14. 硬件相关的考量 ================================= 本节包含一些额外的信息,用于配置特定硬件平台上的 bonding,或者针对特 别的交换机或其它设备的 bonding 配置。 14.1 IBM 刀片服务器(BladeCenter) --------------------------------适用于 JS20 和类似的系统。 在 JS20 刀片服务器上,bonding 驱动只支持 balance-rr,active-backup, balance-tlb 和 balance-alb 模式,这主要是由于刀片服务器内部的网络拓扑所 决定的,如下文所述。 JS20 网络适配器信息 --------------------------------所有的 JS20 系列有两个 Broadcom 千兆以太网卡集成在 planar (IBM 这么称呼 “主板”)上。在刀片的底盘(chassis)上,所有 JS20 刀片的 eth0 端口被硬 连接到#1 I/O 模块,类似的,所有 eth1 端口被连接到#2 I/O 模块。一个附加的 Broadcom daughter 卡可以被安装到 JS20 上来提供两个或更多千兆以太网卡, 这些端口,也就是 eth2/eth3 等等,相应地被连接到#3 和#4 I/O 模块。 每个 I/O 模块可能包含一个交换机后者一个 passthrough 模块 (它可以让端口 直连到外部的交换机)。某些 bonding 模式要求特定的刀片内部网络拓扑以正常 工作,如下文。 更多的刀片相关的网络信息可以在 IBM 红宝书上找到 (www.ibm.com/redbooks):

"IBM eServer BladeCenter Networking Options" "IBM eServer BladeCenter Layer 2-7 Network Switching" 刀片网络配置 --------------------------------因为刀片可以有非常多的方法进行配置, 这里的讨论将主要针对最基本的一些 配置情况。 通常,在 1 和 2 I/O 模块会里使用以太交换模块(Ethernet Switch Modules, ESM),这时,JS20 的 eth0 和 eth1 端口将会连接到不同的内部交换机上(在对 应的 I/O 模块上)。 passthrough 模块(OPM 或 CPM,指 Optical Passthrough Modules 或 Copper Passthrough Modules) 直接连接 I/O 模块到外部的交换机, 通过使用#1 和#2 I/O 模块里的 passthrough 模块,JS20 的 eth0 和 eth1 接口可以被重定向到外部的 网络,并连接到一个外部的交换机上。 依赖于 ESM 和 PM 的混合, 展现给 bonding 的网络可能是一个单交换机拓扑 (所 有都是 PM),或者是一个多交换机拓扑(一个或多个 ESM,0 个或多个 PM),也 可能把 ESM 连在一起,产生一个更像上文“多 Switch 下的高可靠性”一节描述 的例子的配置。 特定模式的需求 --------------------------------balance-rr 模式要求对 bond 中的设备使用 PM, 所有设备都连接到外部交换机 上,那些交换机在对应的端口必须被配置为“etherchannel”或“trunking”, 正如 balance-rr 通常使用时的要求一样。 balance-alb 和 balance-tlb 模式可以和 ESM 或 PM(或者混合)一起工作,唯 一的要求是:对这些模式,所有的网络接口必须能够到达所有通过 bonding 设备 的流量所对应的目的地址(也就是,网络必须会聚到刀片外部的一点)。 active-backup 模式没有特别的需求。 链路监控的问题 --------------------------------当使用 ESM 时,只有 ARP 监控能可靠地监测到到外部交换机的链路断开,这一 点也不出乎意料, 但刀片 cabinet 考试建议“外部的”网络端口是系统的以太端 口,如果这样的话,在这些“外部的”端口和 JS20 系统的设备间应该存在一个 交换机。MII 监控只能监测 ESM 和 JS20 系统间的链路异常。

--------------------------------------------------------------------------------------When an Ethernet Switch Module is in place, only the ARP monitor will reliably detect link loss to an external switch. This is nothing unusual, but examination of the BladeCenter cabinet would suggest that the "external" network ports are the ethernet ports for the system, when it fact there is a switch between these "external" ports and the devices on the JS20 system itself. The MII monitor is only able to detect link failures between the ESM and the JS20 system. --------------------------------------------------------------------------------------当使用 PM 时,MII 监控可以监控到“外部”端口的异常,因为这些“外部” 端口是直连到 JS20 系统的。 其它考虑 --------------------------------Serial Over LAN(SoL,局域网上的串口连接)链路只能通过主以太(eth0) 建立,因此如果 eth0 链路断开将会导致 SoL 连接的断开,它不会被通过其它网 络流量来恢复,因此 SoL 系统超出了 bonding 驱动的控制范围。 在使用 bonding 时,有可能需要关闭交换机(内部 ESM,或外部交换机)的生 成树功能,来避免错误恢复的延迟问题。 15. 常见问题(FAQ) ================================= 1. 它是否是 SMP(对称多处理器)安全? 是的,老的 2.0.xx 版本的 bonding 补丁不是 SMP 安全的,但新的驱动从一开 始就被设计为 SMP 安全的。 2. 它需要哪种类型的网卡? 任何 ethernet 类型的网卡都可以(你甚至可以使用混合的网卡:比如一块 Intel EtherExpress PRO/100 和一块 3com 3c905b)。对大多数模式而言,设备 并不需要有同样的速度。 3. 我可以创建多少个 bonding 设备?

没有限制。 4. 一个 bonding 设备最多有多少个 slave 设备? 这只受限于 Linux 支持的网络接口的数量和/或系统中可安插的网卡数量。 5. 当 slave 连接断开时会发生什么? 如果链路监控被启用,断开的设备将会被禁用,active-backup 模式会切换到 一个备份的链路,其他模式会忽略掉断开的链路。但这个链路依然会被监控以发 现它是否恢复,当链路恢复时它会重新加入 bond(不管哪种工作模式),参见 “高可靠性”一节以及每种工作模式的文档以获得更多信息。 链路监控可以通过 miimon 或者 arp_interval 参数启用 (在上文的模块参数一 节中有描述)。通常,miimon 通过监控底层网络驱动获得的载波状态来判定网 络状态,而 arp 监控(arp_interval)通过判断本地网络里相邻主机的连通性来 判定。 如果链路监控没有启用,bonding 驱动不会监测到链路故障,它会假定链路一 直是可用的,这有可能会导致丢包,而且会导致性能的下降,确切的性能下降依 赖于 bonding 的模式和网络的配置。 6. bonding 可以被用于"高可用性"(High Availability)吗? 是的,参看"高可用性"(High Availability)一节。 7. 它可以和哪种交换机/系统一起工作? 确切的答案依赖于工作的特定模式。 在基本的 balance 模式(balance-rr 或者 balance-xor)下,bonding 可以在 任何支持 etherchannel(也称为 trunking)的系统运行。大多数目前的可管理 交换机都有支持,很多不可管理的交换机也有支持。 高级 balance 模式(balance-tlb 和 balance-alb)没有特别的交换机需求, 但需要设备驱动支持特定功能(在上文的模块参数一节里有描述)。 在 802.3ad 模式,bonding 可以和支持 IEEE 802.3ad 动态连接聚合(Dynamic Link Aggregation)的系统一起工作,大多数可管理交换机和很多不可管理交换 机都支持 802.3ad。 active-backup 模式可以和任何二层(Layer-II)交换机一起工作。 8. bonding 设备从什么地方获取它的 MAC 地址?

如果没有显式的配置(通过 ifconfig 或 ip link),bonding 设备的 MAC 地址 来自它的第一个 slave 设备,这个 MAC 地址会被其后的所有 slave 设备使用,并 一直保留(即使第一个 slave 被移除),除非 bonding 设备断开或者重新配置。 如果你想修改 MAC 地址,可以通过 ifconfig 或者 ip link 命令: # ifconfig bond0 hw ether 00:11:22:33:44:55 # ip link set bond0 address 66:77:88:99:aa:bb MAC 地址也可以这样修改:首先断开设备,然后修改 slave 的 MAC 地址(或者 它们的顺序): # ifconfig bond0 down ; modprobe -r bonding # ifconfig bond0 .... up # ifenslave bond0 eth... 这个方法会自动选用增加的下一个 slave 的地址。 为了恢复你的 slave 的 MAC 地址, 你需要从 bond 上解除该 slave (`ifenslave -d bond0 eth0'),bonding 设备会恢复被从属前的 MAC 地址。 16. 资源和链接 ================================= 最近版本的 bonding 驱动可以在最新的 linux 内核里找到,网站在 http://kernel.org 本文的最新版本可以在最新版的内核源码中找到(名为: Documentation/networking/bonding.txt),或者在 bonding 的 sorceforge 网 站: http://www.sourceforge.net/projects/bonding 关于 bonding 驱动的讨论可以在 bonding-devel 的 mail list 找到, mail list 该 位于 sourceforge.net。如果你有任何问题或疑问,直接给该 mail list 发送邮 件,地址为: bonding-devel@lists.sourceforge.net 订阅或解除订阅的方法可以在下面的地址找到: https://lists.sourceforge.net/lists/listinfo/bonding-devel

Donald Becker 的 Ethernet 驱动和拨号程序可以在这边找到: - http://www.scyld.com/network/ 你也可以在 www.scyld.com 找到很多关于 Ethernet、NWay、MII 等的很多信息。 -- 全文完 -3. 配置 Bonding 设备 ================================= 你可以使用发行包里的网络初始化脚本配置 bonding,或者手动通过 ifenslave 或 sysfs 配置。发行包通常包含一到两个包来支持网络初始化脚本: initscripts 或 sysconfig。最近的版本已经支持 bonding,而稍早的版本不支 持。 我们将会首先描述使用通过发行包配置 bonding 的选项,这将通过 initscripts 和 sysconfig 的 bonding 支持来实现,然后,我们会介绍如果在没 有网络初始化脚本的情况下(较老版本的 initscript 或 sysconfig)如何使用 bonding 功能。 如果你不确定是否你的发行包包含 sysconfig 或者 initscripts,或不确定它 们是否足够新,很简单,可以用下面的方法来知道。 首先,执行命令: $ rpm -qf /sbin/ifup 它将会返回一行文本,以"initscripts"或"sysconfig,"开头,后面跟着一串 数字。这就是提供网络初始化脚本的包。 下一步,为了确定你的安装是否支持 bonding,执行命令: $ grep ifenslave /sbin/ifup 如果返回任何匹配记录, 则表示你的 initscripts 或 sysconfig 支持 bonding。 3.1 使用 Sysconfig 配置 --------------------------------本节只适用于那些发行包里使用 sysconfig 的用户,而且 syconfig 要能够支 持 bonding,比如,SuSE Linux Enterprise Server 9。 SuSE SLES 9 的网络配置系统支持 bonding,但是,在写作时,YaST 系统配置

前端并没有提供任何方法来配置 bonding 设备, 你可以手动的配置 bonding 设备, 如下: 首先,如果这些设备还没有配置,先把它们配置正确。在 SLES 9 上,通过运 行 yast2 sysconfig 配置工具你可以很容易地做到。目标是为每一个 slave 设备 创建一个 ifcfg-id 文件,达到该目标最简单的方法是把设备配置为 DHCP(这只 会创建出 ifcfg-id 文件,下文会提到 DHCP 的一些问题)。每个设备的配置文件 名应该是如下的格式: ifcfg-id-xx:xx:xx:xx:xx:xx 这里"xx"部份会使用设备的物理 MAC 地址里的数字替换掉。 一旦这组 ifcfg-id-xx:xx:xx:xx:xx:xx 文件创建成功,现在就可以为 slave 设备编辑配置文件(通过 MAC 地址找到对应的 slave 设备)。在编辑之前,文件 里应该已经存在一些内容,看起来如下: BOOTPROTO='dhcp' STARTMODE='on' USERCTL='no' UNIQUE='XNzu.WeZGOGF+4wE' _nm_name='bus-pci-0001:61:01.0' 改变 BOOTPROTO 和 STARTMODE: BOOTPROTO='none' STARTMODE='off' 不要改变 UNIQUE 和_nm_name 的值,把其他行移除掉(USERCTL 等)。 一旦 ifcfg-id-xx:xx:xx:xx:xx:xx 文件被修改,现在就可以为 bonding 设备 本身创建配置文件了。 该文件被命名为 ifcfg- bondX, 这里 X 表示创建的 bonding 设备数量,从 0 开始。这一个这样的文件名是 ifcfg-bond0,第二个是 ifcfg-bond1,依此类推。sysconfig 网络配置系统会根据该配置正确地启动多 个 bonding 实例。 ifcfg-bondX 文件的内容看起来如下: BOOTPROTO="static" BROADCAST="10.0.2.255" IPADDR="10.0.2.10" NETMASK="255.255.0.0" NETWORK="10.0.2.0" REMOTE_IPADDR=""

STARTMODE="onboot" BONDING_MASTER="yes" BONDING_MODULE_OPTS="mode=active-backup miimon=100" BONDING_SLAVE0="eth0" BONDING_SLAVE1="bus-pci-0000:06:08.1" 请根据你网络的正确配置替换该示例里的 BROADCAST,IPADDR,NETMASK 和 NETWORK 值。 STARTMODE 参数指定何时设备进入在线状态。可能的取值包括: onboot: 设备在开机时启动。 如果你不确定它的取值, 这可能是你期望的取值。 manual: 设备只在 ifup 被手动调用时启动。bonding 设备可能会被配置为该 模式,如果因为某些原因你不希望他们在开机时启动。 off or ignore: 设备的配置被忽略。 BONDING_MASTER='yes'这一行表示该设备时一个 bonding 主设备。 唯一有效的 取值为"yes"。 BONDING_MODULE_OPTS 的内容由该设备的 bonding 模块的实例提供。在这里可 以指定 bonding 模式、链路侦听等等的选项。不要包含 max_bonds 这个 bonding 参数,如果你有多个 bonding 设备,该参数将会使配置系统混乱。 最后,为每个 slave 提供一个参数 BONDING_SLAVEn="slave device",这里"n" 是一个递增的值,每个 slave 有一个值。"slave device"可以是一个接口名,比 如"eth0",或者一个网络设备的设备标志,接口名可能更容易找到,但是"ethN" 可能在启动的时候有改动,比如在其中一个设备加载失败时;而设备标志(上例 中的 bus-pci-0000:06:08.1)指定一个物理的网络设备,除非该设备的总线位 置改动(比如从一个 PCI 插槽移到另一个),否则该标志永远不会改变。上面的 例子里出于演示目的各使用一种类型,实际的配置只会选择其中对所有 slave 某种进行配置。 当所有配置文件都已经正确地修改或创建后,必须要重启网络来使配置生效。 这可以通过执行下面的命令: # /etc/init.d/network restart 需要注意的是,网络控制脚本(/sbin/ifdown)将会在断开网络的过程中同时 移除 bonding 模块,因此在模块的参数变化时不需要手工移除。 另外,在写作时,YaST/YaST2 不会管理 bonding 设备(它们不会把 bonding 接口显示在它们的网络设备列表里),因此需要手工修改配置文件来改变

bonding 的配置。 关于 ifcfg 文件格式更多的选项和细节可以在 ifcfg 模版文件示例里找到: /etc/sysconfig/network/ifcfg.template 注意这个模版文件里没有把上文提到的不同的 BONDING_设置描述清楚,但描 述了很多其他的选项。 3.1.1 利用 Sysconfig 使用 DHCP --------------------------------在 sysconfig 下,把一个设备配置为 BOOTPROTO='dhcp'将会导致该设备查询 DHCP 来获取它的 IP 地址信息。 在写作时, 这个功能对于 bonding 设备是无效的, 脚本会优先尝试从 DHCP 上获取该设备地址,然后再把 slave 设备加入,而没有 可用的 slave 设备,DHCP 请求也就不能发送到网络上。 3.1.2 利用 Sysconfig 配置多个 Bonds --------------------------------sysconfig 网络初始化系统可以处理多个 bonding 设备。你需要做的只是为每 个 bonding 实例配置正确的 ifcfg-bondX 配置文件(如上文描述)。不要对任何 bonding 实例指定"max_bonds"参数,否则将会使 sysconfig 混淆。如果你需要 多个 bonding 设备有不同的参数,那么你可以创建多个 ifcfg-bondX 文件。 因为 sysconfig 脚本在 ifcfg-bondX 文件中提供了 bonding 模块的选项, 因此 不需要再把它们增加到系统的/etc/modules.conf 或者/etc/modprobe.conf 配 置文件。 3.2 使用 Initscripts 配置 --------------------------------本节针对使用支持 bonding 的 initscripts 的发行包,比如 Red Hat Linux 9 或 Red Hat Enterprise Linux version 3 或 4。在这些系统上,网络初始化脚 本拥有 bonding 的知识,可以配置来控制 bonding 设备。 这些发行包不会自动加载网络适配驱动除非 ethX 驱动配置了 IP 地址。 因为这 个限制,用户需要手工为每一个物理的适配器配置网络脚本,如果你希望把它加 入 bondX 链接。网络脚本文件位于如下的目录: /etc/sysconfig/network-scripts 文件名必须以"ifcfg-eth"开头, 以适配器的物理适配号结尾。 比如, 针对 eth0 的脚本名为/etc/sysconfig/network-scripts/ifcfg-eth0,在文件中输入以下

文本: DEVICE=eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none "DEVICE="这一行对每个 ethX 设备会不一样, 而且必须和文件名相对应, 比如, ifcfg-eth1 必须有一行"DEVICE=eth1"。"MASTER="这一行也依赖于你用于 bonding 的接口名,和其他的网络设备一样,它们一般也从 0 开始,每个设备加 1,第一个 bonding 实例是 bond0,第二个是 bond1,依此类推。 下一步,创建一个 bond 网络脚本,脚本文件名应该是 /etc/sysconfig/network-scripts/ifcfg-bondX,这里 X 表示 bond 的数值。对 于 bond0 文件名是"ifcfg-bond0",对于 bond1 文件名是"ifcfg-bond1",依此类 推。在文件中输入以下内容: DEVICE=bond0 IPADDR=192.168.1.1 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 ONBOOT=yes BOOTPROTO=none USERCTL=no 确保把网络相关行的配置修改掉 (IPADDR, NETMASK, NETWORK 以及 BROADCAST) 以满足你的网络配置情况。 最后,需要编辑/etc/modules.conf(或者是/etc/modprobe.conf,依你的发 行包而定),用以在 bond0 接口启动时以你指定的配置加载 bonding 模块。在 /etc/modules.conf(或者 modprobe.conf)输入下面的行将会加载 bonding 模 块,并且选择它的选项: alias bond0 bonding options bond0 mode=balance-alb miimon=100 把示例里的参数替换为对应于你的配置的正确的选项即可。 最后,以 root 权限运行"/etc/rc.d/init.d/network restart",这将会重启 网络子系统,然后你的 bond 链接就会被启动并运行。

3.2.1 利用 Initscripts 使用 DHCP --------------------------------最近版本的 initscripts(在 Fedora Core 3 和 Red Hat Enterprise Linux 4 中的可以工作)可以支持通过 DHCP 给 bonding 设备获取 IP 信息。 为了配置使用 DHCP,需要把 bonding 照上文描述的那样配置,除了把 "BOOTPROTO=none"这一行替换为"BOOTPROTO=dhcp",并且加上一行 "TYPE=Bonding",需要注意 TYPE 的值是大小写敏感的。 3.2.2 利用 Initscripts 配置多个 Bonds --------------------------------本文写作时,initscripts 包不直接支持多次加载 bonding 驱动,因此这里的 过程与"手动配置多个 Bonds"一节中的描述是一样的。 注意:某些 Red Hat 提供的内核不能在加载时对模块进行重命名(通过"-o bond1"部分),尝试传递到 modprobe 该选项将生成一个"Operation not permitted"错误。这已报告在某些 Fedora Core 内核中,也曾出现在 RHEL 4 上。 在内核出现该问题时,表示我们无法通过不同的参数配置多个 bonds。 3.3 通过 Ifenslave 手动配置 Bonding --------------------------------本节适用于某些发行包,它们的网络初始化脚本(sysconfig 或 initscripts 包)没有 bonding 相关的知识。SuSE Linux Enterprise Server 版本 8 就是这 样的一个发行包。 对于这些系统一般的方法是,把 bonding 模块的参数放进/etc/modules.conf 或者/etc/modprobe.conf(针对不同的安装发行包),然后在系统的全局初始化 脚本里增加 modprobe 和/或 ifenslave 命令。对于 sysconfig,全局初始化脚本 是/etc /init.d/boot.local,而对于 initscripts,它是/etc/rc.d/rc.local。 比如,如果你想要实现一个简单的带两个 e100 设备(比如 eth0 和 eth1)的 bond,而且希望它在重启后还能存在,那么编辑对应的文件 (/etc/init.d/boot.local 或/etc/rc.d/rc.local),在里面加上: modprobe bonding mode=balance-alb miimon=100 modprobe e100 ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up ifenslave bond0 eth0 ifenslave bond0 eth1 把示例里 bonding 模块参数以及 bond0 的网络配置(IP 地址,掩码等)修改

为你系统的正确配置。 不幸的是,这个方法不体动对 bond 设备上的 ifup 和 ifdown 脚本支持,为了 重新加载 bonding 配置,你必须运行初始化脚本,比如: # /etc/init.d/boot.local 或者 # /etc/rc.d/rc.local 针对这种情况, 理想的做法是, 创建一个独立的脚本用于初始化 bonding 配置, 然后在 boot.local 中调用这个独立的脚本,这样就可以不重启整个全局初始化 脚本就打开 bonding。 为了关闭 bonding 设备,你首先需要把 bonding 设备标记为正在关闭,然后移 除对应的设备驱动模块。针对我们上面的例子,你可以这样关闭: # ifconfig bond0 down # rmmod bonding # rmmod e100 同样的,方便起见,最好把这些命令创建在一个独立的脚本里。 3.3.1 手动配置多个 Bonds --------------------------------本节针对那些网络初始化脚本缺少对多 bonds 配置支持的系统, 这里介绍了通 过不同的选项配置多 bonding 设备的方法。 如果你需要配置多 bonding 设备,但所有设备使用同样的选项,你可能希望使 用"max_bonds"模块参数,就像上文描述的一样。 为了创建多个不同选项的 bonding 设备,需要多次加载 bonding 驱动。要说明 的是,当前版本的 sysconfig 网络初始化脚本自动处理这些,如果你的发行包这 些脚本,你不需要额外的操作,参看上文的"配置 Bonding 驱动",如果你不确定 你的网络初始化脚本是否支持。 为了加载模块的多个实例,需要为每个实例指定一个不同的名字(模块加载系 统需要每个加载的模块有唯一的名字,即便它们是同一个模块的不同实例)。这 可以通过在/etc/modprobe.conf 中指定多个 bonding 选项,比如: alias bond0 bonding options bond0 -o bond0 mode=balance-rr miimon=100

alias bond1 bonding options bond1 -o bond1 mode=balance-alb miimon=50 这将会两次加载 bonding 模块。 第一个实例命名为"bond0", 将会以 balance-rr 模式创建 bond0 设备, 同时使用参数 miimon 为 100。 第二个实例命名为"bond1", 将会以 balance-alb 模式创建 bond1 设备,同时使用参数 miimon 为 50。 在某些情况下(通常是较老的发行包),上述参数不能工作,第二个 bonding 实例不会用到它的选项。在这种情况下,第二个选项可以用如下的选项替换: install bond1 /sbin/modprobe --ignore-install bonding -o bond1 \ mode=balance-alb miimon=50 这些选项可以重复任意次,以指定任意多个 bonding 实例,只需要为每个依次 的实例指定一个唯一的名字,以替换 bond1 即可。 3.4 通过 Sysfs 手工配置 Bonding --------------------------------从版本 3.0 开始,Channel Bonding 可以通过 sysfs 接口进行配置。sysfs 接 口允许在不卸载模块的情况下动态配置所有 bonds,它也可以在运行时增加和移 处 bonds。Ifenslave 已经不再需要了,尽管它还被支持。 使用 sysfs 接口允许你在不重新加载模块的情况下, 对多个 bonds 使用不同的 配置;也允许你使用多个不同配置的 bonds,在 bonding 被编译进内核的时候。 你必须 mount 了 sysfs 文件系统,以配置 bonding。本文里的示例假定你标准 的 sysfs 的 mount 点,即/sys,如果你的 sysfs 文件系统被 mount 在其他地方, 你需要对应地调整示例里的路径。 创建和销毁 Bonds --------------------------------增加一个新的 bond(foo): # echo +foo > /sys/class/net/bonding_masters 移除一个已存在的 bond(bar): # echo -bar > /sys/class/net/bonding_masters 显示所有存在的 bonds: # cat /sys/class/net/bonding_masters 注意:由于 sysfs 文件的 4K 大小限制,如果你好多 bonds,这个列表可能被截 断。这在通常的情况下并不常见。

增加和移除 Slaves --------------------------------通过使用文件/sys/class/net/<bond>/bonding/slaves, 我们可以把网络接口 从属于某个 bond,这个文件的语义和 bonding_masters 文件是完全相同的。 把 eth0 加入 bond(bond0): # ifconfig bond0 up # echo +eth0 > /sys/class/net/bond0/bonding/slaves 从 bond(bond0)里移除 eth0: # echo -eth0 > /sys/class/net/bond0/bonding/slaves 注意:bond 必须在 slave 加入之前启动,所有 slave 必须在 bond 接口断开前 移除。 当一个网络接口加入某个 bond,sysfs 文件系统里会在两者间创建符号链接, 在这时,你可以看到/sys/class/net/bond0 /slave_eth0 指向 /sys/class/net/eth0,而/sys/class/net/eth0/master 指向/sys/class /net/bond0。 这意味着你可以通过查看 master 的符号链接很快地知道一个接口有没有被加 入。这样的话: # echo -eth0 > /sys/class/net/eth0/master/bonding/slaves 将会把 eth0 正确地从它所从属的 bond 上移除, 而不需要指定 bond 接口的名字。 改变 Bond 的配置 --------------------------------每个 bond 可以独立地配置,通过操纵位于/sys/class/net/<bond name>/bonding 下的文件。 这些文件的名字直接对应于本文里描述的命令行参数,除了 arp_ip_target 是个例外,它们总是接受同样的值。你可以直接把对应文件 cat 出来看当前的设 置。 这里会给出一些例子,对于每个参数特定的使用指南,请参考本文里对应的章 节。 把 bond0 配置为 balance-alb 模式: # ifconfig bond0 down # echo 6 > /sys/class/net/bond0/bonding/mode - 或者 # echo balance-alb > /sys/class/net/bond0/bonding/mode 注意:在修改模式前,请先断开 bond 接口。

在 bond0 上启用 MII 监控,使用 1 秒的时间间隔: # echo 1000 > /sys/class/net/bond0/bonding/miimon 注意:如果 ARP 监控被启用,当 MII 监控启用时它会被禁止,反之亦然。 增加 ARP 目的地址: # echo +192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target # echo +192.168.0.101 > /sys/class/net/bond0/bonding/arp_ip_target 注意:最多可以指定十个目的地址。 移除 ARP 目的地址: # echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target 配置示例 --------------------我们从和 3.3 节相同的例子开始,但是使用 sysfs,而不是 ifenslave。 为了生成一个简单的带两个 e100 设备(假定为 eth0 和 eth1)的 bond,而且 希望它在重启后依然存在, 你可以编辑对应的文件 (/etc/init.d/boot.local or /etc/rc.d/rc.local),加入如下内容: modprobe bonding modprobe e100 echo balance-alb > /sys/class/net/bond0/bonding/mode ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up echo 100 > /sys/class/net/bond0/bonding/miimon echo +eth0 > /sys/class/net/bond0/bonding/slaves echo +eth1 > /sys/class/net/bond0/bonding/slaves 下面增加第二个 bond,带有两个 e1000 接口,工作于 active-backup 模式, 使用 ARP 监控,把如下内容加入到你的初始化脚本里: modprobe e1000 echo +bond1 > /sys/class/net/bonding_masters echo active-backup > /sys/class/net/bond1/bonding/mode ifconfig bond1 192.168.2.1 netmask 255.255.255.0 up echo +192.168.2.100 /sys/class/net/bond1/bonding/arp_ip_target echo 2000 > /sys/class/net/bond1/bonding/arp_interval echo +eth2 > /sys/class/net/bond1/bonding/slaves echo +eth3 > /sys/class/net/bond1/bonding/slaves
从开始翻译到现在已经过去一年多时间了,期间也有好久几乎没有用过 bonding 了,有很长 一段时间已经没有打算把它继续下去的决心了,不过最后终于还是决定有始有终,虽然”始 “和”终“隔了很久~~~

这里先发个初稿,很多地方还没有 review,问题应该也有很多,估计重看一遍会发现很多地 方翻译得辞不达意,各位先将就着看了 如果各位同好发现有些内容翻译得部队,或有些翻译内容翻译不清,或有更好的表达,请不 吝留下宝贵修改意见,或直接给偶发信(zoufeiyy@163.com) ,在此谢过各位大大~~~ ====================================================================== ============ Linux Ethernet Bonding Driver HOWTO 更新时间:2006 年 4 月 24 日 发布者:Tomas Davis <tadavis at lbl.gov> 修正,增加高可靠性:2000/10/03-15: - Willy Tarreau <willy at meta-x.org> - Constantine Gavrilov <const-g at xpert.com> - Chad N. Tindel <ctindel at ieee dot org> - Janice Girouard <girouard at us dot ibm dot com> - Jay Vosburgh <fubar at us dot ibm dot com> Jay Vosburgh 于 2005 年 2 月重新组织并更新文档 增加 Sysfs 相关内容:2006/04/24 - Mitch Williams <mitch.a.williams at intel.com> 简介 ============================= Linux bonding 驱动提供了一种方法,用以把多个网络接口(network interface)组合成一个 逻辑的"bonded"接口。Bonded 接口的工作方式取决于驱动的模式:不同的模式提供了热备 份或负载均衡等不同的服务。此外,驱动还会监控链路的可用性。 Bonding 驱动最早来自 Donald Becker 针对 Linux 2.0 内核的 beowulf 补丁。现在已经有了 很多的变化,最早的来自 beowulf 网站的工具已经不能和现在的驱动一起使用。 如果你希望得到最新的版本,或者最新的用户工具,或者寻求相关的帮助,请留意本文末 尾的链接。 目录 ============================ 1. Bonding 驱动简介

2. Bonding 驱动选项 3. 配置 Bonding 驱动 3.1 通过 Sysconfig 配置 Bonding 3.1.1 通过 Sysconfig 使用 DHCP 3.1.2 通过 Sysconfig 配置多个 Bond 3.2 通过 Initscripts 配置 Bonding 3.2.1 通过 Initscripts 使用 DHCP 3.2.2 通过 Initscripts 配置多个 Bond 3.3 通过 Ifenslave 手工配置 Bonding 3.3.1 手工配置多个 Bond 3.4 通过 Sysfs 手工配置 Bonding 4. 查询 Bonding 配置 4.1 Bonding 配置 4.2 网络配置 5. Switch(交换机)配置 6. 802.1q VLAN 7.链路监控 7.1 ARP 监控 7.2 配置多个 ARP 监控目标 7.3 MII 监控 8. 可能的问题 8.1 Routing(路由) 8.2 Ethernet 设备重命名 8.3 网速变慢或 Mii 监控无法发现出错的链接 9. SNMP 代理 10. Promiscuous(混杂)模式 11. 配置 Bonding 用于高可靠性 11.1 单一 Switch 下的高可靠性 11.2 多 Switch 下的高可靠性 11.2.1 多 Switch 下的 Bonding 模式选择 11.2.1 多 Switch 下的链路监控 12. 配置 Bonding 用于大吞吐量 12.1 单一 Switch 下的大吞吐量网络配置 12.1.1 单一 Switch 下的 Bonding 模式选择

12.1.2 单一 Switch 下的链路监控 12.2 多 Switch 下的大吞吐量网络配置 12.2.1 多 Switch 下的 Bonding 模式选择 12.2.1 多 Switch 下的链路监控 13. Switch 的问题 13.1 链路建立和 Failover 延时 13.2 Incoming 包重复 14. 硬件相关 14.1 IBM 刀片服务器 15. FAQ 16. 相关资源和链接

1. Bonding 驱动简介 ================================= 大多数目前发布的 Linux 内核都以模块(module)方式带了 bonding 驱动,ifenslave 工具 也都已经安装好。如果你的 Linux 没有,或者你确实需要自己来编译 bonding(比如要配置 或安装自己的 Linux 内核) ,请参考如下步骤: 1.1 配置并编译支持 bonding 的内核 --------------------------------当 前 版 本 的 bonding 驱 动 位 于 Linux 内 核 源 码 ( 从 http://kernel.org 下 载 ) 的 drivers/net/bonding 子目录中。你可以在 kerenl.org 下载到最新版本的内核源码。 通过"make menuconfig"(或"make xconfig" "make config")配置内核,在“Network device support”下选择“Bonding driver support”。建议你将 bonding 驱动配置为模块(module)方式, 因为如果你要给驱动传递参数或者希望配置多个 bonding 驱动,只有通过模块方式。 编译并安装新的内核和编译出的模块,然后参照下面的步骤安装 ifenslave。 1.2 安装 ifenslave 控制工具 -------------------------------ifenslave 控制工具也在内核源码中:Documentation/networking/ifenslave.c。一般建议最好 使用和内核匹配的 ifenslave 同一份源码中或同一个发布中) 然而较老的内核中的 ifenslave ( , 也应该能够正常工作(较新的一些功能将不能使用) ,不过更新的内核中的 ifenslave 将可能 不能工作。 参照如下步骤以安装 ifenslave:

# gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave # cp ifenslave /sbin/ifenslave 如果你的内核源码不在“/usr/src/linux”下,请将上面的“/usr/src/linux/include”替换成相应的 正确目录。 如果希望备份现有的/sbin/ifenslave,或者只是试用一下,你可以把 ifenslave 文件名加上内 核版本信息(比如,/sbin/ifenslave-2.6.10) 重要提示: 如果你忽略了"-I"参数或者指定了一个不正确的目录,你可能会得到一个和内核不兼容的 ifenslave。有些发布(比如 Red Hat 7.1 之前的版本)没有/usr/include/linux 符号链接指向当 前内核的 include 目录。 另一个重要提示: 如果你打算使用 sysfs 来配置 bonding,你不需要使用 ifenslave。 2. Bonding 驱动选项 ================================= Bonding 驱动的选项是通过在加载时指定参数来设定的。可以通过 insmod 或 modprobe 命 令的命令行参数来指定,但通常在/etc /modules.conf 或/etc/modprobe.conf 配置文件中指定, 或其他的配置文件中(下一节将会提及几个具体的细节) 下面列出可用的 bonding 驱动参数。如果参数没有指定,驱动会使用缺省参数。刚开始配 置 bond 的时候,建议在一个终端窗口中运行"tail -f /var/log/messages"来观察 bonding 驱动的 错误信息【译注:/var/log/messages 一般会打印内核中的调试信息】 。 有些参数必须要正确的设定,比如 miimon、arp_interval 和 arp_ip_target,否则在链接故障 时会导致严重的网络性能退化。很少的设备不支持 miimon,因此没有任何理由不使用它们。 有些选项不仅支持文本值的设定,出于兼容性的考虑,也支持数值的设定,比如, "mode=802.3ad"和"mode=4"效果是一样的。 具体的参数列表: arp_interval 指定 ARP 链路监控频率,单位是毫秒(ms)。如果 APR 监控工作于以太兼容模式(模式 0 和模式 2) 需要把 switch(交换机)配置为在所有链路上均匀的分发网络包。 下, 如果 switch(交 换机)被配置为以 XOR 方式分发网络包,所有来自 ARP 目标的应答将会被同一个链路上的 其他设备收到,这将会导致其他设备的失败。ARP 监控不应该和 miimon 同时使用。设定为

0 将禁止 ARP 监控。缺省值为 0。 arp_ip_target 指定一组 IP 地址用于 ARP 监控的目标,它只在 arp_interval > 0 时有效。这些 IP 地址是 ARP 请 求 发 送 的 目 标 , 用 于 判 定 到 目 标 地 址 的 链 路 是 否 工 作 正 常 。 该 设 定 值 为 ddd.ddd.ddd.ddd 格式。多个 IP 地址通过逗号分隔。至少指定一个 IP 地址。最多可以指定 16 个 IP 地址。缺省值是没有 IP 地址。 downdelay 指定一个时间,用于在发现链路故障后,等待一段时间然后禁止一个 slave,单位是毫秒 (ms)。该选项只对 miimon 监控有效。downdelay 值应该是 miimon 值的整数倍,否则它将会 被取整到最接近的整数倍。缺省值为 0。 lacp_rate 指定在 802.3ad 模式下,我们希望的链接对端传输 LACPDU 包的速率。可能的选项: slow 或者 0 请求对端每 30s 传输 LACPDU fast 或者 1 请求对端每 1s 传输 LACPDU 缺省值是 slow max_bonds 为 bonding 驱动指定创建 bonding 设备的数量。比如,如果 max_bonds 为 3,而且 bonding 驱动还没有加载,那么 bond0,bond1,bond2 将会被创建。缺省值为 1。 miimon 指定 MII 链路监控频率,单位是毫秒(ms)。这将决定驱动检查每个 slave 链路状态频率。0 表示禁止 MII 链路监控。100 可以作为一个很好的初始参考值。下面的 use_carrier 选项将会 影响如果检测链路状态。更多的信息可以参考“高可靠性”章节。缺省值为 0。 mode 指定 bonding 的策略。缺省是 balance-rr (round robin,循环赛) 。可选的 mode 包括: balance-rr 或者 0

Round-robin(循环赛)策略:按顺序传输数据包,从第一个可用的 slave 到最后一个可用 的 slave。该模式提供了负载均衡和容错机制。 active-backup 或者 1 Active-backup(激活-备份)策略:只有一个 slave 是激活的(active)。其他的 slave 只有在 当前激活的 slave 故障后才会变为激活的(active)。 从外面看来, bond 的 MAC 地址是唯一的, 以避免 switch(交换机)发生混乱。 在 bonding 2.6.2 和以后的版本中,如果在 active-backup 模式下出现 failover【译注:指一 个 slave 发生故障,另一个 slave 变为激活的设备】 ,bonding 将会在新的 slave 上发出一个或 多个 ARP 请求, 其中一个 ARP 请求针对 bonding master 接口及它上面配置的每个 VLAN 接 口,从而保证该接口至少配置了一个 IP 地址。针对 VLAN 接口的 ARP 请求将会被打上相 应的 VLAN id。 ---------------------------------------------------------------------------------------In bonding version 2.6.2 or later, when a failover occurs in active-backup mode, bonding will issue one or more gratuitous ARPs on the newly active slave. One gratuitous ARP is issued for the bonding master interface and each VLAN interfaces configured above it, provided that the interface has at least one IP address configured. Gratuitous ARPs issued for VLAN interfaces are tagged with the appropriate VLAN id. ---------------------------------------------------------------------------------------该模式提供了容错机制。下面的 primary 选项将会影响该工作模式的行为。 balance-xor 或者 2 XOR 策略: 基于指定的传输 HASH 策略传输数据包。 缺省的策略是: MAC 地址 XOR (源 目标 MAC 地址) % slave 数量。其他的传输策略可以通过 xmit_hash_policy 选项指定,下文 将会对之介绍。 该模式提供了负载均衡和容错机制。 broadcast 或者 3 Broadcase(广播)策略:在每个 slave 接口上传输每个数据包。该模式提供了容错机制。 802.3ad 或者 4 IEEE 802.3ad Dynamic link aggregation(动态链接聚合) 。创建一个聚合组,它们共享同样 的速率和双工设定。根据 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。 大多数 switch(交换机)需要经过特定配置才能支持 802.3ad 模式。 balance-tlb 或者 5 自适应的传输负载均衡:不需要任何特别的 switch(交换机)支持的通道 bonding。在每个 slave 上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的 slave 出故障 了,另一个 slave 接管失败的 slave 的 MAC 地址。 必要条件: ethtool 支持获取每个 slave 的速率。 balance-alb 或者 6 自适应均衡负载:该模式包含了 balance-tlb 模式,同时加上针对 IPV4 流量的接收负载均 衡(receive load balance, rlb),而且不需要任何 switch(交换机)的支持。接收负载均衡是通过 ARP 协商实现的。bonding 驱动截获本机发送的 ARP 应答,并把源硬件地址改写为 bond 中 某个 slave 的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。 来自服务器端的接收流量也会被均衡。当本机发送 ARP 请求时,bonding 驱动把对端的 IP 信息从 ARP 包中复制并保存下来。当 ARP 应答从对端到达时,bonding 驱动把它的硬件 地址提取出来,并发起一个 ARP 应答给 bond 中的某个 slave。使用 ARP 协商进行负载均衡 的一个问题是:每次广播 ARP 请求时都会使用 bond 的硬件地址,因此对端学习到这个硬 件地址后, 接收流量将会全部刘翔当前的 slave。 这个问题通过给所有的对端发送更新 (ARP 应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的 slave 加入到 bond 中时,或者某个未激活的 slave 重新激活时,接收流量也要重新分布。接收的 负载被顺序地分布(round robin)在 bond 中最高速的 slave 上。 当某个链路被重新接上,或者一个新的 slave 加入到 bond 中,接收流量在所有当前激活 的 slave 中全部重新分配,通过使用指定的 MAC 地址给每个 client 发起 ARP 应答。下面介 绍的 updelay 参数必须被设置为某个大于等于 switch(交换机)转发延时的值,从而保证发往 对端的 ARP 应答不会被 switch(交换机)阻截。

必要条件: 1. ethtool 支持获取每个 slave 的速率; 2. 底层驱动支持设置某个设备的硬件地址,从而使得总是有个 slave(curr_active_slave)使 用 bond 的硬件地址,同时保证每个 bond 中的 slave 都有一个唯一的硬件地址。如果 curr_active_slave 出故障,它的硬件地址将会被新选出来的 curr_active_slave 接管。 primary 指定哪个 slave 成为主设备(primary device) ,取值为字符串,如 eth0,eth1 等。只要指定 的设备可用,它将一直是激活的 slave。只有在主设备(primary device)断线时才会切换设 备。这在希望某个 slave 设备优先使用的情形下很有用,比如,某个 slave 设备有更高的吞 吐率。 primary 选项只对 active-backup 模式有效。 updelay 指定当发现一个链路恢复时,在激活该链路之前的等待时间,以毫秒计算。该选项只对 miimon 链路侦听有效。updelay 应该是 miimon 值的整数倍,如果不是,它将会被向下取整 到最近的整数。缺省值为 0。 use_carrier 指定 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。 xmit_hash_policy 在 balance-xor 和 802.3ad 模式下选择不同的 hash 模式, 以用于 slave 选举。 可能的取值有: layer2

使用硬件 MAC 地址的 XOR 来生成 hash。公式为: (源 MAC 地址 XOR 目的 MAC 地址)% slave 数目 该算法会将某个网络对(network peer)上所有的流量全部分配到同一个 slave 上。 layer3+4 该策略在可能的时候使用上层协议的信息来生成 hash。这将允许特定网络对(network peer)的流量分摊到多个 slave 上,尽管同一个连接(connection)不会分摊到多个 slave 上。 针对未分片的 TCP 和 UDP 包的计算公式为: ((源端口 XOR 目的端口) XOR ((源 IP XOR 目的 IP) AND 0xFFFF) % slave 数目 对于已分片 TCP 或 UDP 包,以及其他的 IP 包,源端口和目的端口的信息被忽略了;对 于非 IP 流量,采用和 layer2 一样的 hash 策略。 该策略期望模仿某些交换机的行为,比如带 PFC2 的 Cisco 交换机,以及某些 Foundry 和 IBM 的产品。 该算法不完全适应 802.3ad,一个单一的 TCP 或 UDP 会话同时包含有分片和未分片的包 将会导致包在两个接口上传递,这将会导致投递乱序。大多数流量不会满足这种条件,正如 TCP 很少分片,而大多数 UDP 流量不会在长期的会话中存在。其他的 802.3ad 实现有可能 不能容忍这样的不适应性。 缺省设置是 layer2。该选项在 bonding 2.6.3 加入,在早期版本中,该参数不存在,只只是 layer2 策略。


相关文章:
详解Suse双网卡绑定步骤
详解Suse双网卡绑定步骤_IT/计算机_专业资料。详解Suse双网卡绑定步1, 比较简单的方法 , 将两块 Fabric 网卡绑定为 bond1 # vi /etc/sysconfig/network/ifcfg-...
详解Suse双网卡绑定步骤
详解Suse双网卡绑定步骤_信息与通信_工程科技_专业资料。bonding ? suse-9-Suse Linux 下双网卡 bonding Suse Linux 下双网卡 bonding Linux 双网卡绑定实现就是...
详解双网卡绑定
详解双网卡绑定_计算机硬件及网络_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 详解双网卡绑定_计算机硬件及网络_IT/计算机_专业资料。Linux 下的双...
SUSE Linux双网卡绑定设置详解
下面详解一下 suse linux 下的双网卡绑定: 步骤 1:进入到网络配置目录 # cd /etc/sysconfig/network 步骤 2:创建 ifcfg-bond0 配置文件 Vi ifcfg-bond0 ...
Windows网卡服务器双网卡绑定
系统弹出提示框,提示网卡绑定过程中网络会中断几分钟。 ? 单击“Yes”,完成双网卡绑定。 双网卡绑定成功后,系统显示“Broadcom Advanced Control Suite 4”窗口。 ...
服务器双网卡绑定
测试环境: 测试机:R525 G3,Intel 双千兆网卡 OS:windows 2003 server 企业版 32 位 终端:联想笔记本(用于测试服务器双网卡绑定效果) 步骤: 1、打开设备管理器,...
Linux操作系统下双网卡绑定实现步骤
Linux 操作系统下双网卡绑定实现步骤内容: 为了提高系统的可用性和业务持续性, 对系统进行双网卡绑定, 且使用主备切换模式, 当出现主网卡故障的情况下,网络连接...
suse双网卡绑定技术
详解Suse双网卡绑定步骤 4页 1财富值 linux多网卡绑定与交换机链... 55页 5财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此...
IBM3650windows双网卡绑定(实际操作版)
点击下一步 以上为安装步骤,到此结束安装。 2.点击“开始”选择“Broadcom 软件”。 选择“Team Management”标签。在需要进行绑定网卡(任意一块)上右键, 选择...
双网卡绑定配置
双网卡绑定配置_IT/计算机_专业资料。双网卡绑定配置集成Broadcom网卡的服务器双网卡绑定配置 集成Broadcom网卡的服务器双网卡绑定配置 Broadcom windows配置步骤: windows...
更多相关标签:
suse双网卡绑定 | suse11双网卡绑定 | suse linux双网卡绑定 | suse 虚拟机双网卡 | linux 双网卡绑定 | 双网卡绑定 | 服务器双网卡绑定 | windows双网卡绑定 |