Linux系统下做bonding网卡绑定,本测试是使用的环境  CentOS 6.3 +虚拟机+双网卡,在装好的虚拟中添加网卡,不会产品ifcfg-eth1之类的文件,需要手动复制ifcfg-eth1,如果需要到MAC地址,就用 ifconfig把查看到的相应MAC地址写到配置文件
1. root 用户登录,用 ifconfig 看网卡是否正常。
        Linux 默认是 DHCP获取ip,当网络中没有DHCP,则会请求超时,而造成网卡无法启动,不过网卡不启动也没关系,只要确认lsmod中网卡驱动模块已经正常加载了就可以了,然后我们需要修改网卡配置文件。

Linux多网卡负载均衡主备bonding技术教程_网卡驱动

 

2. 新建虚拟绑定网卡 bond0

 执行cd /etc/sysconfig/network-scripts进入网卡配置文件目录 

 这个目录下会有网卡的配置文件 

 ifcfg-eth0 对应eth0 

 ifcfg-eth1 对应eth1 

Linux多网卡负载均衡主备bonding技术教程_配置文件_02

拷贝ifcfg-eth0为ifcfg-bond0

Linux多网卡负载均衡主备bonding技术教程_虚拟机_03

3. 编辑网卡配置文件

编辑ifcfg-bond0文件 

#vi ifcfg-bond0

原配置文件如下

 

Linux多网卡负载均衡主备bonding技术教程_Linux bonding_04

 

修改后需要添加静态ip地址(网卡绑定不建议使用动态ip)、子网掩码和网关如下

(注意:除了bond0设置IP等信息外其他的真实网卡不能设置IP地址)

Linux多网卡负载均衡主备bonding技术教程_网卡驱动_05

编辑ifcfg-eth0文件
#vi ifcfg- eth0
原配置文件如下

Linux多网卡负载均衡主备bonding技术教程_网卡驱动_06

修改后

Linux多网卡负载均衡主备bonding技术教程_Linux bonding_07

三个网卡配制好了

Linux多网卡负载均衡主备bonding技术教程_用户登录_08

本环境 使用CentOS6.3没有/etc/modprobe.conf这个文件

编辑 /etc/modprobe.d/dist.conf

在该文件的最下面添加如下2行

alias bond0 bonding

options bond0 miimon=100 mode=1

注 : miimon是用来进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。

mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。

mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.

Linux多网卡负载均衡主备bonding技术教程_虚拟机_09

 

5. 修改/etc/rc.local配置文件

添加如下2行

ifenslave bond0 eth0 eth1 //如果上面加了master,slave 可以不加本行

route add -net 10.0.1.0 netmask 255.255.255.0 bond0 //这行可以不添加

-net后面是网段 netmask后面是子网掩码

Linux多网卡负载均衡主备bonding技术教程_Linux bonding_10

6. 重新启动服务器,在开机自检的时候查看bond0 是否已经启动,如果启动了就证明成功了。

Linux多网卡负载均衡主备bonding技术教程_Linux bonding_11

也可以用lsmod |more 查看bonding 模块有没有加载成功

Linux多网卡负载均衡主备bonding技术教程_网卡驱动_12

7. 测试配置结果
/proc/net/bonding/bond0文件,这个文件是内存镜像文件,是临时的、及时的文件,系统的状态改变会直接通过给该文件

测试时执行ping 10.0.1.92的动作,然后分别断开网线观察ping是否会丢包

同时查看cat /proc/net/bonding/bond0文件,看当前激活的网卡(Currently Active Slave: eth1)及网卡状态(MII Status: down),来判断是否正常切换

Linux多网卡负载均衡主备bonding技术教程_配置文件_13

 

Linux多网卡负载均衡主备bonding技术教程_用户登录_14

在虚拟机中试验一下效果.
从另一台机器ping我们刚才设置的IP(10.0.1.92)地址,然后在虚拟机vmware下面,点其中的一个网卡

选中disconnect(断开)

可以看到ping只是出现了一个time out后就又恢复了正常(真实环境可能时间会过几秒).说明我们的配置起作用了.

Linux多网卡负载均衡主备bonding技术教程_配置文件_15

注意:bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用,两个网卡接到一台交换机上的时候,交换机端口需要做聚合。

另一个参考资料:

网卡绑定技术已经出来很久,在不同的平台下的叫法不同而已,在Linux下叫bonding,IBM称为etherchanel,broadcom 叫team,但是名字怎么变,效果都是将两块或更多的网卡当做一块网卡使用,在增加带宽的同时也可以提高冗余性,七种模式,一般使用较多的就是来提高冗 余,分别和不同交换机相连,提高可靠性,但有时服务器带宽不够了也可以增加带宽,在这里用思科交换机和HP服务器相连,思科交换机做端口汇聚,服务器做网 卡绑定,配置如下:
服务器为CentOS6.2
cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
TYPE=ethernet
ONBOOT=yes
IPADDR=192.168.0.32
NETMASK=255.255.192.0
GATEWAY=10.10.0.1
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
TYPE=ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth0
BOOTPROTO=static
TYPE=ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
vim /etc/modprobe.d/dist.conf
alias bond0 bonding
options bond0 miimon=100 mode=0(0,表示平衡负载双网卡工作,RR算法,mode=1,自动主备,其中一块工作)
思科交换机相应端口配置端口聚合:
R1#configure terminal
R1(config)#int range g0/1 - 2
R1(config-int-range)#channel-group 1 mode on
将交换机g0/1-2 与服务器相应端口相连,经测试,带宽明显增加

 

另一重要参考资料:

Linux双网卡bonding

分为三步:

1、创建bond0网卡:

 

vim /etc/sysconfig/network-scripts/ifcfg-bond0

 

添加如下内容:

Linux多网卡负载均衡主备bonding技术教程_配置文件_16

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.0.0NETMASK=255.255.255.0IPADDR=192.168.0.10USERCTL=no
GATEWAY=192.168.0.254TYPE=Ethernet

Linux多网卡负载均衡主备bonding技术教程_配置文件_16

 

2、修改eth0、eth1:

 

vim /etc/sysconfig/network-scripts/ifcfg-eth0

 

Linux多网卡负载均衡主备bonding技术教程_配置文件_16

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yesMASTER=bond0
SLAVE=yesUSERCTL=yes

Linux多网卡负载均衡主备bonding技术教程_配置文件_16

 

vim /etc/sysconfig/network-scripts/ifcfg-eth1

 

Linux多网卡负载均衡主备bonding技术教程_配置文件_16

DEVICE=eth1
BOOTPROTO=none
ONBOOT=yesMASTER=bond0
SLAVE=yesUSERCTL=yes

Linux多网卡负载均衡主备bonding技术教程_配置文件_16

3、修改modprobe.conf:

 

  以便kernel识别。加入设置参数,miimon值表示两块网卡相互监测的时间,以ms为单位。mode值为工作模式,可设置为高可用还是负载均衡,0为高可用(默认值),1为负载均衡,另外还有一种XOR模式。

 

vim /etc/modprobe.conf

 

alias bond0 bonding
options bond0 miimon=100 mode=1

  

  说明: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会认为链路没有问题而继续使用。

 

4、调整交换机,绑定多端口,做链路聚合

 

    mode 0下bond所绑定的网卡的IP都被修改成一样的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。


    所以mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址。