您的位置:首页 > 运维架构 > Linux

centos双网卡bond绑定详解

2017-11-07 09:51 561 查看
绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片。

操作过程:
1、编辑虚拟网络接口配置文件,指定网卡IP(没有这个文件我们可以从以前的配置文件复制一个过来,减少输入的文字.)

[root@heng~]#cp/etc/sysconfig/network-scripts/ifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-bond0
确保/etc/sysconfig/network-scripts/ifcfg-bond0的内容和以下内容相同
[root@heng~]#cat/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.202
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet

2、编辑/etc/sysconfig/network-scripts/ifcfg-eth0与/etc/sysconfig/network-scripts/ifcfg-eth1,确保编辑后的内容和以下所显示的内容相同

[root@heng~]#cat/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none

[root@heng~]#cat/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1

ONBOOT=yes

BOOTPROTO=none

3、编辑/etc/moprobe.conf文件,加入如下一行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为bond0。请确保文件编辑后所显示的内容与以下内容相同
[root@heng~]#cat/etc/moprobe.conf
aliaseth0pcnet32
aliasscsi_hostadaptermptbase
aliasscsi_hostadapter1mptscsih
aliaseth1pcnet32
aliasbond0bonding
optionsbond0miimon=100mode=0
#红色字体为添加的内容

4、编辑/etc/rc.d/rc.local,请确保修改后的文件所显示的内容与以下内容相同[root@heng~]#cat/etc/rc.d/rc.local
#!/bin/sh
#
#Thisscriptwillbeexecuted*after*alltheotherinitscripts.
#Youcanputyourowninitializationstuffinhereifyoudon't
#wanttodothefullSysVstyleinitstuff.
touch/var/lock/subsys/local
ifenslavebond0eth0eth1
#红色字体为添加的内容

到这里配置已经完成,重启计算机,然后用ifconfig查看网卡信息,会看见多了一个名称为bond0的网卡。


CentOS5.5_双网卡绑定

Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。
首先要看linux是否支持bonding,RHEL4已经默认支持了。
[root@localhost
~]#modinfobonding
filename:/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/net/bonding/bonding.koauthor:ThomasDavis,tadavis@lbl.govandmanyothersdescription:EthernetChannelBondingDriver,v3.4.0-1version:3.4.0-1license:GPLsrcversion:
358EAAF5610876F44387AEFdepends:ipv6vermagic:2.6.18-238.9.1.el5SMPmod_unloadgcc-4.1
………………
………………
如果有类似上面的信息输出,说明已经支持了。
绑定步骤:
1.修改/etc/sysconfig/network-scripts/ifcfg-eth0配置文档
修改后的内容如下:
  DEVICE=eth0
  ONBOOT=yes
#系统启动时自动启用该设备
  BOOTPROTO=none   #启动时不使用任何协议
2.修改/etc/sysconfig/network-scripts/ifcfg-eth1配置文档
修改后的内容如下:
  DEVICE=eth1
  ONBOOT=yes#系统启动时自动启用该设备
  BOOTPROTO=none   #启动时不使用任何协议
3.创建一个绑定网络口的配置文档/etc/sysconfig/network-scripts/ifcfg-bond0
内容如下:
  DEVICE=bond0
#虚拟网卡名称
  BOOTPROTO=static
  IPADDR=192.168.0.2#IP地址
  NETMASK=255.255.255.0#子网掩码
  GATEWAY=192.168.0.1#网关
  BORADCAST=192.168.0.255#广播地址
  ONBOOT=yes
  TYPE=Ethernet
也可这样配置:
(1)编辑虚拟网络接口配置文件(bond0),并指定网卡IP
vi/etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.0.254BROADCAST=192.168.0.255NETMASK=255.255.255.0NETWORK=192.168.0.0GATEWAY=192.168.0.1USERCTL=noTYPE=Ethernet注意:建议不要指定MAC地址vi/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建议不要指定MAC地址vi/etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建议不要指定MAC地址
这样配置完就不需要第5步了。
4.修改/etc/modprobe.conf,配置绑定模型
加入以下内容:
  alias
