Linux中实现多网卡绑定总结

在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、拓扑图:

  Linux中实现多网卡绑定总结_第1张图片

  3、环境搭建:

  

  Linux中实现多网卡绑定总结_第2张图片

  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/nf

  

  miimon是用来进行链路监测的;

  miimon=100 表示每100ms监控一次;

  mode的值表示工作模式;

  mode=0 表示bonding使用负载均衡方式;

  4)指出bond0所绑定的网卡:

  [root@localhost ~]# vim /etc/rc.local

  Linux中实现多网卡绑定总结_第3张图片

  5、测试:

  当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第4张图片

  

  测试连通性:

  

  当断开eth0后:

  Linux中实现多网卡绑定总结_第5张图片

  将无法连通:

  Linux中实现多网卡绑定总结_第6张图片

  查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第7张图片

  若断开eth1:

  

  Linux中实现多网卡绑定总结_第8张图片

  出现丢包现象,片刻又回复连通状态:

  

  查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第9张图片

  6、实验小结:

  在配置eth0和eth1网卡参数时建议不要指定MAC地址;

  在配置bond0虚拟网络接口时建议不要指定MAC地址;

  在负载均衡模式下,虽然提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。

  案例 - 2:

  1、实验说明:

  某公司中的服务器,为了实现高可用性,准备使用bonding技术实现网络冗余;

  2、拓扑图:

  Linux中实现多网卡绑定总结_第10张图片

  3、环境搭建:

  Linux中实现多网卡绑定总结_第11张图片

  Linux中实现多网卡绑定总结_第12张图片

  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/nf

  Linux中实现多网卡绑定总结_第13张图片

  miimon是用来进行链路监测的;

  miimon=100 表示每100ms监控一次;

  mode的值表示工作模式;

  mode=1 表示bonding使用备份模式;

  4)指出bond0所绑定的网卡:

  [root@localhost ~]# vim /etc/rc.local

  Linux中实现多网卡绑定总结_第14张图片

  5、测试:

  Linux中实现多网卡绑定总结_第15张图片

  当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:

  

  使用外部主机ping 测试连通性:

  Linux中实现多网卡绑定总结_第16张图片

  断开eth0网卡:

  Linux中实现多网卡绑定总结_第17张图片

  发现有一条ping命令丢包了:

  Linux中实现多网卡绑定总结_第18张图片

  查看此时内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第19张图片

  6、实验小结:

  在配置eth0和eth1网卡参数时建议不要指定MAC地址;

  在配置bond0虚拟网络接口时建议不要指定MAC地址;

  由此可见此模式的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N;


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、拓扑图:

  Linux中实现多网卡绑定总结_第20张图片

  3、环境搭建:

  

  Linux中实现多网卡绑定总结_第21张图片

  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/nf

  

  miimon是用来进行链路监测的;

  miimon=100 表示每100ms监控一次;

  mode的值表示工作模式;

  mode=0 表示bonding使用负载均衡方式;

  4)指出bond0所绑定的网卡:

  [root@localhost ~]# vim /etc/rc.local

  Linux中实现多网卡绑定总结_第22张图片

  5、测试:

  当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第23张图片

  

  测试连通性:

  

  当断开eth0后:

  Linux中实现多网卡绑定总结_第24张图片

  将无法连通:

  Linux中实现多网卡绑定总结_第25张图片

  查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第26张图片

  若断开eth1:

  

  Linux中实现多网卡绑定总结_第27张图片

  出现丢包现象,片刻又回复连通状态:

  

  查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第28张图片

  6、实验小结:

  在配置eth0和eth1网卡参数时建议不要指定MAC地址;

  在配置bond0虚拟网络接口时建议不要指定MAC地址;

  在负载均衡模式下,虽然提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。

  案例 - 2:

  1、实验说明:

  某公司中的服务器,为了实现高可用性,准备使用bonding技术实现网络冗余;

  2、拓扑图:

  Linux中实现多网卡绑定总结_第29张图片

  3、环境搭建:

  Linux中实现多网卡绑定总结_第30张图片

  Linux中实现多网卡绑定总结_第31张图片

  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/nf

  Linux中实现多网卡绑定总结_第32张图片

  miimon是用来进行链路监测的;

  miimon=100 表示每100ms监控一次;

  mode的值表示工作模式;

  mode=1 表示bonding使用备份模式;

  4)指出bond0所绑定的网卡:

  [root@localhost ~]# vim /etc/rc.local

  Linux中实现多网卡绑定总结_第33张图片

  5、测试:

  Linux中实现多网卡绑定总结_第34张图片

  当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:

  

  使用外部主机ping 测试连通性:

  Linux中实现多网卡绑定总结_第35张图片

  断开eth0网卡:

  Linux中实现多网卡绑定总结_第36张图片

  发现有一条ping命令丢包了:

  Linux中实现多网卡绑定总结_第37张图片

  查看此时内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第38张图片

  6、实验小结:

  在配置eth0和eth1网卡参数时建议不要指定MAC地址;

  在配置bond0虚拟网络接口时建议不要指定MAC地址;

  由此可见此模式的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N;


