CentOS网卡聚合(平衡负载模式)
01 前言
在生产环境中,保障服务正常运行不仅仅是保证计算机硬件设备、软件系统等方面,作为网络环境中不可或缺的网络链路也是保障中非常重要的一环。计算机硬件设备、软件系统可以通过负载均衡或者主备模式对外提供服务,对于网络应用核心服务器,特别是承载高可靠性、实时性服务器,网络链路可靠性不容忽视。为保障网络服务器因网络链路故障造成异常服务的问题,CentOS提供多种应对措施。在CentOS系统中提供双网卡聚合(Bond)解决上述问题,本文通过示例将服务器多个物理网卡绑定,统一对外提供服务的方式解决网络链路故障的安全隐患。网卡聚合是一种在生产环境中常见的网络技术,其实现原理是将多张网卡绑定为一个逻辑网卡,并统一使用该逻辑网卡对外提供网络链接服务,以求实现本地网卡的冗余、带宽扩容和负载均衡等功能。
网卡Bond有多种实现模式,生产环境中常用的只有三种。具体分析如下:
- mode=0(load balancing (round-robin),平衡负载模式):该模式情况下,平时两块网卡同时工作,拥有本地网卡冗余、带宽扩容及负载均衡的能力。该模式下,数据包是通过轮询的方式实现分流,即第一个包走eth0,则第二个包走eth1,直至完成数据包分发。在该模式下,需要接入交换机端口聚合,否则不能实现该模式网卡聚合。
- mode=1(active-backup,主备模式):在该模式下,平时仅有一块网卡工作,拥有本地网卡冗余的能力。该模式下,在网卡故障时会自动替换为另外的网卡对外提供网络连接。
- mode=6(adaptive load balancing,平衡负载模式):该模式情况下,平时两块网卡同时工作,拥有本地网卡冗余、带宽扩容及负载均衡的能力。该模式下,数据包是通过ARP协商实现负载均衡。
本文通过实验完成多网卡聚合工作,且实验选择主备模式将物理网卡ifcfg-ens33及物理网卡ifcfg-ens37绑定为逻辑网卡bond0,从而实现双网卡绑定。具体实验环境声明如下:
02 编辑物理网卡双网卡聚合绑定时,各独立的物理网卡作为从网卡功能工作,双网卡逻辑绑定后服务于主网卡,在该过程中,从网卡是没有独立IP地址的。具体编辑如下:
[root@freeops ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=ens37
MASTER=bond0
SLAVE=yes
[root@freeops ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens38
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=ens38
MASTER=bond0
SLAVE=yes
03 编辑逻辑网卡
双网卡绑定后操作系统对外通过逻辑网卡bond0提供网络连接服务,该逻辑网卡内需要依据实际规划填写IP地址信息。编辑逻辑网卡bond0,具体如下:
[root@freeops ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=bond0
IPADDR=192.168.241.20
NETMASK=255.255.255.0
GATEWAY=192.168.241.1
NM_CONTROLLED=no
04 逻辑Bond驱动文件
完成物理网卡及逻辑网卡编辑工作后,需要编写逻辑网卡驱动文件,使逻辑网卡bond0设备支持网卡绑定技术(bonding),在该驱动文件中可以指定网卡绑定的实现模式,同时也可以通过该文件指定网卡故障后启动切换的时间。编辑逻辑网卡驱动文件,具体如下:
[root@freeops ~]# vim /etc/modprobe.d/bond.conf
alias bond0 bonding
options bond0 miimon=100 mode=6
# 指定逻辑网卡故障切换时间(单位:毫秒)及实现模式;
05 重启网络服务
完成上述操作后重启操作系统网络服务,重启网络服务后可以通过命令查看网卡IP地址。具体如下:
[root@freeops ~]# systemctl restart network.service
[root@freeops ~]# ip addr
1: ens37: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
link/ether 00:0c:29:b9:64:07 brd ff:ff:ff:ff:ff:ff
2: ens38: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
link/ether 00:0c:29:b9:64:11 brd ff:ff:ff:ff:ff:ff
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:b9:64:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.241.20/24 brd 192.168.241.255 scope global bond0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb9:6407/64 scope link
valid_lft forever preferred_lft forever
06 检测网卡状态
网卡聚合后,逻辑网卡绑定IP地址,但实际上对外提供服务仍是实际的物理网卡,可以通过命令查看当前网卡服务状态。查询网卡服务状态,具体如下:
[root@freeops ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: adaptive load balancing # 绑定模式:自适应负载平衡
Primary Slave: None
Currently Active Slave: ens37 # 当前活动从机:ens37;
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens37 # 显示ens37网卡基本信息;
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b9:64:07
Slave queue ID: 0
Slave Interface: ens38 # 显示ens38网卡基本信息;
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b9:64:11
Slave queue ID: 0
07 聚合链路功能测试
网卡聚合在主备模式时,具有链路冗余的功能。在该模式下,仅某一网卡正常使用,若网卡故障时会自动替换为另外的网卡对外提供网络连接。由上述示例可知,本试验中正在提供网络连接服务的是ens37网卡。在本地主机执行ping 192.168.241.20检查网络的连通性,然后模拟断开ens37网卡,检测链路主备冗余状态。具体如下:
[root@freeops ~]# ifdown ifcfg-ens37 # 模拟ens37网卡停止服务;
客户端执行命令测试服务端网卡联通性。具体如下:
C:\Users\admin>ping 192.168.241.20 -t # 测试bond0逻辑网卡联通性;
正在 Ping 192.168.241.20 具有 32 字节的数据:
来自 192.168.241.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间<1ms TTL=64
请求超时。# 因ens37网卡测试丢包;
来自 192.168.241.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.241.20 的回复: 字节=32 时间=1ms TTL=64
192.168.241.20 的 Ping 统计信息:
数据包: 已发送 = 12,已接收 = 11,丢失 = 1 (8% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms请求超时。
服务端查看逻辑网卡bond0对外提供的真实物理网卡。具体如下:
[root@freeops ~]# cat /proc/net/bonding/bond0 # 该命令仅可以查看状态为up的网卡信息
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: ens38 # 当前活动从机:ens38;
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens37 # 显示ens37网卡基本信息;
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:0c:29:b9:64:07
Slave queue ID: 0
Slave Interface: ens38 # 显示ens38网卡基本信息;
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:b9:64:11
Slave queue ID: 0