bond0bonding
  optionsbond0millmon=100mode=0
说明:miimon=100miimon是指多久时间要检查网路一次,单位是ms(毫秒)这边的100,是100ms,即是0.1秒意思是假设其中有一条网路断线,会在0.1秒内自动备援mode共有七种(0~6)mode=0:平衡负载模式,有自动备援,但需要"Switch"支援及设定。mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必"Switch"支援及设定。
需要说明的是如果想做成mode
0的负载均衡,仅仅设置这里optionsbond0miimon=100mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode
0下):mode0下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=1arp_interval=100arp_ip_target=192.168.0.1"
5.修改/etc/rc.local,负责在系统启动时将虚拟网卡和两张物理网卡相绑定
增加以下内容:
  ifenslavebond0eth0eth1
这样配置完成,重启机器,就可以看到有一张bond0的新网卡。
可以查看bond0来得知当前状态:
[root@localhost
~]#cat/proc/net/bonding/bond0EthernetChannelBondingDriver:v3.4.0-1(October7,2008)BondingMode:loadbalancing(round-robin)MIIStatus:upMIIPollingInterval(ms):100UpDelay(ms):0DownDelay(ms):0SlaveInterface:eth0MIIStatus:upSpeed:
100MbpsDuplex:fullLinkFailureCount:0PermanentHWaddr:00:24:XXXXXXXXSlaveInterface:eth1MIIStatus:upSpeed:100MbpsDuplex:fullLinkFailureCount:1PermanentHWaddr:00:24:XXXXXXXX
[ubuntu10.04配置]
apt-get
installifenslave-2.6
vi/etc/network/interfaces
auto
bond0ifacebond0inetstaticaddress192.168.xx.xxgateway192.168.x.xnetmask255.255.255.0slaveseth1eth2##slaveseth0eth1eth2eth3eth4bond-mode0bond-miimon100

如果要绑定全部网卡,
用slavesall
七种bond模式说明:
第一种模式:mod=0,即:(balance-rr)Round-robinpolicy(平衡抡循环策略)特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降
第二种模式:mod=1,即:(active-backup)Active-backuppolicy(主-备份策略)特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有N个网络接口的情况下,资源利用率为1/N第三种模式:mod=2,即:(balance-xor)
XORpolicy(平衡策略)特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址XOR目标MAC地址)%slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力第四种模式:mod=3,即:broadcast(广播策略)特点:在每个slave接口上传输每个数据包,此模式提供了容错能力第五种模式:mod=4,即:(802.3ad)IEEE802.3adDynamiclinkaggregation(IEEE802.3ad
动态链接聚合)特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。必要条件:条件1:ethtool支持获取每个slave的速率和双工设定条件2:switch(交换机)支持IEEE
802.3adDynamiclinkaggregation条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式第六种模式:mod=5,即:(balance-tlb)Adaptivetransmitloadbalancing(适配器传输负载均衡)特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。该模式的必要条件:ethtool支持获取每个slave的速率
第七种模式:mod=6,即:(balance-alb)Adaptiveloadbalancing(适配器适应性负载均衡)特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receiveloadbalance,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个口只占了小部分流量



