一、Linuxbonding研究及实现LinuxBonding本文介绍Linux(具体发行版本是CentOS5.6)下的双卡绑定的原理及实现。Linux双网卡绑定实现是使用两块网卡虚拟成为一块网卡设备,这简单来说,就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。这项技术在Sun和Cisco中分别被称为Trunking和Etherchannel技术,在Linux的2.4.x及其以后的内核则称为Bonding技术。bonding的前提条件:网卡应该具备自己独立的BIOS芯片,并且各网卡芯片组型号相同。同一台服务器上的网卡毫无疑问是是符合这个条件的。Bonding原理bonding的原理:在正常情况下,网卡只接收目的硬件地址(MACAddress)是自身MAC的以太网帧,过滤别的数据帧,以减轻驱动程序的负担;但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络上所有的帧,bonding就运行在这种模式下,而且修改了驱动程序中的mac地址,将两块网卡的MAC地址改成相同,可以接收特定MAC的数据帧。然后把相应的数据帧传送给bond驱动程序处理。为方便理解bonding的配置及实现,顺便阐述一下Linux的网络接口及其配置文件。在Linux中,所有的网络通讯都发生在软件接口与物理网络设备之间。与网络接口配置相关的文件,以及控制网络接口状态的脚本文件,全都位于/etc/sysconfig/netwrok-scripts/目录下。网络接口配置文件用于控制系统中的软件网络接口,并通过这些接口实现对网络设备的控制。当系统启动时,系统通过这些接口配置文件决定启动哪些接口,以及如何对这些接口进行配置。接口配置文件的名称通常类似于ifcfg-name,其中name与配置文件所控制的设备的名称相关。在所有的网络接口中,最常用的就是以太网接口ifcfg-eth0,它是系统中第一块网卡的配置文件。虽然在不同的系统之间,文件的类型和数量并不一定相同,但各种的网络设备都需要用到这些文件保证设备的正常运作。bonding技术,就是通过配置文件建立绑定接口,从而实现多个物理网卡绑定到一个虚拟网卡。测试环境本次作业环境中,使用的是CentOS5.6,其系统信息如下:[root@support~]#cat/etc/issueCentOSrelease5.6(Final)Kernel\ronan\m[root@support~]#uname-aLinuxsupport2.6.18-238.9.1.el5#1SMPTueApr1218:10:13EDT2011x86_64x86_64x86_64GNU/Linux可以通过modinfobonding命令查看Linux是否支持bonding,据资料介绍,RHEL4已默认支持了,RHEL5、CentOS5毫无疑问也是支持的。系统有类似下面的信息输出,就说明已支持了。[root@support~]#modinfobondingfilename:/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.1parm:max_bonds:Maxnumberofbondeddevices(int)…………parm:debug:Printdebugmessages;0foroff(default),1foron(int)module_sig:883f3504da4d65c2ddc58dbbe9356811249c0a0993d9c1c5b9055a7e4f2b4d86e86ebb2c5fbdbf09e2c41b93ca13b6b809914bc6a201c3cf694855143Bonding配置通过在/etc/sysconfig/network-scripts/目录下创建ifcfg-bondN配置文件,就能够创建绑定接口。文件名称中的N为接口的编号,如第一个通道绑定接口的名称一般为ifcfg-bond0。ifcfg-bondN文件的内容与以太网接口的配置文件(如ifcfg-eth0)基本相同,只是DEVICE选项的值,应该为bondN。Bonding接口创建以后,被绑定的网卡必须在他们的设置文件里面添加MASTER和SLAVE两个参数。每个bonding接口的设置基本相同,具体配置如下:1、新建/etc/sysconfig/network-scripts/ifcfg-bond0文件,输入以下配置信息:[root@support~]#cat/etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0BOOTPROTO=staticIPADDR=10.8.0.231NETMASK=255.255.0.0NETWORK=10.8.0.0BROADCAST=10.8.255.255ONBOOT=yesUSERCTL=NOBONDING_OPTS=mode=0miimon=100说明:这里使用了BONDING_OPTS选项,则不需要再使用/etc/modprobe.conf配置文件对绑定设备进行配置。参数mode=0,指负载均衡模式,详见下文。miimon是用来进行链路监测的,其原理是检测网上的链路状态,一般将miimon值设为100,表示系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路。2、修改/etc/sysconfig/network-scripts/ifcfg-eth0网卡属性[root@support~]#cat/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=noneHWADDR=00:30:48:56:DA:72ONBOOT=yesMASTER=bond0SLAVE=yes3、修改/etc/sysconfig/network-scripts/ifcfg-eth1网卡属性[root@support~]#cat/etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1BOOTPROTO=noneHWADDR=00:30:48:56:DA:73ONBOOT=yesHOTPLUG=noDHCP_HOSTNAME=supportMASTER=bond0SLAVE=yes说明:修改单个网卡配置,主要是去掉IP地址、子网掩码等信息。同时添加MASTER及SLAVE两项参数。MASTER=bond-interface:bond-interface的值是以太网卡连接到的通道绑定接口的名称,这个指令与SLAVE指令配合使用。SLAVE=yes|no:yes-表示此设备可以由MASTER指令中配置的通道绑定接口进行控制。no-表示此设备不能由MASTER指令中配置的通道绑定接口进行控制。4、编辑/etc/modules.conf文件,添加:aliasbond0bonding,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为bond0[root@support~]#cat/etc/modprobe.confaliasbond0bondingaliaseth0e1000aliaseth1e1000aliasscsi_hostadapterata_piixaliasscsi_hostadapter1usb-storage注:在linux6下测试时,发现没有modprobe.conf这个文件,需要进入modprobe.d文件夹创建bond0.conf,再将“aliasbond0bonding”添加到里面[root@ara~]#cat/etc/modprobe.d/bond0.confaliasbond0bonding5、重启网络服务,以使用bond生效[root@support~]#servicenetworkrestart在网络设置可以看到bond0与eth0、eth1之间的主从关系[root@support~]#ifconfigbond0Linkencap:EthernetHWaddr00:30:48:56:DA:72inetaddr:10.8.0.231Bcast:10.8.255.255Mask:255.255.0.0inet6addr:fe80::230:48ff:fe56:da72/64Scope:LinkUPBROADCASTRUNNINGMASTERMULTICASTMTU:1500Metric:1RXpackets:19015errors:0dropped:0overruns:0frame:0TXpackets:4714errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:2557139(2.4MiB)TXbytes:469585(458.5KiB)eth0Linkencap:EthernetHWaddr00:30:48:56:DA:72UPBROADCASTRUNNINGSLAVEMULTICASTMTU:1500Metric:1RXpackets:10592errors:0dropped:0overruns:0frame:0TXpackets:2011errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:1295667(1.2MiB)TXbytes:209014(204.1KiB)eth1Linkencap:EthernetHWaddr00:30:48:56:DA:72UPBROADCASTRUNNINGSLAVEMULTICASTMTU:1500Metric:1RXpackets:8423errors:0dropped:0overruns:0frame:0TXpackets:2705errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:1261472(1.2MiB)TXbytes:260887(254.7KiB)loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0inet6addr:::1/128Scope:HostUPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:1178errors:0dropped:0overruns:0frame:0TXpackets:1178errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:2054820(1.9MiB)TXbytes:2054820(1.9MiB)至此,完成了bonding配置,系统已经在网卡的负载均衡模式下运行,随意拔掉一个网卡口的网线,网线依然正常。Bonding工作模式bonding的模式一共有7种,常用的为0、1两种:round-robin(balance-rr)0网卡的负载均衡模式active-backup1网卡的容错模式balance-xor2需要交换机支持broadcast3广播模式ieee802.3ad4动态链路聚合模式,需要交换机支持mode-tlb5自适应模式m