HACK#26 bonding驱动程序
本节介绍使用bonding驱动程序将多个物理网络设备绑定方法。
bonding是将多个物理网络设备绑定的驱动程序。绑定bonding说法来自于黏合剂bond。绑定的运行根据模式不同而有所差异。Linux的bonding有7种模式,本节将介绍的是普遍较常使用的激活备份模式。
本节中所举的示例是将物理网络设备eth0和eth1绑定,构成bonding设备bond0的环境(见图4-2)。
图 4-2 本节的bonding构成(激活备份模式)
构成bond0的eth0/eth1称为从设备(slave)。bond0称为主设备(master)。激活备份模式时,激活的slave eth0进行通信。eth1为备份,处于待命状态。
使用方法
Linux的bonding有7种模式。下面先简单地介绍各种模式。模式的名称就是直接指定到模块参数的字符串。也可以使用()中的数字来指定模式。
balance-rr(0)
通过轮询(round robin)来分散负载。发送数据时,第一个数据从eth0发送,第二个数据从eth1发送。依次由eth0/eth1发送。
active-backup(1)
多个从设备中的一个运行。这个从设备称为激活的从设备。如果激活从设备出现故障,断开链接(link down)时,则切换为其他从设备。这个模式称为激活备份模式。
balance-xor(2)
通过MAC地址的异或结果(XOR)来决定从设备。从设备由散列队列(hashlist)进行管理,根据使用某计算公式求得的散列值来决定从设备。计算出散列值的方法称为散列策略(hash policy)。balance-xor模式的计算公式为((发送方MAC地址xor接收方MAC地址)/从设备数)。将得到的余数作为散列值。由于使用Ether头的MAC地址,因此将这个策略称为layer2。可以在xmit_hash_policy模块选项中更改散列策略。除layer2以外,还有layer2+3和layer3+4。layer2+3是通过MAC地址和IP地址的组合来计算出散列值。layer3+4是通过MAC地址、IP地址和TCP、UDP的端口号的组合来算出散列值。在这个模式下,只要上述条件不改变,就会使用相同从设备。
broadcast(4)
已连接的所有从设备发送相同数据。即使某个从设备发送失败也不会中断,而是从其他从设备发送数据。
此外还有802.3ad(4)、balance-tlb(5)、balance-alb(6)。详细情况请看参考文献。默认为轮询。使用激活备份模式时需要按下列方法将模块安装到内核中。
modprobe bonding mode=active-backup
或者执行下列命令。
modprobe bonding mode=1
一般在准备其他模块参数时同时准备接口的配置文件。这样在启动时bonding接口就会启用。RHEL6中不是在modprobe.conf中而是在/etc/modprobe.d/*.conf中设置bonding模块的别名(alias)。这里的文件名设置为bond.conf。
cat/etc/modprobe.d/bond.conf
alias bond0 bonding
alias bond1 bonding
接口的配置文件如下。
cat/etc/sysconfg/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT=no
HWADDR=AA:AA:AA:AA:AA:AA
TYPE=Ethernet
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
cat/etc/sysconfg/network-scripts/ifcfg-eth1
DEVICE="eth1"
NM_CONTROLLED="no"
ONBOOT=no
HWADDR=BB:BB:BB:BB:BB:BB
TYPE=Ethernet
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
cat/etc/sysconfg/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
BONDING_OPTS="mode=1 miimon=100 primary=eth0"
上例是在ifcfg-bond0中记载的BONDING_OPT。这是用来设置模块选项的。通过写入ifcfg-bond0文件,对每个bonding接口设置选项。因此在RHEL6并不推荐在/etc/modprobe.d/bond.conf下使用option来记载bonding模块的选项。在配置文件里记载后,就可以使用ifup bond0来启动bonding设备。成为从设备的接口可以使用ifconfig命令确认。
ifconfg eth0
eth0 Link encap:Ethernet HWaddr 00:1B:21:0F:91:8F
UP BROADCAST SLAVE MULTICAST MTU:1500 Metric:1有SLAVE
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0(0.0 b)TX bytes:0(0.0 b)
Interrupt:16 Memory:efbc0000-efbe0000
bonding接口的设置内容可以在下列proc文件系统中确认。
cat/proc/net/bonding/bond0
Ethernet Channel Bonding Driver:v3.7.0(June 2,2010)
Bonding Mode:fault-tolerance(active-backup)
Primary Slave:eth2(primary_reselect always)
Currently Active Slave:eth0激活slave
MII Status:down
MII Polling Interval(ms):100
Up Delay(ms):0
Down Delay(ms):0
Slave Interface:eth0
MII Status:down
Speed:100 Mbps
Duplex:full
Link Failure Count:0
Permanent HW addr:aa:aa:aa:aa:aa:aa原始的MAC地址
Slave queue ID:0
Slave Interface:eth1
MII Status:down
Speed:100 Mbps
Duplex:full
Link Failure Count:0
Permanent HW addr:bb:bb:bb:bb:bb:bb
Slave queue ID:0