[root@localhost
~]#[root@localhost~]#ifconfigeth0Linkencap:EthernetHWaddr00:0C:29:6F:8F:B7inetaddr:110.5.10.177Bcast:10.5.10.255Mask:255.255.255.0inet6addr:fe80::20c:29ff:fe6f:8fb7/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:1594
errors:0dropped:0overruns:0frame:0TXpackets:832errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:212897(207.9KiB)TXbytes:101979(99.5KiB)Interrupt:67Baseaddress:0x2000eth1Linkencap:EthernetHWaddr00:0C:29:6F:8F:C1
inetaddr:10.5.10.29Bcast:10.5.10.255Mask:255.255.255.0inet6addr:fe80::20c:29ff:fe6f:8fc1/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:712errors:0dropped:0overruns:0frame:0TXpackets:75errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000RXbytes:131195(128.1KiB)TXbytes:11810(11.5KiB)Interrupt:67Baseaddress:0x2080loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0inet6addr:::1/128Scope:HostUPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:1459
errors:0dropped:0overruns:0frame:0TXpackets:1459errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:245559(239.8KiB)TXbytes:245559(239.8KiB)[root@localhost~]#[root@localhost~]#[root@localhost~]#servicenetworkrestart
Shuttingdowninterfaceeth0:[OK]Shuttingdowninterfaceeth1:[OK]Shuttingdownloopbackinterface:[OK]Bringinguploopbackinterface:[OK]Bringingupinterfacebond0:[OK]Bringingupinterfaceeth0:pcnet32deviceeth0doesnotseemtobe
present,delayinginitialization.[FAILED]Bringingupinterfaceeth1:[OK][root@localhost~]#ifconfigbond0Linkencap:EthernetHWaddr00:0C:29:6F:8F:B7inetaddr:110.5.10.177Bcast:10.5.10.255Mask:255.255.255.0inet6addr:fe80::20c:29ff:fe6f:8fb7/64
Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:1764errors:0dropped:0overruns:0frame:0TXpackets:926errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:239964(234.3KiB)TXbytes:119705(116.8KiB)Interrupt:67
Baseaddress:0x2000eth1Linkencap:EthernetHWaddr00:0C:29:6F:8F:C1inet6addr:fe80::20c:29ff:fe6f:8fc1/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:780errors:0dropped:0overruns:0frame:0TXpackets:90errors:0dropped:0
overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:144647(141.2KiB)TXbytes:16173(15.7KiB)Interrupt:67Baseaddress:0x2080loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0inet6addr:::1/128Scope:HostUPLOOPBACKRUNNINGMTU:16436
Metric:1RXpackets:1557errors:0dropped:0overruns:0frame:0TXpackets:1557errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:261105(254.9KiB)TXbytes:261105(254.9KiB)[root@localhost~]#modinfobondingfilename:/lib/modules/2.6.18-53.el5/kernel/drivers/net/bonding/bonding.ko
author:ThomasDavis,tadavis@lbl.govandmanyothersdescription:EthernetChannelBondingDriver,v3.1.2version:3.1.2license:GPLsrcversion:6CD19765D6431C07199456Edepends:vermagic:2.6.18-53.el5SMPmod_unload686REGPARM4KSTACKSgcc-4.1parm:max_bonds:Max
numberofbondeddevices(int)parm:miimon:Linkcheckintervalinmilliseconds(int)parm:updelay:Delaybeforeconsideringlinkup,inmilliseconds(int)parm:downdelay:Delaybeforeconsideringlinkdown,inmilliseconds(int)parm:use_carrier:Usenetif_carrier_ok
(vsMIIioctls)inmiimon;0foroff,1foron(default)(int)parm:mode:Modeofoperation:0forbalance-rr,1foractive-backup,2forbalance-xor,3forbroadcast,4for802.3ad,5forbalance-tlb,6forbalance-alb(charp)parm:primary:Primarynetwork
devicetouse(charp)parm:lacp_rate:LACPDUtxratetorequestfrom802.3adpartner(slow/fast)(charp)parm:xmit_hash_policy:XORhashingmethod:0forlayer2(default),1forlayer3+4(charp)parm:arp_interval:arpintervalinmilliseconds(int)parm:
arp_ip_target:arptargetsinn.n.n.nform(arrayofcharp)parm:arp_validate:validatesrc/dstofARPprobes:none(default),active,backuporall(charp)module_sig:883f350473854274432f7696771e6e11230fb09e34e7dba7e91b77e25d9ccb0ca9b4e6e5a1076a009f4091a23337f7cd53e737c1ec2189ff3a6d3cc738
[root@localhost~]#cat/etc/sysconfig/network-scripts/ifcfg-eth0#AdvancedMicroDevices[AMD]79c970[PCnet32LANCE]DEVICE=eth0ONBOOT=yes[root@localhost~]#
?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: