网卡,又称网络适配器。在网络中,如果没有网卡,那么这台设备将得不到服务器所提供的任何服务。当然,如果服务器没有网卡,那也就称不上是服务器了。
网卡捆绑,也叫网卡绑定,就是将几块网卡虚拟成为一个网卡,这个聚合起来的设备看起来是一个单独的网卡,几块网卡具有相同的IP地址而进行链路聚合成一个逻辑链路工作,以提供负载均衡或者冗余,增加带宽的作用,当一块网卡坏掉时,不会影响业务。在做捆绑之前,首先要看Linux是否支持bonding,CentOS 6.5已经默认支持了。
[root@node2 ~]# modinfo bonding
filename: /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/bonding/bonding.ko
author: Thomas Davis, [email protected] and many others
description: Ethernet Channel Bonding Driver, v3.6.0
version: 3.6.0
license: GPL
srcversion: 353B1DC123506708446C57B
depends: 8021q,ipv6
vermagic: 2.6.32-431.el6.x86_64 SMP mod_unload modversions
………………
………………
(1)编辑/etc/sysconfig/network-scripts/ifcfg-bond0,配置虚拟网络接口IP地址
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=1.2.6.201
BROADCAST=1.255.255.255
NETMASK=255.0.0.0
NETWORK=1.0.0.0
GATEWAY=1.0.0.254
USERCTL=no
TYPE=Ethernet
ARPCHECK=no
注意:建议不要指定MAC地址
DEVICE=eth4
HWADDR=8C:DC:D4:00:92:08
TYPE=Ethernet
UUID=05069419-2b97-456b-98c3-db82df224fcc
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
(3)(可选)编辑/etc/sysconfig/network-scripts/ifcfg-eth0,配置好之后重启网络会出现Determining if ipaddress 1.2.6.101 is already in use for device eth0…,但ip确实没有问题,可以访问,没有地址冲突,这是Linux网卡配置arp检查导致的,把这个关闭即可
添加ARPCHECK=no
(4)编辑/etc/modprobe.d/dist.conf,配置绑定类型
添加alias bond0bonding
options bond0 miimon=100 mode=0
说明:miimon=100是指多久时间要检查网络一次,单位是ms(毫秒),这边是100ms
mode共有七种(0~6)
1)mode=0,即:(balance-rr))Round-robin policy(平衡轮询环策略)。特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕), 此模式提供负载平衡和容错能力。
2)mode=1,即: (active-backup) Active-backup policy(主-备份策略)。特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力。
3)mode=2,即:(balance-xor) XOR policy(平衡策略)。特点:基于指定的传输HASH策略传输数据包。
4)mode=3,即:broadcast(广播策略)。特点:在每个slave接口上传输每个数据包,此模式提供了容错能力
5)mode=4,即:(802.3ad) IEEE 802.3ad Dynamic linkaggregation(IEEE 802.3ad 动态链接聚合)。第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic linkaggregation(IEEE 802.3ad 动态链接聚合)。特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE 802.3ad Dynamic linkaggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式
6)mode=5,即:(balance-tlb)Adaptive transmit load balancing(适配器传输负载均衡)。特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
必要条件:ethtool支持获取每个slave的速率
7)mode=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)。特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
必要条件:
条件1:ethtool支持获取每个slave的速率
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。
(5)编辑/etc/rc.d/rc.local,系统启动时将虚拟网卡和捆绑的物理网卡绑定
添加ifenslave bond0 eth4 eth5
配置完成,重启服务器,就可以看到一张bond0的新网卡。
[root@node1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth4
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 64:51:06:f0:27:e0
Slave queue ID: 0
Slave Interface: eth5
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 64:51:06:f0:27:e4
Slave queue ID: 0
通过验证查看,可以看到绑定后的虚拟网卡bond0,说明配置成功。
如果在RHEL6下执行:
servicenetwork restart时,报如下错误:Bringing up interface bond0: Error: Connection activation failed: Device not managed by NetworkManager
此错误是因为系统中默认由NetworkManager服务管理网络,可以将其停止:
[root@Hostname ~]#chkconfig NetworkManager off
[root@Hostname ~]#service NetworkManager stop
[root@Hostname ~]#chkconfig network on
[root@Hostname ~]#service network restart
注意NetworkManager区分大小写。
read -p "input your bond interface(eth0 eth1): " eth
echo $eth > /mnt/eth.txt
read -p "input your IPADDR(1.2.6.200): " IPADDR
read -p "input your BROADCAST(1.255.255.255): " BROADCAST
read -p "input your NETMASK(255.0.0.0): " NETMASK
read -p "input your NETWORK(1.0.0.0): " NETWORK
read -p "input your GATEWAY(1.0.0.254): " GATEWAY
read -p "input your mode(0-6): " mode
service NetworkManager stop
chkconfig NetworkManager off
for i in $(cat /mnt/eth.txt)
do
echo "USERCTL=no" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "MASTER=bond0" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "SLAVE=yes" >> /etc/sysconfig/network-scripts/ifcfg-$i
done
rm -rf /mnt/eth.txt
cd /etc/sysconfig/network-scripts
rm -rf ifcfg-bond0
touch ifcfg-bond0
echo "DEVICE=bond0" > ifcfg-bond0
echo "ONBOOT=yes" >> ifcfg-bond0
echo "BOOTPROTO=static" >> ifcfg-bond0
echo "IPADDR=$IPADDR" >> ifcfg-bond0
echo "BROADCAST=$BROADCAST" >> ifcfg-bond0
echo "NETMASK=$NETMASK" >> ifcfg-bond0
echo "NETWORK=$NETWORK" >> ifcfg-bond0
echo "GATEWAY=$GATEWAY" >> ifcfg-bond0
echo "USERCTL=no" >> ifcfg-bond0
echo "TYPE=Ethernet" >> ifcfg-bond0
echo "ARPCHECK=no" >> ifcfg-bond0
echo "alias bond0 bonding" >> /etc/modprobe.d/dist.conf
echo "options bond0 miimon=100 mode=$mode" >> /etc/modprobe.d/dist.conf
echo "ifenslave bond0 $eth" >> /etc/rc.d/rc.local
chkconfig network on
service network restart