首页 > 代码库 > CentOS多网卡绑定

CentOS多网卡绑定

防伪码:没有相当程度的孤独是不可能有内心的平和。

1、概述

随着技术的发展,四张及以上的千兆以太网卡已经变成了服务器的标配。而在生产环境中,为了保证Linux服务器的网络稳定,会对服务器的多张网卡通过绑定一个IP来实现网卡的热备。

网卡绑定的模式(mode)共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6

其中常用的有三种:

mode=0:平衡负载模式,有自动备援,但需要交换机支持

mode=1:active-backup,主-备份策略,自动备援模式,其中一条线若断线,其他线路将会自动切换过去。而且MAC地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免交换机发生混乱。此模式只提供了容错能力,没有负载功能。优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。

mode=6:平衡负载模式,有自动备援,不需要交换机支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。

2、mode=1测试

2.1 测试环境


主机名IP系统
test-01192.168.10.51CentOS release 6.9 (Final)

本次测试通过VMware Workstation模拟。

2.2 添加网卡

在【虚拟机设置】中添加网络适配器。

技术分享

技术分享

查看网卡是否添加:

[root@test-01 ~]#ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
inet addr:192.168.10.51  Bcast:192.168.10.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe66:3036/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:91 errors:0 dropped:0 overruns:0 frame:0
TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9813 (9.5 KiB)  TX bytes:11278 (11.0 KiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:66:30:40
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5360 (5.2 KiB)  TX bytes:5360 (5.2 KiB)


2.3 创建bond

[root@test-01 ~]#cd /etc/sysconfig/network-scripts/
[root@test-01 network-scripts]#cp ifcfg-eth0 ifcfg-bond0
[root@test-01 network-scripts]#vim ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
ONBOOT=on
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.10.51
GATEWAY=192.168.10.2
NETMASK=255.255.255.0
DNS1=223.5.5.5


修改eth0:

[root@test-01 network-scripts]#vim ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=on
BOOTPROTO=none
MASTER=bond0
SLAVE=yes


修改eth1:

[root@test-01 network-scripts]#vim ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=on
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

说明:MASTER=bond0和SLAVE=yes这两行主要是用于系统service network restart后自动启用。


2.4 模块加载

[root@test-01 network-scripts]#echo "alias bond0 bonding" >>/etc/modprobe.d/dist.conf
[root@test-01 network-scripts]#echo "options bond0 mode=1 miimon=100" >>/etc/modprobe.d/dist.conf

说明:miimon是用来进行链路监测的,单位是ms(毫秒),即系统每100ms监测一次链路连接状态,若有一条线路不通就转入另一条线路。


2.5 重启网卡

[root@test-01 ~]#service network restart


bond0、eth0和eth1的MAC地址均变成之前eth0的MAC地址。

[root@test-01 network-scripts]#ifconfig
bond0     Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
inet addr:192.168.10.51  Bcast:192.168.10.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe66:3036/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2508 (2.4 KiB)  TX bytes:3486 (3.4 KiB)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:971 errors:0 dropped:0 overruns:0 frame:0
TX packets:686 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:91772 (89.6 KiB)  TX bytes:103730 (101.2 KiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:66:30:36
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:872 (872.0 b)  TX bytes:0 (0.0 b)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5360 (5.2 KiB)  TX bytes:5360 (5.2 KiB)




3、验证

3.1 断开eth0测试

宿主机ping192.168.10.51测试:

ping 192.168.10.51


断开eth0,观察到bond已经切换到eth1:

[root@test-01 ~]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:66:30:36
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:66:30:40
Slave queue ID: 0


在宿主机上观察到ping有一次丢包:

正在 Ping 192.168.10.51 具有 32 字节的数据:
来自 192.168.10.51 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
请求超时。
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64


3.2 断开eth1测试

同理,连接eth0,断开eth1,bond切换到eth0:

[root@test-01 ~]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:66:30:36
Slave queue ID: 0
Slave Interface: eth1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 2
Permanent HW addr: 00:0c:29:66:30:40
Slave queue ID: 0


切换的时候也丢了一次包:

来自 192.168.10.51 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
请求超时。
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
请求超时。
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.51 的回复: 字节=32 时间<1ms TTL=64



本文出自 “简明Linux” 博客,请务必保留此出处http://easylinux.blog.51cto.com/9732761/1950665

CentOS多网卡绑定