CentOS多网卡绑定

前端之家收集整理的这篇文章主要介绍了CentOS多网卡绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

1、概述

随着技术的发展,四张及以上的千兆以太网卡(NIC)已经变成了服务器的标配。而在生产环境中,为了保证Linux服务器的网络稳定,会对服务器的多张网卡通过绑定一个IP的方式来实现网卡的热备冗余,增强网络的高可用和提升网络吞吐,避免业务中断。

Linux的多网卡绑定功能使用的是内核中的"bonding"模块,主流Linux发行版本的内核均包含此模块。

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

其中常用的有三种:

mode=0round robin平衡负载模式,有自动备援,且增加了带宽,能够大幅提升服务器的网络吞吐(I/O),但需要交换机支持

mode=1:active-backup,主-备份策略,一张网卡处于活动状态 ,另一张处于备份状态所有流量都在主链路上处理。而且该模式下的网卡MAC地址是外部可见得,从外面看来,bond的MAC地址是唯一的,从而避免交换机发生混乱。该模式只提供了容错能力,而没有负载功能。优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。

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



2、mode=1测试

2.1 测试环境


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

本次测试通过VMware Workstation模拟。

2.2 添加网卡

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

wKiom1l2oJPi_GkqAACRSHE3b8Q597.png-wh_50

wKiom1l2oJTxKgfDAAAtCNBIhnk721.png-wh_50

查看网卡是否添加

[root@test-01~]#ifconfig-a
eth0Linkencap:EthernetHWaddr00:0C:29:66:30:36
inetaddr:192.168.10.51Bcast:192.168.10.255Mask:255.255.255.0
inet6addr:fe80::20c:29ff:fe66:3036/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:91errors:0dropped:0overruns:0frame:0
TXpackets:76errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:9813(9.5KiB)TXbytes:11278(11.0KiB)
eth1Linkencap:EthernetHWaddr00:0C:29:66:30:40
BROADCASTMULTICASTMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0(0.0b)TXbytes:0(0.0b)
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
inet6addr:::1/128Scope:Host
UPLOOPBACKRUNNINGMTU:65536Metric:1
RXpackets:80errors:0dropped:0overruns:0frame:0
TXpackets:80errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:5360(5.2KiB)TXbytes:5360(5.2KiB)


2.3 创建bond

[root@test-01~]#cd/etc/sysconfig/network-scripts/
[root@test-01network-scripts]#cpifcfg-eth0ifcfg-bond0
[root@test-01network-scripts]#vimifcfg-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-01network-scripts]#vimifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=on
BOOTPROTO=none
MASTER=bond0
SLAVE=yes


修改eth1:

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

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


2.4 模块加载

[root@test-01network-scripts]#echo"aliasbond0bonding">>/etc/modprobe.d/dist.conf
[root@test-01network-scripts]#echo"optionsbond0mode=1miimon=100">>/etc/modprobe.d/dist.conf

:miimon是用来监测链路的,单位是ms(毫秒),即系统每100ms监测一次链路连接状态,若有一条链路不通就转入另一条链路。mode=1表示fault-tolerance (提供冗余功能)。


2.5 重启网卡

[root@test-01~]#servicenetworkrestart


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

[root@test-01network-scripts]#ifconfig
bond0Linkencap:EthernetHWaddr00:0C:29:66:30:36
inetaddr:192.168.10.51Bcast:192.168.10.255Mask:255.255.255.0
inet6addr:fe80::20c:29ff:fe66:3036/64Scope:Link
UPBROADCASTRUNNINGMASTERMULTICASTMTU:1500Metric:1
RXpackets:33errors:0dropped:0overruns:0frame:0
TXpackets:31errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:2508(2.4KiB)TXbytes:3486(3.4KiB)
eth0Linkencap:EthernetHWaddr00:0C:29:66:30:36
UPBROADCASTRUNNINGSLAVEMULTICASTMTU:1500Metric:1
RXpackets:971errors:0dropped:0overruns:0frame:0
TXpackets:686errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:91772(89.6KiB)TXbytes:103730(101.2KiB)
eth1Linkencap:EthernetHWaddr00:0C:29:66:30:36
UPBROADCASTRUNNINGSLAVEMULTICASTMTU:1500Metric:1
RXpackets:14errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:872(872.0b)TXbytes:0(0.0b)
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
inet6addr:::1/128Scope:Host
UPLOOPBACKRUNNINGMTU:65536Metric:1
RXpackets:80errors:0dropped:0overruns:0frame:0
TXpackets:80errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:5360(5.2KiB)TXbytes:5360(5.2KiB)



3、mode=1验证

3.1 断开eth0测试

宿主机ping192.168.10.51测试:

ping-t192.168.10.51


默认连接的Slave是eth0,当断开eth0,观察到bond已经切换到eth1:

[root@test-01~]#cat/proc/net/bonding/bond0
EthernetChannelBondingDriver:v3.7.1(April27,2011)
BondingMode:fault-tolerance(active-backup)
PrimarySlave:None
CurrentlyActiveSlave:eth1
MIIStatus:up
MIIPollingInterval(ms):100
UpDelay(ms):0
DownDelay(ms):0
SlaveInterface:eth0
MIIStatus:up
Speed:1000Mbps
Duplex:full
LinkFailureCount:1
PermanentHWaddr:00:0c:29:66:30:36
SlavequeueID:0
SlaveInterface:eth1
MIIStatus:up
Speed:1000Mbps
Duplex:full
LinkFailureCount:1
PermanentHWaddr:00:0c:29:66:30:40
SlavequeueID:0


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

正在Ping192.168.10.51具有32字节的数据:
来自192.168.10.51的回复:字节=32时间=1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64
请求超时。
来自192.168.10.51的回复:字节=32时间<1msTTL=64
来自192.168.10.51的回复:字节=32时间<1msTTL=64


3.2 断开eth1测试

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

[root@test-01~]#cat/proc/net/bonding/bond0
EthernetChannelBondingDriver:v3.7.1(April27,2011)
BondingMode:fault-tolerance(active-backup)
PrimarySlave:None
CurrentlyActiveSlave:eth0
MIIStatus:up
MIIPollingInterval(ms):100
UpDelay(ms):0
DownDelay(ms):0
SlaveInterface:eth0
MIIStatus:up
Speed:1000Mbps
Duplex:full
LinkFailureCount:1
PermanentHWaddr:00:0c:29:66:30:36
SlavequeueID:0
SlaveInterface:eth1
MIIStatus:down
Speed:Unknown
Duplex:Unknown
LinkFailureCount:2
PermanentHWaddr:00:0c:29:66:30:40
SlavequeueID:0


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

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


4、mode=6测试

4.1 配置

配置方法和mode=1差不多。

在mode=1的基础上修改/etc/sysconfig/network-scripts/ifcfg-bond0

echo"BONDING_OPTS='miimon=100mode=6'">>/etc/sysconfig/network-scripts/ifcfg-bond0


将mode=1改为mode=6:

sed-i's#mode=1#mode=6#g'/etc/modprobe.d/dist.conf


重启网卡:

servicenetworkrestart


4.2 验证

再次查看网卡信息,eth1网卡的MAC地址都变成了原来的了:

[root@test-01~]#ifconfig
bond0Linkencap:EthernetHWaddr00:0C:29:66:30:36
inetaddr:192.168.10.51Bcast:192.168.10.255Mask:255.255.255.0
inet6addr:fe80::20c:29ff:fe66:3036/64Scope:Link
UPBROADCASTRUNNINGMASTERMULTICASTMTU:1500Metric:1
RXpackets:3922errors:0dropped:0overruns:0frame:0
TXpackets:3710errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:354254(345.9KiB)TXbytes:288643(281.8KiB)
eth0Linkencap:EthernetHWaddr00:0C:29:66:30:36
UPBROADCASTRUNNINGSLAVEMULTICASTMTU:1500Metric:1
RXpackets:3734errors:0dropped:0overruns:0frame:0
TXpackets:3517errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:337074(329.1KiB)TXbytes:270629(264.2KiB)
eth1Linkencap:EthernetHWaddr00:0C:29:66:30:40
UPBROADCASTSLAVEMULTICASTMTU:1500Metric:1
RXpackets:188errors:0dropped:0overruns:0frame:0
TXpackets:193errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:17180(16.7KiB)TXbytes:18014(17.5KiB)
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
inet6addr:::1/128Scope:Host
UPLOOPBACKRUNNINGMTU:65536Metric:1
RXpackets:83errors:0dropped:0overruns:0frame:0
TXpackets:83errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:5646(5.5KiB)TXbytes:5646(5.5KiB)


Bonding Mode也变成了adaptive load balancing:

[root@test-01~]#cat/proc/net/bonding/bond0
EthernetChannelBondingDriver:v3.7.1(April27,2011)
BondingMode:adaptiveloadbalancing
PrimarySlave:None
CurrentlyActiveSlave:eth0
MIIStatus:up
MIIPollingInterval(ms):100
UpDelay(ms):0
DownDelay(ms):0
SlaveInterface:eth0
MIIStatus:up
Speed:1000Mbps
Duplex:full
LinkFailureCount:0
PermanentHWaddr:00:0c:29:66:30:36
SlavequeueID:0
SlaveInterface:eth1
MIIStatus:down
Speed:Unknown
Duplex:Unknown
LinkFailureCount:0
PermanentHWaddr:00:0c:29:66:30:40
SlavequeueID:0

mode=6的主备冗余功能和mode=1一样,就不重复验证了。

mode=6负载均衡的工作机制是先占满eth0网卡的网络,再使用eth1的网络。

猜你在找的CentOS相关文章