在Linux中实现多网卡绑定

发布者:lm5515   来源: 网络转载   发布日期:2014年04月30日    Linux学习交流群:207858983

  一、原理介绍:

  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、拓扑图:

  Linux中实现多网卡绑定总结_第39张图片

  3、环境搭建:

  

  Linux中实现多网卡绑定总结_第40张图片

  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/nf

  

  miimon是用来进行链路监测的;

  miimon=100 表示每100ms监控一次;

  mode的值表示工作模式;

  mode=0 表示bonding使用负载均衡方式;

  4)指出bond0所绑定的网卡:

  [root@localhost ~]# vim /etc/rc.local

  Linux中实现多网卡绑定总结_第41张图片

  5、测试:

  当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第42张图片

  

  测试连通性:

  

  当断开eth0后:

  Linux中实现多网卡绑定总结_第43张图片

  将无法连通:

  Linux中实现多网卡绑定总结_第44张图片

  查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第45张图片

  若断开eth1:

  

  Linux中实现多网卡绑定总结_第46张图片

  出现丢包现象,片刻又回复连通状态:

  

  查看内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第47张图片

  6、实验小结:

  在配置eth0和eth1网卡参数时建议不要指定MAC地址;

  在配置bond0虚拟网络接口时建议不要指定MAC地址;

  在负载均衡模式下,虽然提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。

  案例 - 2:

  1、实验说明:

  某公司中的服务器,为了实现高可用性,准备使用bonding技术实现网络冗余;

  2、拓扑图:

  Linux中实现多网卡绑定总结_第48张图片

  3、环境搭建:

  Linux中实现多网卡绑定总结_第49张图片

  Linux中实现多网卡绑定总结_第50张图片

  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/nf

  Linux中实现多网卡绑定总结_第51张图片

  miimon是用来进行链路监测的;

  miimon=100 表示每100ms监控一次;

  mode的值表示工作模式;

  mode=1 表示bonding使用备份模式;

  4)指出bond0所绑定的网卡:

  [root@localhost ~]# vim /etc/rc.local

  Linux中实现多网卡绑定总结_第52张图片

  5、测试:

  Linux中实现多网卡绑定总结_第53张图片

  当eth0 和 eth1 都启用时,查看内核中网卡绑定的情况:

  

  使用外部主机ping 测试连通性:

  Linux中实现多网卡绑定总结_第54张图片

  断开eth0网卡:

  Linux中实现多网卡绑定总结_第55张图片

  发现有一条ping命令丢包了:

  Linux中实现多网卡绑定总结_第56张图片

  查看此时内核中网卡绑定的情况:

  Linux中实现多网卡绑定总结_第57张图片

  6、实验小结:

  在配置eth0和eth1网卡参数时建议不要指定MAC地址;

  在配置bond0虚拟网络接口时建议不要指定MAC地址;

  由此可见此模式的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N;


linux多网卡绑定bonding  2012-08-17 15:06:31

