像Samba、Nfs这样的共享文件系统,网络吞吐量非常大,对网卡造成很大的压力。网卡绑定是将多个物理网卡绑定为一个逻辑网卡,实现本地网卡的冗余、带宽扩展和负载均衡,具体功能取决于采用哪种模式。一、bond的七种模式介绍:1、mode=0(balance-rr)(平衡轮询策略)链路负载均衡,增加带宽,支持容错,链路故障自动切换到正常链路。交换机需要配置汇聚端口,思科称之为端口通道。特点:传输数据包的顺序是顺序传输(即:第一个包到eth0,下一个包到eth1....一直循环直到最后一个传输完成),这种模式提供了负载均衡和故障宽容;但是我们知道,如果一个连接或者会话的数据包是从不同的接口发出的,然后在中间经过不同的链路,在客户端可能会出现数据包乱序到达的问题,而出-of-order到达的数据包需要重新请求发送,这样网络的吞吐量会下降2、mode=1(active-backup)(主备策略)这个是active-standby模式,只有一种网卡一个是active,一个是standby,所有的流量都是activeLink处理,如果交换机配置了bind,就不行了,因为交换机给两个网卡发包,有一半的包被丢弃了。特点:只有一台设备处于活动状态,当一台出现故障时,另一台立即从备份设备转换为主设备。mac地址是外部可见的。从外部看,绑定的MAC地址是唯一的,以避免在交换机中混淆。这种模式只提供容错;可以看出,该算法的优点是可以提供网络连接的高可用性,但资源利用率低,只有一个接口处于工作状态。在N个网络接口的情况下,资源利用率为1/N3,mode=2(balance-xor)(平衡策略)表示XORHash负载分担,配合交换机的聚合强制非协商模式。(需要xmit_hash_policy,需要交换机配置portchannel)特点:根据指定的传输HASH策略传输数据包。默认策略是:(源MAC地址XOR目标MAC地址)%从机数量。可以通过xmit_hash_policy选项指定其他传输策略。此模式提供负载平衡和容错。4.mode=3(broadcast)(广播策略)表示所有数据包从所有网络接口发送。这是不平衡的,只是一个多余的机制,而且太浪费资源了。这种模式适用于金融行业,因为他们需要高可靠的网络,不能容忍任何问题。需要配合交换机的聚合强制非协商模式。特点:每个数据包在每个slave接口上传输,此模式提供容错5,mode=4(802.3ad)(IEEE802.3ad动态链路聚合)表示支持802.3ad协议,配合聚合LACP模式开关(需要xmit_hash_policy)。该标准要求所有设备在聚合时处于相同的速度和双工模式,并且与除balance-rr模式之外的所有其他绑定负载平衡模式一样,任何连接都不能使用多个接口带宽。特点:创建一个聚合组,它们共享相同的速度和双工设置。根据802.3ad规范,多个slave工作在同一个activeaggregate下。出站流量的slave选举是基于传输哈希策略,可以通过xmit_hash_policy选项从默认的异或策略更改为其他策略。需要注意的是,并不是所有的传输策略都兼容802.3ad,尤其是考虑到802.3ad标准43.2.4节中提到的数据包乱序问题。不同的实现可能有不同的适配。必要条件:条件1:ethtool支持获取每个slave的速度和双工设置条件2:交换机(switch)支持IEEE802.3ad动态链路聚合条件3:大部分交换机(switch)需要特定配置才能支持802.3adMode6,mode=5(balance-tlb)(adaptertransmissionloadbalancing)根据每个slave的负载选择slave发送,接收时使用当前slave。此模式需要从属接口的网络设备驱动程序提供某种ethtool支持;并且ARP监控不可用。特点:不需要任何特殊开关(switch)支持的通道绑定。根据当前负载(根据速度计算)在每个slave上分配出站流量。如果正在接收数据的从站发生故障,另一个从站将接管发生故障的从站的MAC地址。必要条件:ethtool支持获取每个slave的速率7,mode=6(balance-alb)(适配器自适应负载均衡)在5个tlb的基础上增加rlb(接收负载均衡)。不需要任何开关(Switch)支持。接收负载均衡是通过ARP协商实现的。特点:该模式包括balance-tlb模式,加上IPV4流量的接收负载均衡(rlb),不需要任何交换机(switch)支持。接收负载均衡是通过ARP协商实现的。bondingdriver拦截本机发送的ARP响应,将源硬件地址重写为bond中某个slave的唯一硬件地址,从而使不同的peer使用不同的硬件地址进行通信。来自服务器端的传入流量也是平衡的。当本机发送ARP请求时,绑定驱动程序从ARP数据包中复制并保存对端的IP信息。当来自对等方的ARP回复到达时,绑定驱动程序提取其硬件地址并将ARP回复发送到绑定中的从属设备。使用ARP协商进行负载平衡的一个问题是每次广播ARP请求时,都会使用绑定的硬件地址。因此,对端学习到这个硬件地址后,所有接收到的流量都会流向当前slave。这个问题可以通过向所有具有唯一硬件地址的对等点发送更新(ARP回复)来解决,从而重新分配流量。当一个新的从站被添加到绑定中,或者当一个不活动的从站被重新激活时,接收到的流量也会被重新分配。接收到的负载按顺序(循环)分布在绑定中速度最快的从设备上。当重新连接链路或将新的从站添加到绑定时,接收到的流量将在所有当前活动的从站之间重新分配,使用指定的MAC地址向每个客户端发送ARP回复。下面介绍的updelay参数必须设置为大于等于交换机(switch)的转发延迟的值,以保证发送给对端的ARPreply不会被交换机(switch)阻塞。必备条件:条件一:ethtool支持获取各个slave的速率;条件二:底层驱动支持设置某个设备的硬件地址,这样总有一个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond中的slave都有唯一的硬件地址。如果curr_active_slave失效,它的硬件地址会被新选择的curr_active_slave接管。其实mod=6和mod=0的区别:mod=6,先填满eth0流量,然后占用eth1,....ethX;而mod=0,你会发现两个端口的流量很稳定,带宽基本一样。而mod=6,你会发现第一个端口的流量很高,第二个端口只占流量的一小部分。交换机端不需要设置mode5和mode6,网卡可以自动聚合。mode4需要支持802.3ad。mode0、mode2、mode3理论上需要静态聚合。但是在实测中,mode0在没有设置开关的情况下,可以使用mac地址欺骗的方式接收不平衡接收。二、bond配置示例1、首先查看Linux是否支持bonding。大多数发行版都支持#modinfobonding|morefilename:/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/bonding/bonding.koauthor:ThomasDavis,tadavis@lbl.gov和其他人描述:以太网通道Bonding驱动程序,v3.6.0version:3.6.0license:GPLsrcversion:353B1DC123506708446C57Bdepends:8021q,ipv6vermagic:2.6.32-431.el6.x86_64SMP表示它输出支持以上信息如果不是,则表示内核不支持绑定。需要重新编译内核2和网卡配置文件。两个物理网口为:eth0,eth1绑定后的虚拟端口为:bond0[root@jacken~]#cat/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0HWADDR=EC:F4:BB:DC:4C:0CTYPE=EthernetUUID=669f0694-9c52-4792-bd67-22c9d2c17acbONBOOT=yesNM_CONTROLLED=noBOOTPROTO=noneMASTER=bond0SLAVE=yes[root@jacken~]#cat/etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=EC:HWADDRF4:BB:DC:4C:0DTYPE=EthernetUUID=1d2f30f4-b3f0-41a6-8c37-54f03115f7bdONBOOT=yesNM_CONTROLLED=noBOOTPROTO=noneMASTER=bond0SLAVE=yes[root@jacken~]#cat/etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0NAME='Systembond0'TYPE=EthernetNM_CONTROLLED=noUSERCTL=noONBOOT=yesBOOTPROTO=noneIPADDR=192.168.1.100NETMASK=255.255.255.0BONDING_OPTS='1miimon=100'IPV6INIT=noAutomaticallyloadmodulestothekernelwhenbooting#echo'aliasbond0bonding'>>/etc/modprobe.d/dist.conf#echo'optionsbondingmode=0miimon=200'>>/etc/modprobe.d/dist.conf#echo'ifenslavebond0eth0eth1'>>/etc/rc.localmiimon=100每隔100毫秒(也就是0.1秒)监听这条路的连接状态,如果有一条线路出现故障,转为另一行;Linux的多网卡绑定功能使用了内核中的“bonding”模块。如果修改为其他模式,只需要在BONDING_OPTS中指定mode=NumberUSERCTL=no--是否允许非root用户控制设备查看bond0状态:可以看到调用了哪些物理网卡#cat/proc/net/bonding/bond0[root@compute05~]#cat/proc/net/bonding/bond0以太网通道绑定驱动程序:v3.7.1(2011年4月27日)绑定模式:容错(主动备份)主要从属:无当前活动从属:eth1MII状态:upMII轮询间隔(毫秒):100Up延迟:0Down延迟(毫秒):0从接口:eth0MII状态:upSpeed:1000MbpsDuplex:fullLink失败计数:0永久硬件地址:ec:f4:bb:dc:4c:0c从队列ID:0从接口:eth1bDuplexMII状态:1upSpeed0:fullLink失败计数:0PermanentHWaddr:ec:f4:bb:dc:4c:0dSlavequeueID:03.在extension的最上面,两个网卡(eth0,eth1)绑定成一个bond0。如果我们要设置多个bond比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,那么网口设置文件的设置方法同上,只是/etc/modprobe.d/dist.conf文件无法叠加。正确的设置方法有两种:1、第一种是aliasbond0bondingaliasbond1bondingoptionsbondingmax_bonds=2miimon=200mode=1这样所有的bonds只能使用一种mode。2.第二个aliasbond0bondingoptionsbond0miimon=100mode=1installbond1/sbin/modprobebonding-obond1miimon=100mode=0installbond2/sbin/modprobebonding-obond2miimon=100mode=1installbond3/sbin/modprobeBonding-obond3miimon=100mode=0这样可以将不同的bond端口设置成不同的模式,注意/etc/rc.d/rc.local文件的设置自动启动ifenslavebond0eth0eth1ifenslavebond1eth2eth3ifenslavebond2eth4eth5ifenslavebond3eth6eth7作者:Jacken_yang来源:https://blog.51cto.com/linuxn...
