在Linux中实现多网卡绑定

 
 一、原理介绍:
 1、什么是bonding?

  Linux bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用。用于网络负载均衡及网络冗余;

  Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡。这个聚合起来的设备看起来是一个单独的以太网接口设备。通俗点讲就是两块网卡具有同样的IP地址而并行链接聚合成一个逻辑链路工作。

  2、bonding技术功能作用?

  bonding主要用于两个方向:

  a、实现 负载均衡;   
通过bonding技术,将网络的业务流量平均分配到不同的server和网络设备上去,以减轻单台server和网络设备的负担,从而提高整个系统的效率。

  b、实现 网络冗余。

  在网络中,网络设备的可靠性是尤为重要的,特别是网卡。通过实现网络冗余,我们能够大大提高网络的可靠性和安全性;在生产型的系统中,大多通过硬件设备的冗余来提供server的可靠性和安全性;

  3、bonding的模式:

  第一种模式:mod=0 。即:(balance-rr) Round-robin policy(平衡抡循环策略)   
特点:数据传输包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完成)。 此模式提供负载平衡和容错能力;可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在client非常有可能会出现数据包无序到达的问题。而无序到达的数据包须要又一次要求被发送。这样网络的吞吐量就会下降    
另外一种模式: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、实验说明:

  某公司中的server,为了实现通信的负载平衡和容错能力。准备使用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/nf

  

  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地址;

  在负载均衡模式下,尽管提供负载平衡和容错能力;可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话。中途再经过不同的链路,在client非常有可能会出现数据包无序到达的问题,而无序到达的数据包须要又一次要求被发送。这样网络的吞吐量就会下降。

  案例 - 2:

  1、实验说明:

  某公司中的server,为了实现高可用性。准备使用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/nf

  

  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;


Linux中实现多网卡绑定

  一、原理介绍:

  1、什么是bonding?

  Linux bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用。用于网络负载均衡及网络冗余。

  Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备。通俗点讲就是两块网卡具有同样的IP地址而并行链接聚合成一个逻辑链路工作。

  2、bonding技术功能作用?

  bonding主要用于两个方向:

  a、实现 负载均衡。   
通过bonding技术。将网络的业务流量平均分配到不同的server和网络设备上去。以减轻单台server和网络设备的负担。从而提高整个系统的效率。

  b、实现 网络冗余;

  在网络中,网络设备的可靠性是尤为重要的,特别是网卡。通过实现网络冗余。我们能够大大提高网络的可靠性和安全性。在生产型的系统中,大多通过硬件设备的冗余来提供server的可靠性和安全性;

  3、bonding的模式:

  第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)   
特点:数据传输包顺序是依次传输(即:第1个包走eth0。下一个包就走eth1....一直循环下去,直到最后一个传输完成), 此模式提供负载平衡和容错能力;可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在client非常有可能会出现数据包无序到达的问题。而无序到达的数据包须要又一次要求被发送,这样网络的吞吐量就会下降    
另外一种模式: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、实验说明:

  某公司中的server,为了实现通信的负载平衡和容错能力,准备使用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/nf

  

  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地址。

  在负载均衡模式下,尽管提供负载平衡和容错能力;可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在client非常有可能会出现数据包无序到达的问题。而无序到达的数据包须要又一次要求被发送,这样网络的吞吐量就会下降。

  案例 - 2:

  1、实验说明:

  某公司中的server,为了实现高可用性,准备使用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/nf

  

  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。


在Linux中实现多网卡绑定

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

  一、原理介绍:

  1、什么是bonding?

  Linux bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余;

  Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备。通俗点讲就是两块网卡具有同样的IP地址而并行链接聚合成一个逻辑链路工作。

  2、bonding技术功能作用?

  bonding主要用于两个方向:

  a、实现 负载均衡。   
通过bonding技术,将网络的业务流量平均分配到不同的server和网络设备上去,以减轻单台server和网络设备的负担。从而提高整个系统的效率。

  b、实现 网络冗余。

  在网络中,网络设备的可靠性是尤为重要的。特别是网卡。通过实现网络冗余。我们能够大大提高网络的可靠性和安全性;在生产型的系统中。大多通过硬件设备的冗余来提供server的可靠性和安全性;

  3、bonding的模式:

  第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)   