我们在这介绍的Linux 双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链 接聚合成一个逻辑链路工作。其实这项技术在Sun和Cisco中早已存在,被称为Trunking和Etherchannel 技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。
bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据 传 输而设计的。下面我们讨论一下bonding 的原理,什么是bonding需要从网卡的混杂(promisc)模式说起。我们知道,在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络 上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的Mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
直接给两块网卡设置同一IP地址是不可能的。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。可以通过以下命令确定内核是否支持 bonding:
#cat /boot/config-kernel-version |grep -i bonding
CONFIG_BONDING=m

网卡绑定的意义

网络负载均衡

对于bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡,当做一块来用,解决一个IP地址,流量过大,服务器网络压力过大的问 题。对于文件服务器来说,比如NFS或SAMBA文件服务器,没有任何一个管理员会把内部网的文件服务器的IP地址弄很多个来解决网络负载的问题。如果在 内网中,文件服务器为了管理和应用上的方便,大多是用同一个IP地址。对于一个百M的本地网络来说,文件服务器在多个用户同时使用的情况下,网络压力是极 大的,特别是SAMABA和NFS服务器。为了解决同一个IP地址,突破流量的限制,毕竟网线和网卡对数据的吞吐量是有限制的。如果在有限的资源的情况 下,实现网络负载均衡,最好的办法就是 bonding ;
网络冗余;
对于服务器来说,网络设备的稳定也是比较重要的,特别是网卡。在生产型的系统中,网卡的可靠性就更为重要了。在生产型的系统中,大多通过硬件设备的冗余来 提供服务器的可靠性和安全性,比如电源。bonding 也能为网卡提供冗余的支持。把网个网卡绑定到一个IP地址,当一块网卡发生物理性损坏的情况下,另一块网卡也能提供正常的服务。

双网卡绑定设置 
一、编辑虚拟网络接口配置文件,指定网卡IP 
假设eth0是对外服务的网卡,已经调试好网络;eth1是希望与eth0同时对外提供服务的网卡

# cd /etc/sysconfig/network-scripts/

#vi ifcfg-bond0

写入如下信息和原来 ifcfg-eth0 的配置其实差不多。
所以我建议执行如下语句,将ifcfg-eth0复制一份再改。

# cp ifcfg-eth0 ifcfg-bon0

将ifcfg-bon0的信息修改大致如下:

DEVICE=bond0
BOOTPROTO=static
IPADDR=[IP]
NETMASK=[MASK]
BROADCAST=[BROADCAST]
GATEWAY=[GATEWAY]
ONBOOT=yes
TYPE=Ethernet
 

二、配置真实网卡 
修改ifcfg-eth0如下:

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0     #如果不写,则必须做第四步

SLAVE=yes             #如果不写,则必须做第四步

USERCTL=yes

类似地修ifcfg-eth1如下:

DEVICE=eth1

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0     #如果不写,则必须做第四步

SLAVE=yes             #如果不写,则必须做第四步

USERCTL=yes

三、加载模块,让系统 支持bonding 
默认情况下,内核已支持bonding,只需要简单修改/etc/modprobe.conf 这个配置文档就可以了:添加两行

alias bond0 bonding

options bond0 miimon=100 mode=1

说明:
mode指定了bond0的工作模式,在redhat中有0-6共7种工作模式,常用的是0和1。

mode=0 表示 load balancing (round-robin)为负载均衡方式,两块网卡都工作。 
mode=1 表示 fault-tolerance (active-backup)提供冗余功能,工作方式是主 从的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。  
mode=2 表示 XOR policy 为平衡策略。此模式提供负载平衡和容错能力  
mode=3 表示 broadcast 为广播策略。此模式提供了容错能力  
mode=4 表示 IEEE 802.3ad Dynamic link aggregation 为 IEEE 802.3ad 为 动态链接聚合。该策略可以通过 xmit_hash_policy 选项从缺省的 XOR 策略改变到其他策略。  
mode=5 表示 Adaptive transmit load balancing 为适配器传输负载均衡。该 模式的必要条件:ethtool 支持获取每个 slave 的速率  
mode=6 表示 Adaptive load balancing 为适配器适应性负载均衡。该模式包含 了 balance-tlb 模式,同时加上针对 IPV4 流量的接收负载均衡(receive load   balance, rlb),而且不需要任何 switch(交换机)的支持。  
bonding 只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对 外的链路 down 掉了,而交换机本身并没有故障,那么 bonding 会认为链路没有问题而继 续使用。

关于绑定网卡的详细参数可参见笔者的另一篇文章
http://czmmiao.iteye.com/admin/blogs/1044031
四、增加开机启动脚本 
在 /etc/rc.d/rc.local里加上

#ifenslave bond0 eth0 eth1

如果eth0和eth1都写了MASTER和SLAVE,则上面的步骤做不做都无所谓。
五、重启 
reboot或者service network restart 都可以看到结果。

六、查看绑定在哪张网卡上 

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0 
MII Status: up
MII Polling Interval (ms): 500
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
 
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:01:4f:77

Slave Interface: eth1 
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:01:4f:8b
 
六、测试 
ping着某个地址,当然是能ping通的地址啦。如果发现网络不通,请检查ifcfg-bond0的网络设置。
然后拔掉一根网线,如果ping没断,证明拔了一根backup的线,不是主线,重新插上等两分钟。
此时拔掉另一根网线,估计现在可以看到ping超时或者卡在那里,稍等10~30秒,ping继续连同。
测试成功。


七种网卡绑定模式详解

概览:

目前网卡绑定mode共有七种(0~6)bond0bond1bond2bond3bond4bond5bond6

 

常用的有三种:

mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

 

说明:

    需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里optionsbond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode0下):

       mode 0bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannelfoundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。

       mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。

 

七种bond模式说明:

第一种模式:mod=0 ,即:(balance-rr)Round-robin policy(平衡抡循环策略)

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

 

第二种模式:mod=1,即: (active-backup)Active-backup policy(主-备份策略)

特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bondMAC地址是唯一的,以避免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 aggregationIEEE802.3ad 动态链接聚合)

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

必要条件:

条件1ethtool支持获取每个slave的速率和双工设定

条件2switch(交换机)支持IEEE802.3ad Dynamic link aggregation

条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

 

第六种模式:mod=5,即:(balance-tlb)Adaptive transmit load balancing(适配器传输负载均衡)

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

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

 

第七种模式:mod=6,即:(balance-alb)Adaptive load balancing(适配器适应性负载均衡)

特点:该模式包含了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(交换机)阻截。

必要条件:

条件1ethtool支持获取每个slave的速率;

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

 

Linux网口绑定:

通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的。前提约定:

2个物理网口分别是:eth0,eth1

绑定后的虚拟口是:bond0

服务器IP是:10.10.10.1

 

第一步,配置设定文件:

[plain]  view plain  copy
 print ?
  1. [root@woo ~]# vi  /etc/sysconfig/network-scripts/ifcfg-bond0  
  2. DEVICE=bond0  
  3. BOOTPROTO=none  
  4. ONBOOT=yes  
  5. IPADDR=10.10.10.1  
  6. NETMASK=255.255.255.0  
  7. NETWORK=192.168.0.0  
  8.   
  9. [root@woo ~]# vi  /etc/sysconfig/network-scripts/ifcfg-eth0  
  10. DEVICE=eth0  
  11. BOOTPROTO=none  
  12. MASTER=bond0  
  13. SLAVE=yes  
  14.   
  15. [root@woo ~]# vi  /etc/sysconfig/network-scripts/ifcfg-eth1  
  16. DEVICE=eth1  
  17. BOOTPROTO=none  
  18. MASTER=bond0  
  19. SLAVE=yes  

第二步,修改modprobe相关设定文件,并加载bonding模块:

[plain]  view plain  copy
 print ?
  1. 1.在这里,我们直接创建一个加载bonding的专属设定文件/etc/modprobe.d/bonding.conf  
  2. [root@woo ~]# vi /etc/modprobe.d/bonding.conf  
  3. alias bond0 bonding  
  4. options bonding mode=0 miimon=200  
  5.   
  6. 2.加载模块(重启系统后就不用手动再加载了)  
  7. [root@woo ~]# modprobe bonding  
  8.   
  9. 3.确认模块是否加载成功:  
  10. [root@woo ~]# lsmod | grep bonding  
  11. bonding 100065 0  

第三步,重启一下网络,然后确认一下状况:

[plain]  view plain  copy
 print ?
  1.  [root@db01 ~]# service network restart  
  2. Shutting down interface bond0:  [  OK  ]  
  3. Shutting down loopback interface:  [  OK  ]  
  4. Bringing up loopback interface:  [  OK  ]  
  5. Bringing up interface bond0:  [  OK  ]  
  6.   
  7. [root@db01 ~]#  cat /proc/net/bonding/bond0  
  8. Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)  
  9.   
  10. Bonding Mode: fault-tolerance (active-backup)  
  11. Primary Slave: None  
  12. Currently Active Slave: eth0  
  13. MII Status: up  
  14. MII Polling Interval (ms): 100  
  15. Up Delay (ms): 0  
  16. Down Delay (ms): 0  
  17.   
  18. Slave Interface: eth0  
  19. MII Status: up  
  20. Speed: 1000 Mbps  
  21. Duplex: full  
  22. Link Failure Count: 0  
  23. Permanent HW addr: 40:f2:e9:db:c9:c2  
  24.   
  25. Slave Interface: eth1  
  26. MII Status: up  
  27. Speed: 1000 Mbps  
  28. Duplex: full  
  29. Link Failure Count: 0  
  30. Permanent HW addr: 40:f2:e9:db:c9:c3  
  31. [root@db01 ~]#  ifconfig | grep HWaddr  
  32. bond0     Link encap:Ethernet  HWaddr 40:F2:E9:DB:C9:C2    
  33. eth0      Link encap:Ethernet  HWaddr 40:F2:E9:DB:C9:C2    
  34. eth1      Link encap:Ethernet  HWaddr 40:F2:E9:DB:C9:C2    

从上面的确认信息中,我们可以看到3个重要信息:

1.现在的bonding模式是active-backup

2.现在Active状态的网口是eth0

3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

 

第四步,系统启动自动绑定、增加默认网关:

[plain]  view plain  copy
 print ?
  1. [root@woo ~]# vi /etc/rc.d/rc.local  
  2. #追加  
  3. ifenslave bond0 eth0 eth1  
  4. route add default gw 10.10.10.1  


 

#如可上网就不用增加路由,0.1地址按环境修改.

------------------------------------------------------------------------

留心:前面只是2个网口绑定成一个bond0的情况,如果我们要设置多个bond口,比如物理网口eth0eth1组成bond0eth2eth3组成bond1

多网口绑定:

那么网口设置文件的设置方法和上面第1步讲的方法相同,只是/etc/modprobe.d/bonding.conf的设定就不能像下面这样简单的叠加了:

alias bond0 bonding

options bonding mode=1 miimon=200

alias bond1 bonding

options bonding mode=1 miimon=200

 

正确的设置方法有2种:

 

第一种,你可以看到,这种方式的话,多个bond口的模式就只能设成相同的了:

[plain]  view plain  copy
 print ?
  1. <span style="color:#000000;">alias bond0 bonding  
  2. alias bond1 bonding  
  3. options bonding max_bonds=2 miimon=200 mode=1  
  4. </span>  

第二种,这种方式,不同的bond口的mode可以设成不一样:

[plain]  view plain  copy
 print ?
  1. <span style="color:#000000;">alias bond0 bonding  
  2. options bond0 miimon=100 mode=1  
  3. install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0  
  4. </span>  

 

仔细看看上面这2种设置方法,现在如果是要设置3个,4个,甚至更多的bond口,你应该也会了吧!

 

后记:

简单的介绍一下上面在加载bonding模块的时候,options里的一些参数的含义:

miimon 监视网络链接的频度,单位是毫秒,我们设置的是200毫秒。

max_bonds 配置的bond口个数

mode bond模式,主要有以下几种,在一般的实际应用中,01用的比较多。


Linux 多网卡绑定 

(1)编辑虚拟网络接口配置文件(bond0),并指定网卡IP 
vi   /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0 
ONBOOT=yes 
BOOTPROTO=static 
IPADDR=192.168.0.254 
BROADCAST=192.168.0.255 
NETMASK=255.255.255.0 
NETWORK=192.168.0.0 
GATEWAY=192.168.0.1 
USERCTL=no 
TYPE=Ethernet 
注意:不要指定MAC地址

vi   /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
MASTER=bond0   ------添加 
SLAVE=yes           ------添加 
注意:建议不要指定MAC地址,其余保持不变即可,注释掉ip,掩码,网关

vi   /etc/sysconfig/network-scripts/ifcfg-eth1 
DEVICE=eth1 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
MASTER=bond0   ------添加 
SLAVE=yes           ------添加 
注意:建议不要指定MAC地址,其余保持不变即可,注释掉ip,掩码,网关

4.修改/etc/modprobe.conf,配置绑定模型

加入以下内容:

alias bond0 bonding

options bond0 millmon=100 mode=0

这样配置完就不需要在对/etc/rc.local进行修改了

注:{一般会在/etc/rc.local增加以下内容:ifenslave bond0 eth0 eth1,负责在系统启动时将虚拟网卡和两张物理网卡相绑定,使用本方法不需要此步}

说明: 
miimon=100 
miimon是指多久时间要检查网路一次,单位是ms(毫秒) 
这边的100,是100ms,即是0.1秒 
意思是假设其中有一条网路断线,会在0.1秒内自动备援 
mode共有七种(0~6) 
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。 
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址. 
从原理分析一下(bond运行在mode 0下): 
mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。 
所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。

mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。

PS:RHEL4 (centos4)及以下的版本options加在/etc/modprobe.conf中; 
RHEL5 (centos5)可以在ifcfg-bond0中加BONDING_OPTS=”mode=1 arp_interval=100 arp_ip_target=192.168.0.1″

可以查看bond0来得知当前状态:

[root@localhost ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)

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

Slave Interface: eth0 
MII Status: up 
Speed: 100 Mbps 
Duplex: full 
Link Failure Count: 0 
Permanent HW addr: 00:24:XXXXXXXX

Slave Interface: eth1 
MII Status: up 
Speed: 100 Mbps 
Duplex: full 
Link Failure Count: 1 
Permanent HW addr: 00:24:XXXXXXXX

七种bond模式说明:

第一种模式: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的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。 
来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在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个口只占了小部分流量

Linux网口绑定

通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的。

前提约定:

2个物理网口分别是:eth0,eth1

绑定后的虚拟口是:bond0

服务器IP是:192.168.0.100

第一步,配置设定文件:

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

DEVICE=bond0

BOOTPROTO=none

ONBOOT=yes

IPADDR=192.168.0.100

NETMASK=255.255.255.0

NETWORK=192.168.0.0

BROADCAST=192.168.0.255

#BROADCAST广播地址

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

DEVICE=eth0

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

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

DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

第二步,修改modprobe相关设定文件,并加载bonding模块:

1.在这里,我们直接创建一个加载bonding的专属设定文件/etc/modprobe.d/bonding.conf

[root@test ~]# vi /etc/modprobe.d/bonding.conf

#追加

alias bond0 bonding

options bonding mode=0 miimon=200

2.加载模块(重启系统后就不用手动再加载了)

[root@test ~]# modprobe bonding

3.确认模块是否加载成功:

[root@test ~]# lsmod | grep bonding

bonding 100065 0

第三步,重启一下网络,然后确认一下状况:

[root@test ~]# /etc/init.d/network restart

[root@test ~]# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0

MII Status: up

MII Polling Interval (ms): 200

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:16:36:1b:bb:74

Slave Interface: eth1

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:16:36:1b:bb:80

[root@test ~]# ifconfig | grep HWaddr

bond0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

eth0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

eth1 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

从上面的确认信息中,我们可以看到3个重要信息:

1.现在的bonding模式是active-backup

2.现在Active状态的网口是eth0

3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

第四步,系统启动自动绑定、增加默认网关:

[root@test ~]# vi /etc/rc.d/rc.local

#追加

ifenslave bond0 eth0 eth1

route add default gw 192.168.0.1

#如可上网就不用增加路由,0.1地址按环境修改.

------------------------------------------------------------------------

留心:前面只是2个网口绑定成一个bond0的情况,如果我们要设置多个bond口,比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,

