1. 什么是Bonding

2. Bonding的工作模式

3. Bonding的实现


1. 什么是Bonding

bonding提供了一种把多块网卡聚合成一个逻辑网卡的方法(将多块网卡绑定同一IP地址对外提供服务,多块物理网卡被修改为相同的MAC地址)。该逻辑网卡的工作方式取决于工作模式,通常有热备或负载均衡,此外还可提供链路完整性监视。
大部分主流发行版已经将bonding集成为内核中的一个模块。
若你安装的发行版不支持该功能,需自行编译安装内核,并在编译时选择开启此功能。


2. Bonding的工作模式

Mode 0 (balance-rr)
轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
Mode 1 (active-backup)
活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。 为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
Mode 3 (broadcast)
广播策略:在所有的slave接口上传送所有的报文,提供容错能力

active-backup、 balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如: Cisco 交换机需要在模式 0、 2 和 3 中使用EtherChannel,但在模式4中需要 LACP和 EtherChannel

该功能试验应在物理机中进行,在虚拟机中进行时,会因为虚拟机的机制,不能实现自动切换网卡。


3. Bonding的实现(CentOS 6)

创建Bonding_第1张图片

3.1 虚拟机添加两块网卡,选择同一网络Vmnet 15

3.2 在目录/etc/sysconfig/network-scripts下添加配置文件如下

ifcfg-bond0

DEVICE=bond0
#mode=运行模式,miimon=NUM 相互之间通讯检查对方是否存活的时间间隔。
BONDING_OPTS="mode=0 miimon=100"
IPADDR=192.168.25.100
PREFIX=24

ifcfg-eth2

EVICE=eth2
MASTER=bond0
SLAVE=yes

ifcfg-eth3

DEVICE=eth3
MASTER=bond0
SLAVE=yes

miimon:是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
MASTER:指定MASTER的设备名
SLAVE:是否工作在SLAVE模式下

3.3 添加完成后重启网络服务(需关闭NetworkManager服务)

[root@magedu network-scripts]# cat /proc/net/bonding/bond0      #查看bond0状态
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b5:04:b7
Slave queue ID: 0

Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b5:04:ad
Slave queue ID: 0

创建Bonding_第2张图片

3.4 测试:

用另一台虚拟机ping该主机bond0的地址
因虚拟机对bonding支持不好,无法进行进一步测试。

创建Bonding_第3张图片

3.5 删除bond0

关闭bond0网卡并删除bonding模块

[root@magedu ~]# ifdown bond0
[root@magedu ~]# rmmod bonding

删除bond配置文件(eth2,eth3网卡需重建网卡配置文件)


[root@magedu network-scripts]# rm ifcfg-bond0 ifcfg-eth{2,3}
rm: remove regular file `ifcfg-bond0'? y
rm: remove regular file `ifcfg-eth2'? y
rm: remove regular file `ifcfg-eth3'? y```