在Linux中实现多网卡绑定
一、原理介绍:
1、什么是bonding?
Linux bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余;
Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。
2、bonding技术功能作用?
bonding主要用于两个方向:
a、实现 负载均衡;
通过bonding技术,将网络的业务流量平均分配到不同的服务器和网络设备上去,以减轻单台服务器和网络设备的负担,从而提高整个系统的效率。
b、实现 网络冗余;
在网络中,网络设备的可靠性是尤为重要的,特别是网卡;通过实现网络冗余,我们可以大大提高网络的可靠性和安全性;在生产型的系统中,大多通过硬件设备的冗余来提供服务器的可靠性和安全性;
3、bonding的模式:
第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕), 此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降
第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)
特点:只有一个设备处于活动状态,当 一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N
第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力
第四种模式:mod=3,即:broadcast(广播策略)
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力
第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。
必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式
第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
该模式的必要条件:ethtool支持获取每个slave的速率
第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
案例 - 1:
1、实验说明:
某公司中的服务器,为了实现通信的负载平衡和容错能力,准备使用bonding技术实现多块网卡的负载均衡;
2、拓扑图:
3、环境搭建:
4、实验步骤:
1)给网卡配置相应的参数;
配置网卡eth0参数:
[root@localhost network-scripts]# vim ifcfg-eth0
1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
2 DEVICE=eth0
3 BOOTPROTO=dhcp
4 ONBOOT=yes
配置网卡eth1参数:
[root@localhost network-scripts]# vim ifcfg-eth1
1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
2 DEVICE=eth1
3 BOOTPROTO=dhcp
4 ONBOOT=yes
2)配置虚拟网络接口配置文件;
[root@localhost network-scripts]# vim ifcfg-bond0
1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
2 DEVICE=bond0
3 BOOTPROTO=none
4 IPADDR=192.168.10.2
5 NETMASK=255.255.255.0
6 ONBOOT=yes
3)编辑模块载入配置文件,开机自动加载bonding模块到内核
[root@localhost ~]# vim /etc/modprobe.conf
miimon是用来进行链路监测的;
miimon=100 表示每100ms监控一次;
mode的值表示工作模式;
mode=0 表示bonding使用负载均衡方式;
4)指出bond0所绑定的网卡:
[root@localhost ~]# vim /etc/rc.local
5、测试:
当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:
测试连通性:
当断开eth0后:
将无法连通:
查看内核中网卡绑定的情况:
若断开eth1:
出现丢包现象,片刻又回复连通状态:
查看内核中网卡绑定的情况:
6、实验小结:
在配置eth0和eth1网卡参数时建议不要指定MAC地址;
在配置bond0虚拟网络接口时建议不要指定MAC地址;
在负载均衡模式下,虽然提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。
案例 - 2:
1、实验说明:
某公司中的服务器,为了实现高可用性,准备使用bonding技术实现网络冗余;
2、拓扑图:
3、环境搭建:
4、实验步骤:
1)给网卡配置相应的参数;
配置网卡eth0参数:
[root@localhost network-scripts]# vim ifcfg-eth0
1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
2 DEVICE=eth0
3 BOOTPROTO=dhcp
4 ONBOOT=yes
配置网卡eth1参数:
[root@localhost network-scripts]# vim ifcfg-eth1
1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
2 DEVICE=eth1
3 BOOTPROTO=dhcp
4 ONBOOT=yes
2)配置虚拟网络接口配置文件;
[root@localhost network-scripts]# vim ifcfg-bond0
1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
2 DEVICE=bond0
3 BOOTPROTO=none
4 IPADDR=192.168.10.2
5 NETMASK=255.255.255.0
6 ONBOOT=yes
3)编辑模块载入配置文件,开机自动加载bonding模块到内核
[root@localhost ~]# vim /etc/modprobe.conf
miimon是用来进行链路监测的;
miimon=100 表示每100ms监控一次;
mode的值表示工作模式;
mode=1 表示bonding使用备份模式;
4)指出bond0所绑定的网卡:
[root@localhost ~]# vim /etc/rc.local
5、测试:
当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:
使用外部主机ping 测试连通性:
断开eth0网卡:
发现有一条ping命令丢包了:
查看此时内核中网卡绑定的情况:
6、实验小结:
在配置eth0和eth1网卡参数时建议不要指定MAC地址;
在配置bond0虚拟网络接口时建议不要指定MAC地址;
由此可见此模式的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N;