那么网口设置文件的设置方法和上面第1步讲的方法相同,只是/etc/modprobe.d/bonding.conf的设定就不能像下面这样简单的叠加了:

alias bond0 bonding

options bonding mode=1 miimon=200

alias bond1 bonding

options bonding mode=1 miimon=200

正确的设置方法有2种:

第一种,你可以看到,这种方式的话,多个bond口的模式就只能设成相同的了:

alias bond0 bonding

alias bond1 bonding

options bonding max_bonds=2 miimon=200 mode=1

第二种,这种方式,不同的bond口的mode可以设成不一样:

alias bond0 bonding

options bond0 miimon=100 mode=1

install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0

仔细看看上面这2种设置方法,现在如果是要设置3个,4个,甚至更多的bond口,你应该也会了吧!

后记:简单的介绍一下上面在加载bonding模块的时候,options里的一些参数的含义:

miimon 监视网络链接的频度,单位是毫秒,我们设置的是200毫秒。

max_bonds 配置的bond口个数

mode bond模式,主要有以下几种,在一般的实际应用中,0和1用的比较多,

如果你要深入了解这些模式各自的特点就需要靠读者你自己去查资料并做实践了。

0或balance-rr 轮转策略,提供负载均衡和耐故障功能,按顺序轮流把包发给包含在bond口内的网口。

1或active-backup 主备策略,提供高耐故障功能,逻辑简单,一个处于激活状态,一个失败,另外一个自动激活。

2或balance-xor XOR策略,提供负载均衡和耐故障功能。

3或broadcast 广播策略,耐故障功能。把数据以广播的方式,发给包含在该bond口内的所有网口。

4或802.3ad IEEE 802.3ad动态链接集合。

5或balance-tlb 自动适应传输负载均衡策略。

6或balance-alb 自动适应负载均衡策略。

本文出自 “阿克琉斯的脚跟 ~” 博客,请务必保留此出处http://rockhooray.blog.51cto.com/938613/813119

