目前在各個發行版本的 Linux 中,使用最普遍的內核版本應該就是 2.4.x的版本了,而 Linux Channel Bonding, 在Linux 2.4 的內核中,
就提供了 bonding 的驅動, 可以支持把多個網絡適配器集合在一起, 當作一個網絡適配器來使用。在 Linux 下,網卡的高可用性是通過 MII
或者 ETHTOOL 的狀態監測來實現的,所以,需要檢查系統中的網絡適配器是否支持 MII或者 ETHTOOL 的連狀態監測。可以用命令 "ethtool
eth0" 來檢查,如果顯示的 "Link detected:"信息與實現的連接狀態一致,就沒有問題。如果系統中的網絡適配器不支持 MII 或者 ETHTOOL
狀態監測,當連接失效時,系統就不能檢測到,同時,在 bonding 驅動加載時,會記錄一條不支持 MII 和 ETHTOOL 的警告信息。
實驗準備:
一臺redhat5.6系統虛擬機,配置兩個網卡 一個靜態ip:172.16.100.2/24
當mode=1時爲主備模式,mode=0時爲負載均衡模式。
[root@node4 ~]# cd /etc/sysconfig/network-scripts/
[root@node4 network-scripts]# vi ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
Type=Ethernet
SLAVE=yes
MASTER=bond0
IPV6INIT=no
USERCTL=no
[root@node4 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@node4 network-scripts]# vi ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
Type=Ethernet
SLAVE=yes
MASTER=bond0
IPV6INIT=no
USERCTL=no
[root@node4 network-scripts]# cp ifcfg-eth0 ifcfg-bond0
[root@node4 network-scripts]# vi ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BROADCAST=172.16.100.255
IPADDR=172.16.100.2
NETMASK=255.255.255.0
NETWORK=172.16.100.0
TYPE=Ethernet
ONBOOT=yes
IPV6INIT=no
USERCTL=no
[root@node4 network-scripts]# vi /etc/modprobe.d/bond.conf
alias bond0 bonding
options bond0 miimon=50 mode=1 #50毫秒監控一次,使用冗餘1模式,即一備一
[root@node4 ~]# cat /boot/config-2.6.18-238.el5 |grep BONDING
CONFIG_BONDING=m
[root@node4 ~]# modprobe bonding
[root@node4 ~]# lsmod |grep bonding
bonding 100449 0
ipv6 270049 2 bonding,cnic
將bonding加入開機啓動
[root@node4 ~]#vi /etc/rc.d/rc.local
加一行 modprobe bonding
重啓機器。
[root@node4 ~]# cat /proc/net/bonding/bond0 此時工作網卡爲eth0
客戶端做ping測試,同時斷開eth0,可以看到客戶端丟了一個包,同時查看日誌,如下
在[root@node4 ~]# cat /proc/net/bonding/bond0,可以看到當前工作網卡已經切換爲eth1了
修改bonding配置文件 /etc/modprobe.d/bond.conf 將mode 改爲0,負載均衡模式
重啓機器
啓動後,[root@node4 ~]# cat /proc/net/bonding/bond0, 已經變爲了round-robin (負載均衡模式)
此時,斷開網卡eth0
[root@node4 ~]# cat /proc/net/bonding/bond0 ,如下