如何实现在RHEL下将多个网卡bonding为一个单一通道?
April 9th, 2008Linux Channel Bonding可以支持把多个网络适配器集合在一起, 当作一个网络适配器来使用。在 Linux 下,网卡的高可用性是通过 MII 或者 ETHTOOL 的状态监测来实现的,所以,需要检查系统中的网络适配器是否支持 MII 或者ETHTOOL 的连状态监测。可以用命令 “ethtool eth0″ 来检查,如果显示的 “Link detected:” 信息与实现的连接状态一致,就没有问题。如果系统中的网络适配器不支持 MII 或者 ETHTOOL 状态监测,当连接失效时,系统就不能检测到,同时,在 bonding 驱动加载时,会记录一条不支持 MII 和 ETHTOOL 的警告信息。
环境: Red Hat Enterprise Linux 4 Update1
解决方法:
RHEL支持在内核级实现将多个物理网卡帮定为一个逻辑bonding设备,通过把多个物理网卡帮定为一个逻辑设备,可以实现增加带宽吞吐量,提供冗余。
为了创建一个bonding设备,在/etc/sysconfig/network-scripts/下创建文件ifcfg-bond<N>,N是一个数字,例如0。
该文件内容对不同类型网卡的帮定都是一样的,例如以太设备。唯一的区别是DEVICE=应该是bond<N>,下面是一个示例文件:
DEVICE=bond0 BOOTPROTO=none ONBOOT=yes NETWORK=10.0.1.0 NETMASK=255.255.255.0 IPADDR=10.0.1.27 USERCTL=no
一旦创建了bonding接口,bonding设备包含的网卡设备必须进行配置,在配置文件中添加到MASTER=和SLAVE=,所有网卡的配置文件都是类似的,例如一个bonding设备帮定了两个网卡,eth0和eth1的配置文件可能如下:
DEVICE=eth<N> BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no
在本例中,把<N>替换为网卡编号。
为了激活bonding设备,必须加载内核模块,在RHEL4和RHEL3下加载模块的过程稍有不同。
RHEL4
为了确保在bonding设备在启动时模块被加载,在/etc/modprobe.conf中添加如下内容:
install bond<N> /sbin/modprobe bonding -o bond<N> miimon=100 mode=0
替换<N>为设备编号,例如0。
miimon 是指多久时间检查网络一次,单位是ms(毫秒),其意义是假设其中有一条网络断线,会在0.1秒内自动备援
mode 共有七种模式(0~6)
mode=0:负载均衡模式,有自动备援,但需要”Switch”支持和设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:负载均衡模式,有自动备援,不需要”Switch”支持和设定。
如果还要使用互备模式,需要加上参数primary=ethx
对于每个虚拟bonding设备,在/etc/modprobe.conf中都要有对应行。需要注意的是在RHEL4U2之前的版本,不支持多个bonding设备。如果需要配置多个bonding设备,则需要升级内核到 RHEL4U2。
一旦/etc/modprobe.conf被配置,bonding虚拟设备配置文件以及网卡配置文件配置完毕,ifup命令将用来启动bonding虚拟设备,或者通过重新起动网络。