-
本文介绍
linux
下的
bonding
技术,
linux 2.4.x
的内核中采用了这种技术,
利用
bonding
技
术可以将多块网卡
接口通过绑定虚拟成为一块网卡,
在用户看来这个聚合起来的设备好像是
一个单独的以太网接口设备,
通俗点讲就是多块网卡具有相同的
IP
地址而并行连接聚合成
一个逻辑链路工作。
二、
bond
的几种算法
Linux
的
bond
支持
7
种工作模式
,
可以参考内核源码包文件:
Documentation/networking/
。这里逐一介绍。
模式
1
:
mode=0
,即:
(balance-rr) Round-robin
policy
(平衡轮循策略)
特点
:传输数据包顺序是依次传输(即:第
1
个包走
eth0
,下一个包就走
eth1….
一直循环
下去,
直到最后一个传输完毕)
,此模式提供负载平衡和容错能力;但是我们知道如果一个
连接或者会话的数
据包从不同的接口发出的话,
中途再经过不同的链路,
在客户端
很有可能
会出现数据包无序到达的问题,
而无序到达的数据包需
要重新要求被发送,
这样网络的吞吐
量就会下降。
模式
2
:
mode=1
,即:
(active-backup) Active-backup policy
(主
-
备份策略)
特点:
只有一个设备处于活动状态,
当
一个宕掉另一个马上由备份转换为主设备。
mac
地址
是外部可见得,
从外面看来,
bond
的
MAC
地址是唯一的,
以避免
switch(
交换机
)
p>
发生混乱。
此模式只提供了容错能力;
由此
可见此算法的优点是可以提供高网络连接的可用性,
但是它
的资
源利用率较低,只有一个接口处于工作状态,在有
N
个网络接口的情况下,资源利用
率为
1/N
模式
3
:
mo
de=2
,即:
(balance-xor) XOR
policy
(平衡策略)
特点:基
于指定的传输
HASH
策略传输数据包。缺省的策略是:
(
源
MAC
地址
p>
XOR
目标
M
AC
地址
) % slave
数量。其
他的传输策略可以通过
xmit_hash_policy
选项
指定,此模式提
供负载平衡和容错能力。
模式
4
:
mode=3
,即:
broadcast
(广播策略)
特点:在每个
slave
接口上传输每个数据包,此模式提供了容错能力。
模式<
/p>
5
:
mode=4
,即:
(802.3ad) IEEE 802.3adDynamic link
aggregation
(
IEEE 802.3ad
动态
链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据
802.3ad
p>
规范将多个
slave
工作在同一个激活的
聚合体下。
外出流量的
slave<
/p>
选举是基于传输
hash
策略,该策略可
以通过
xmit_hash_policy
选项从缺省
的
XOR
策略改变到其他策略。
需要注意的是,
并不是所有的传输策略都是
802.3
ad
适应的,
尤其考虑到在
802.3
ad
标准
43.2.4
章节提及的包乱
序问题。
不同的实现可能会有不同的适应
性。
< br>
必要条件:
条件
1
:
ethtool
支持
获取每个
slave
的速率和双工设定
条件
2
:
sw
itch(
交换机
)
支持
IEEE 802.3ad Dynamic link aggregation
条件
3
:大多数
switch
(
交换机
)
需要经过特定配置才能支持
802.3ad
模式
模式
6
:
mode=5
,即:
(balance-tlb) Adaptive
transmit load
balancing
(适配器传输负载均衡)
特点:不需要任何特别的
switch(
交换机
)
支持的通道
bonding
。在每个
slave
上根据当前的负
< br>载(根据速度计算)分配外出流量。如果正在接受数据的
slave
出故障了,另一个
slave
接
管失败的
slave
的
MAC
p>
地址。
该模式的必要条件:
ethtool
支持获取每个
slave
的速率。
模式
7
:
mode=6
,即:
(balance-alb) Adaptive load
balancing
(适配器适应性负载均衡)
特点:该模式包含了
balance-tlb
< br>模式,同时加上针对
IPV4
流量的接收负载均衡
(receive load
balance, rlb)
,
而且不需要任何
switch(
交换机
)
的支持。
接收负载
均衡是通过
ARP
协商实现的。
bon
ding
驱动截获本机发送的
ARP
应
答,
并把源硬件地址改写为
bond
中
某个
slave
的唯一硬
件地址,从而
使得不同的对端使用不同的硬件地址进行通信。
平时经常用到
的是
mode=0
、
mode=1
p>
、
mode=4
、
mode=6
算法。
三、
bond
配置
A
、
centos/redhat
下的配置
p>
1
1
、
配置
# vim
/etc/modprobe.d/
#
编缉该配置文件,在行尾增加如下内容
alias bond0 bonding
options
bond0 miimon=100 mode=1
alias bond1
bonding
options bond1 miimon=100 mode=1
alias net-pf-10 off
//
这行是关闭
ipv6
支持
,
也可以不要
说明:
miimon
是用来进行链路监测的。如果
miimo
n=100
,那么系统每
100ms
监测一次链
路连接状态,如果有一条线路不通就转入另一条线路;
mode
的值表示工作模式。一些老的
redhat/ce
ntos
发行中已使用
/etc/
配置
文件。
2
、网卡配置
# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond1
SLAVE=yes
这里只列出了
eth0
网卡的配置。
假设目前服务器有四快网卡,
eth0
、
eth1
配置为
bond1
,
eth2
、
eth3
配置为
bond0
。参照上面的配置,同理
eth1
网卡只需复制一份
eth0
的配置,修改下设
备名;再复制两份为
eth2
、
eth3
,需要修改
DEVICE
和
MASTER
bond
名称即可。
3
、
bond
网卡配置
以
bond1
网卡为例:
# cat
ifcfg-bond1
DEVICE=bond1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
USERCTL=no
IPADDR=10.211.89.202
NETMASK=255.255.255.224
#GATEWAY=10.211.89.193
注:
centos/redhat
下有
netwo
rk
和
NetworkManager
两个服务管理网卡,
两个服务同时开启在
配置
< br>bond
生效后会有报错。可以通过以下配置命令关闭
N
etworkManager
服务:
# /etc/init.d/NetworkManager stop
# chkconfigNetworkManager off
B
、
centos/redhat
下的配置
2
bond
选择的配置也可
以不配置在
文件,
而直接配置在
ifcfg-bond
网卡接口中,
具体
p>
如下:
# vim
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.0.180
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
USERCTL=no
BONDING_OPTS=
C
、
sles
(
suse
)下的配置
suse
类似于
redhat/centos
,即支持写到
modprobe
配置文件,也支持在<
/p>
bond
网卡配置文件中
增加。以下是在
bond
网卡中的配置(注意和上面使用
BONDING
参数项略有不同):
# vim /etc/sysconfig/network/ifcfg-
bond0
BOOTPROTO='static'