Linux各版本上的多网卡绑定(Debian和Ubuntu,SuSE,Fedora和RH) 
2006-07-28 08:50 
Linux上很容易可以将多块网卡绑定,实现负载均衡和双线热备的功能。 
负载均衡即将负载平均的分配到任意多块网卡上面,实现带宽的叠加 
双线热备即多块网卡互为备份,任何一块能够工作即可保证网络正常运行。 
各个绑定类型的分别 
mode=0 Round-robin: sequential(轮询负载均衡,最常用) 
mode=1 Active-backup: only one 
mode=2 XOR: same MAC same nic 
mode=3 Broadcast: all 
各大发行版略有不同,基本上分成3种,2036 一块网卡如何绑定两个ip(linuxloveu) 
#cd /etc/sysconfig/network-scripts 
#cp ifcfg-eth0 ifcfg-eth0:1 
#vi ifcfg-eth0:1 
修改IP和设备名 
Debian下一个网卡绑定多个ip的方法(NetDC) 
修改/etc/network/interfaces 
auto eth0 
iface eth0 inet static 
address 172.16.3.123 
netmask 255.255.255.0 
network 172.16.3.0 
broadcast 172.16.3.255 
gateway 172.16.3.1 
auto eth0:1 
iface eth0:1 inet static 
address 10.16.3.123 
netmask 255.255.0.0 
network 10.16.0.0 
broadcast 10.16.255.255 
修改/etc/network/ifstate 
lo=lo 
eth0=eth0 
eth0:1=eth0:1 
然后/etc/init.d/networking restart就可以了。 
一个网卡绑定多ip另一法(hotbox) 
在/etc/sysconfig/network-scripts/下创建一个文件:ifcfg-ethX-rangeX ("X"为网卡号) 
文件内容: 
IPADDR_START= 
IPADDR_END= 
CLONENUM=0 
可以有256个ip 
2037 一个ip如何绑定两块网卡(hutuworm) 
假设1Array2.168.0.88是ip,1Array2.168.0.1是网关: 
/sbin/modprobe bonding miimon=100 mode=1 
/sbin/ifdown eth0 
/sbin/ifdown eth1 
/sbin/ifconfig bond0 1Array2.168.0.88 
/sbin/ifenslave bond0 eth0 eth1 
/sbin/route add default gw 1Array2.168.0.1 
2038 1Array2.168.1.0/24(双眼皮的猪) 
它与1Array2.168.1.0/255.255.255.0是等价的,只是表示方式不同.... 
Debian下 
Debian和Ubuntu, 
SuSE, 
Mandriva、Fedora和RH 
----------------------------------------------------------------------- 
Debian和Ubuntu上的多网卡绑定 
实验环境Ubuntu 6.06 Dadder,内核版本2.6.15-23 server 
首先安装ifenslave 
#apt-get install ifenslave-2.6 
编辑/etc/network/interfaces 
auto lo bond0 eth0 eth1 
iface bond0 inet static 
address 10.31.1.5 
netmask 255.255.255.0 
network 10.31.1.0 
gateway 10.31.1.254 
up /sbin/ifenslave bond0 eth0 
up /sbin/ifenslave bond0 eth1 
iface lo loopback 
iface eth0 inet static 
address 10.1.1.101 
netmask 255.255.255.0 
iface eth1 inet static 
address 10.1.1.102 
netmask 255.255.255.0 
再编辑 /etc/modprobe.d/arch/i386 
加上两行: 
alias bond0 bonding 
options bonding mode=0 miimon=100 
最后重启网络即可 
/etc/init.d/networking restart 
----------------------------------------------------------------------- 
SuSE,Mandriva、Fedora和RH 
1、编辑 /etc/modules.conf 文件(SuSE的系统是/etc/modprobe.d/modprobe.cong.local),加入如下一行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0 
alias bond0 bonding 
2、编辑虚拟网络接口配置文件,指定网卡IP 
vi /etc/sysconfig/network-scripts/ifcfg-bond0 
(SuSE的系统是/etc/sysconfig/network/ifcfg-bond0) 
Fedora的写法 
DEVICE=bond0 
IPADDR=1Array2.168.1.1 
NETMASK=255.255.255.0 
NETWORK=1Array2.168.1.0 
BROADCAST=1Array2.168.1.255 
ONBOOT=yes 
BOOTPROTO=none 
USERCTL=no 
SuSE的写法 
BOOTPROTO=’static’ 
BROADCAST=’1Array2.168.1.255’ 
ETHTOOL_OPTIONS=’’ 
IPADDR=’1Array2.168.1.1’ 
MTU=’’ 
NETMASK=’255.255.255.0’ 
NETWORK=’1Array2.168.1.0’ 
STARTMODE=’auto’ 
USERCONTROL=’no’ 
3、编辑物理网络接口配置文件,并指向虚拟网络接口bond0 
Fedora: 
物理网络接口配置文件位于/etc/sysconfig/network-scripts, 
ifcfg-eth0对应第一个网卡,ifcfg-eth1对应第二个千兆网卡。 
ifcfg-eth0 : 
DEVICE=eth0 
IPADDR=11.0.0.1 
NETMASK=255.255.255.0 
USERCTL=no 
ONBOOT=yes 
BOOTPROTO=none 
ifcfg-eth1 : 
DEVICE=eth1 
IPADDR=11.0.0.2 
NETMASK=255.255.255.0 
USERCTL=no 
ONBOOT=yes 
BOOTPROTO=none 
SuSE: 
物理网络接口配置文件位于/etc/sysconfig/network/, 
以ifcfg-eth-(mac)为名字 
BOOTPROTO=’static’ 
IPADDR=’10.0.0.1’ 
NETMASK=’255.255.255.0’ 
STARTMODE=’auto’ 
USERCONTROL=’no’ 
最后编辑/etc/rc.local(SuSE是/etc/rc.d/rc)或是直接运行 
ifenslave bond0 eth0 eth1 eth2(绑几个网卡就写几个网卡的名字) 
无论eth0 eth1 eth2的IP怎样设置,绑定之后全都以bind0的设置为准。此时所有网卡的mac地址都是一样的。

你可能感兴趣的:(Linux中实现多网卡绑定总结)