云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

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
  • 分享:
评论
还没有评论
    发表评论 说点什么