Redhat中允许管理员绑定多个网卡到一个通道,以实现负载均衡或者容错,也就是我们平时说的网卡绑定(Channel Bonding Interfaces),linux在kenrnel2.4.12以后就自带了bonding的驱动。也可以通过以下命令确定内核是否支持 bonding:
#cat /boot/config-kernel-version |grep -i bonding
CONFIG_BONDING=m
返回 CONFIG_BONDING=m表示支持,否则需要编译内核使它支持bonding。
以redhat5.1为例,假设我们现在有eth0、eth1两块网卡,为了实现负载均衡或失效保护需要绑定这两块网卡。
第一步:创建一个ifcfg-bondX
# touch /etc/sysconfig/network-scripts/ifcfg-bond0
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BONDING_OPTS="mode=1 miimon=500"
BOOTPROTO=none
ONBOOT=yes
BROADCAST=192.168.0.255
IPADDR=192.168.0.180
NETMASK=255.255.255.0
NETWORK=192.168.0.0
USERCTL=no
编辑ifcfg-bond0如上,其中:
DEVICE=bond0 指定设备名称为bond0
BONDING_OPTS="mode=1 miimon=500" 其中mode有多种模式实现不同的功能,其中1、5、6不需要交换机特别配置,0、2、3、4需要交换机做相应配置才能完全实现相应的功能,我们用的最多的是0、1两种模式:
0、balancerr or 0:可实现负载均衡功能,两个网卡同时工作,当其中一个网卡宕掉时另一个会继续工作
1、active-backup or 1:主备模式。只有一个网卡工作,当其中一个出问题时另一网卡才接管开始工作。
其他的几个模式详细解释见转载的 HOWTO Do Linux Ethernet Bonding Drive r
第二步:修改/etc/sysconfig/ifcfg-ethX
这里说的ethX指要加入绑定网卡的名称,本例中是eth0、eth1。
# vi /etc/sysconfig/ifcfg-eth0
DEVICE=eth0 BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no
# vi /etc/sysconfig/ifcfg-eth1
DEVICE=eth1BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no
第三步:配置/etc/modprobe.conf,添加alias bond0 bonding
# vi /etc/modprobe.conf
alias eth0 pcnet32
alias eth1 pcnet32
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
alias bond0 bonding
第四步:重启网络服务
#service network restart
通过以上四步配置,bond0应该能够生效并正常工作了。查看端口是否正常可以用ifconfig命令查看,也可以通过查看/proc/net/bonding/bond0,查看当前是用什么mode,如果是主备的话,当前是哪个网卡工作。
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 500
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:01:4f:77
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:01:4f:8b