特点:数据传输包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去。直到最后一个传输完成), 此模式提供负载平衡和容错能力。可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在client非常有可能会出现数据包无序到达的问题,而无序到达的数据包须要又一次要求被发送,这样网络的吞吐量就会下降    
另外一种模式: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、实验说明:

  某公司中的server,为了实现通信的负载平衡和容错能力,准备使用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/nf

  

  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地址。

  在负载均衡模式下,尽管提供负载平衡和容错能力;可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路。在client非常有可能会出现数据包无序到达的问题。而无序到达的数据包须要又一次要求被发送。这样网络的吞吐量就会下降。

  案例 - 2:

  1、实验说明:

  某公司中的server,为了实现高可用性,准备使用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/nf

  

  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。


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的网络负载均衡是我们在文件server中经常使用到的,比方把三块网卡。当做一块来用,解决一个IP地址,流量过大,server网络压力过大的问 题。对于文件server来说。比方NFS或SAMBA文件server,没有不论什么一个管理员会把内部网的文件server的IP地址弄非常多个来解决网络负载的问题。

假设在 内网中。文件server为了管理和应用上的方便,大多是用同一个IP地址。对于一个百M的本地网络来说,文件server在多个用户同一时候使用的情况下。网络压力是极 大的。特别是SAMABA和NFSserver。

为了解决同一个IP地址。突破流量的限制,毕竟网线和网卡对数据的吞吐量是有限制的。假设在有限的资源的情况 下,实现网络负载均衡,最好的办法就是 bonding ;
网络冗余。
对于server来说。网络设备的稳定也是比較重要的,特别是网卡。

在生产型的系统中。网卡的可靠性就更为重要了。

在生产型的系统中,大多通过硬件设备的冗余来 提供server的可靠性和安全性,比方电源。

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是不够的,与网卡相连的交换机必须做特殊配置(这两个port应该採取聚合方式),由于做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond执行在mode0下):

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

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

 

七种bond模式说明:

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

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

 

另外一种模式: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的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。

来自server端的接收流量也会被均衡。当本机发送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)技术,能够非常easy实现网口冗余,负载均衡。从而达到高可用高可靠的目的。

前提约定:

2个物理网口各自是:eth0,eth1

绑定后的虚拟口是:bond0

serverIP是: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的物理地址同样,这样是为了避免上位交换机发生混乱。

随意拔掉一根网线,然后再訪问你的server,看网络是否还是通的。

 

第四步。系统启动自己主动绑定、添加默认网关:

[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用的比較多。


(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是不够的,与网卡相连的交换机必须做特殊配置(这两个port应该採取聚合方式),由于做bonding的这两块网卡是使用同一个MAC地址. 
从原理分析一下(bond执行在mode 0下): 
mode 0下bond所绑定的网卡的IP都被改动成同样的mac地址,假设这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址相应的port就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个port转发呢?正常情况下mac地址是全球唯一的。一个mac地址相应多个port肯定使交换机迷惑了。 
所以 mode0下的bond假设连接到交换机,交换机这几个port应该採取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),由于交换机做了聚合后,聚合下的几个port也被捆绑成一个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….一直循环下去,直到最后一个传输完成),此模式提供负载平衡和容错能力;可是我们知道假设一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在client非常有可能会出现数据包无序到达的问题,而无序到达的数据包须要又一次要求被发送。这样网络的吞吐量就会下降

另外一种模式: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的唯一硬件地址。从而使得不同的对端使用不同的硬件地址进行通信。 
来自server端的接收流量也会被均衡。当本机发送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)技术,能够非常easy实现网口冗余。负载均衡,从而达到高可用高可靠的目的。

前提约定:

2个物理网口各自是:eth0,eth1

绑定后的虚拟口是:bond0

serverIP是: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的物理地址同样,这样是为了避免上位交换机发生混乱。

随意拔掉一根网线。然后再訪问你的server,看网络是否还是通的。

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

[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上非常easy能够将多块网卡绑定。实现负载均衡和双线热备的功能。 
负载均衡即将负载平均的分配到随意多块网卡上面,实现带宽的叠加 
双线热备即多块网卡互为备份,不论什么一块可以工作就可以保证网络正常执行。 
各个绑定类型的分别 
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地址都是一样的。

posted on 2017-08-13 21:08  lxjshuju  阅读(2005)  评论(0编辑  收藏  举报