Linux系统-bonding网络调优for centos6

1
2
3
实验环境: Centos6.5 minimal 64位系统
服务器IP:192.168.10.22
配置环境:一台服务器、添加双网卡,都在桥接模式上

说明:

1
2
1.	此次是做的centos6的bonding链路聚合,centos7的使用team,可根据自身的操作系统来选择你所看的文章
2. 如果你的操作系统为centos7,可参考文章《Linux系统-team网络调优for centos7》

centos6/rhel6 默认的链路聚合使用的是bond ,在centos7/redhat7中虽然依旧保留着有bonding内核模块(bond功能对应的模块是bonding),同样也可以使用bond模块配置链路聚合,不过默认情况下NetworkManager程序中集成了teamd功能来配置链路聚合。

一、基本概念

链路聚合:

以太网链路聚合简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。

链路聚合的功能:
1
2
3
4
5
1)增加了带宽---将多个链路的容量组合到一个逻辑链路中。
2)自动故障转移/故障恢复---将来自故障链路的通信转移到聚合中的工作链路。
3)负载均衡---传入和外发通信都是根据用户选择的负载均衡策略(如源和目标 MAC 或 IP 地址)进行分配的。
4)改进了管理---所有接口作为一个单元进行管理。
5、减少了网络地址池消耗---可以将一个 IP 地址指定给整个聚合。
Bonding技术

网卡绑定也称作“网卡捆绑”,就是使用多块物理网卡虚拟成一块网卡,以提供负载均衡或者冗余,增加带宽的作用。当一个网卡坏掉时,不会影响业务。这个聚合起来的设备看起来是一个单独的以太网接口设备,也就是这几块网卡具有相同的IP地址而进行链接聚合成一个逻辑链路工作。这种技术在Cisco等网络公司中,被称为Trunking和Etherchannel技术,在Linux的内核中把这种技术称为bonding。

七种Bonding模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1)Balance-rr(Round-robin)(平衡轮循环策略)
也称bound 0模式

特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降

2)Active-backup(AP) (主-备份策略)
也称bound 1模式

特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N

3)Balance-XOR(XOR) (平衡策略)
也称bound 2模式

特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址)% slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力

4)Broadcast(广播) (广播策略)
也称bound 3模式

特点:在每个slave接口上传输每个数据包,此模式提供了容错能力

5)802.3ad(LACP) (IEEE802.3ad 动态链接聚合)
也称bound 4模式

特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。

必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

6)Balance-tlb(TLB) (适配器传输负载均衡)
也称bound 5模式

特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

必要条件:ethtool支持获取每个slave的速率

7) Balance-alb(ALB) (适配器适应性负载均衡)
也称bound 6模式

特点 : 该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receiveload balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(roundrobin)在bond中最高速的slave上当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。

必要条件:
条件1:ethtool支持获取每个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个 bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量

二、配置Bond0链路聚合

示意图:

PjZUw8.png

1、添加网卡,并两块都设置成桥接模式

PjZwFg.png

2、开机查看网卡是否添加成功
1
ifconfig -a

PjZBWj.png

3、查看是否加载了bond模块

查看是否有bond模块

1
modinfo bonding | grep .ko

PjZsln.png

加载上

1
2
modprobe bonding
lsmod | grep bond

PjZ6O0.png

4、设置开机自动加载bond模块
1
echo "modprobe bonding" &> /dev/null >>/etc/rc.local
5、编辑模块载入配置文件
1
2
3
4
vim /etc/modprobe.conf

alias bond0 bonding
options bonding miimon=100 mode=balance-rr

参数详解:

1
2
3
1)mode=balance-rr或bond0		#这里采用rr轮询的模式,此模式提供负载均衡和容错。所有网卡公用一个MAC地址。

2)miimon #用来进行链路监测,如miimon=100,表示系统每100秒监测一次链路连接状态,如果有一条线路不通就转入另一条线路。
6、创建bond0配置文件
1
2
3
4
5
6
7
8
9
vim /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
IPADDR=192.168.10.22
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1
ONBOOT=yes
BOOTPROTO=static
7、创建eth0配置文件
1
2
3
4
5
6
7
vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
MASTER=bond0
BOOTPROTO=static
SLAVE=yes
8、创建eth1配置文件
1
2
3
4
5
6
7
vim /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
ONBOOT=yes
MASTER=bond0
BOOTPROTO=static
SLAVE=yes
9、重启网卡
1
service network restart

PjZ2wT.png

10、查看网卡是否绑定成功
1
ifconfig		如果成功,bond0、eth0、eth1的MAC地址是一样的

PjZolR.png

1
cat /proc/net/bonding/bond0		如果成功,bond0、eth0、eth1都是up状态

PjZ7Ox.png

11、检测bond是否正常使用

A.联网:ping www.baidu.com

PjZq0K.png

B.网关:route -n

PjeNcR.png

C.查看DNS:cat /etc/resolv.conf

PjeUj1.png

12、测试高可用

一直ping www.baidu.com,然后断开eth1看看是否还能ping通百度

Pjednx.png

断开后,发现通信正常,说明多网卡绑定成功

PjewB6.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%