APP下载

企业集群系统网络动态反馈负载均衡算法研究

2022-05-31王茹刘锐吕欢欢

电脑知识与技术 2022年11期
关键词:负载均衡集群

王茹 刘锐 吕欢欢

摘要:随着企业科研生产的信息化不断发展,软硬件需求不断增加,如何提高设备利用率,控制作业进程在不同的服务器上合理分配,变成一个亟待解决的问题。文章通过在实际生产系统中的应用测试,比较分析静态负载均衡、动态负载均衡——最少连接数、动态负载均衡——动态反馈等算法在企业集群中的实用性,进而提出一套基于Linux专业应用软件的可伸缩、高可用的服务器集群动态反馈机制算法。

关键词:负载均衡;集群;动态反馈;作业调度;LVS

中图分类号:TN929.52      文献标识码:A

文章编号:1009-3044(2022)11-0033-03

1 引言

随着企业科研生产的信息化不断发展,应用软件数量增多,硬件设备使用量加大,网络系统不断延伸,设备忙闲不均的状况日益突出。如何提高设备利用率,控制作业进程在不同的服务器上合理分配,变成一个亟待解决的问题。本文拟通过对某款专业软件在单台服务器上的压力测试,来直观地反映负载不均对设备使用率以及用户体验的影响,继而探索企业集群系统网络动态负载均衡算法。

2 专业应用软件压力测试

以某款科研人员常用的专业软件E为例,对单台服务器进行压力测试。通过向该服务器,同时提交大小相同的一个作业、两个作业以及多个作业,观察作业计算过程中的CPU和内存使用情况,并记录整个作业的cpu-time(计算时间) 和elapsed-time(经历时间) ,以反映不同的负载情况对生产效率和用户体验的影响。

实验中用到的测试机器硬件配置为8核英特尔Xeon e5-2643处理器,主频3.30GHz,内存32G。实验中使用的作业A,数据体的大小为1.4M,计算结果为406M,计算时占用单台机器的8个CPU核。作业A来自科研生产实际使用数据,它的数据大小和计算使用的核数都是较为普遍的状况,有很好的参考价值。

图1分别为提交单个作业前后,测试服务器的系统状态。作业开始计算后,cpu的使用率迅速攀升至99%以上,并且维持在99%左右,而内存的占用率较小,仅使用0.9%左右。

从作业的日志文件中可以看出(图2) ,整个作业的cpu-time为705.35秒(约11分钟) ,elapsed-time为713.42秒(约12分钟) 。计算时间和经历时间都在可接受的范围内。

类似地,将两个相同的作业A同时提交给服务器,尽管CPU的使用率仍然在99%左右,每个作业分配到原有的cpu资源只有原来的一半,内存使用率相比之前稍高(如图3) 。而从作业的日志分析来看,每个作业都存在着抢夺CPU资源不成功而处于资源的询问与等待状态(如图4) 。

分别查看两个作业的日志文件(图5) ,两个作业的cpu-time分别为4111.06秒(约68分钟) 和4660.06秒(约78分钟) ,作业的elapsed time分别为8105.27秒(约135分钟) 和8643.46秒(约144分钟) 。与之前提交单个作业相比,用户的等待时间超过12倍。这样的计算效率,甚至不如将提交的作业进行排队,然后依次发往服务器进行计算。

可想而知,如果作业更复杂、提交作业的用户数继续增多,等待时间将被无限延长,计算时间和经历时间都是不可被接受的。

而这仅是单台服务器的压力测试情况,如果放在整个科研生产环境中,大量服务器,大量的科研人员使用,用户不知道哪台服务器被占用,哪台空闲。只能凭着使用习惯进行作业提交,这就会造成负载失衡,可能有的机器超负荷运转,而有的机器却在空闲状态,硬件资源无法得到充分的利用。

因此,将服务器构造成集群,研究对它的负载均衡算法,对内协调资源,对外统一提供服务。可以最大化地利用现有的计算资源,为提高科研生产的工作效率做贡献。

3 服务器集群的负载均衡

负载均衡集群的成败关键在于算法,好的算法可以科学地衡量各个服务器的负载轻重,动态地平衡整个系统的作业分配,使得整个系统高质高效地完成各类服务请求。负载均衡问题实际上是映射问题,一边是将要被执行的任务,另一边是负载集群的服务器节点,每个任务都对应着与它相联系的服务器,这种联系就是分发策略。根据分发策略,可以在任务和服务器之间建立了一对一或一对多的联系(如图6) 。

静态负载均衡是根据事先确定好的分配策略来进行分发,不使用集群中实时的负载状态来决定作业分配。而科研生产实际应用中,作业的性质、体量大小、当前服務器状态是随时变化的。因此,通过实时监测整个系统的负载状态,来进行任务分配,是最贴合应用实际的方法。通过事先预设算法的评价体系,动态计算系统中对应的每一台服务器的负载值,衡量哪一台在当前状态下最适合被用来处理任务,从而平滑整个系统的负担,输出高效的服务。以此为出发点,考虑以下动态负载均衡算法:

(1) 最少连接数

这种算法是,调度服务器事先制作作业统计表,统计该系统中每一台可以提供服务的设备的作业连接数。每当新来一个作业请求,就对照查找到应用连接数最少的服务器,并将这个作业分配给它。此时在调度服务器的作业统计表中,为该服务器的作业数加1[1]。待该作业计算完成,不再占用资源时,再次更新作业统计表,该服务器的作业数减1。

该算法适合作业计算量差距不大且服务器配置接近的应用系统。而实际应用中,应用软件每次提交的作业数据体量大小不一,设备由于购买批次、种类的不同,处理能力也不尽相同。这就造成可能某一台服务器目前分配的作业数量较少,但是数据体量大,系统占用资源多,而调度服务器只根据作业数来判断,还是不停地为该台服务器分配任务,最终导致响应和处理时间被不断延长。

(2) 动态反馈负载均衡算法

通过对最少连接数算法的应用实践,发现存在即使服务器负载过重,甚至出现超载情况时,仍有作业分配的情况。考虑让调度服务器收集集群系统中各设备的实时负载信息以及应答速率,动态地平衡整个集群系统各服务器之间的作业处理分配,以提高整个系统的运行效率[2]。

如图7负载均衡调度器动态地收集各服务的内存使用率、CPU使用率、作业数等负载信息,全面监控整个集群系统的负载状态。监控程序通过动态反馈负载均衡算法,计算一个在该体系下负载值最低的服务器,并将该作业请求送达该选中的服务器。每隔一段时间,集群中每一个节点的负载状况都会发生变化。因此,我们需要在每隔一个时间段内就重新监控负载状态,并更新调度器中记录的信息,以保证任务分配的准确性[3]。

4 企业集群动态反馈负载均衡方法研究

在企业的科研生产环境中,不同的软件在运行时资源占用情况不同。对CPU、内存、显卡以及I/O读写、网络性能需求的侧重点各有不同。科研硬件设备来自不同的厂商,不同的生产年份,以及不同的配置。应用环境复杂、应用场景多、应用需求各不相同。并且由于各种服务器、工作站的处理能力不同,不同的用户进行作业的复杂程度、时间长度也各不相同。通过实验与应用实践,在企业的生产环境中,使用动态反馈负载均衡算法,对整个集群系统进行作业调度是最合适的方法。

在动态反馈的算法中,每一次调度器轮询去查找各节点的CPU、内存、I/O、访问量等信息,都需要额外使用系统资源,尤其当系统节点较多时,这些开销是不可忽视的。因此,不可能一旦有作业请求,就立刻做一遍资源监控。只能按照事先约定好的时间周期,来进行定时的负载查询。而对于负载查询周期的设定,也需要根据应用环境反复实验、仔细测量,不能为了降低系统开销,就延长周期,这样会导致调度器信息滞后,而将大量的作业分配给本已超载的服务器。参考文献[4]的对这方面的实际测算,将集群负载的查询间隔设置为1-11s/次是最合适的。为提高调度器收集信息的效率,可以为每台服务器配置相应的进程,协助调度器收集负载信息。如果调度器与协助进程通讯无回应,则调度器标记该设备不可达,从服务器序列中删除该台设备,以防误分配。待该设备的协助进程重新与调度器建立连接,再更新相应的服务器记录,保证服务器的状态始终可达[5]。通过协助进程反馈的负载信息,调度器更新记录,并在每一次作业送达之时,根据预设算法,计算出最合适的服务器去完成任务。在进行负载均衡计算时,服务节点存在异构的情况,因此不仅要考虑节点的负载量,而且也必须要考虑到节点的处理能力。这样可以自然地让性能更强、配置更优的设备完成更多的作业请求,保证资源的物尽其用。

因此,我们将集群中某时刻某台服务器的处理能力记为S,它主要从这几个指标考虑:CPU、内存、进程数、I/O速率、网络能力等,我们分别标记为C、M、P、D、N。根据应用需要,这些指标可以部分或全部纳入计算。同时,我们还可以引入参数k(权值) ,来标识每一项指标对某一类作业的决定因素大小。由此,形成当前该服务器对该类作业的处理能力计算函数:

比如,对于本文用来做单台服务器压力测试的专业软件E来说,我们可以这样调整参数k,k={0.35,0.1,0.3,0.15,0.1},用以强调节点的CPU处理能力和最大进程数对该项服务的重要性。如果经实际测试,参数k的值不能恰当地反映应用对资源的比重需要,应用系统运维人员或业务人员可以对其不断修正,直到找到贴近实际情况最优的一组解。

类似地,在动态反馈算法中,我们需要用利用每一个时间周期监控的负载信息作为依据,来计算设备的综合负载情况,供选择实际执行任务服务器的最优解。我们将从调度服务器和集群实际服务器中获得的指标,来分别计算,作为负载选择的信息支持。以服务器上的进程连接数为例,来说明如何计算服务器的负载估值。计算进程数占用率是单位时间中,服务器处理的新任务占整个所计算周期中平均任务数的比。假设在时间T1和T2时,某台服务器上的连接数分别为P1和P2。那么在T2-T1的时间内,集群中的服务器Si新收到的任务数为Pi2-Pi1。因此,根据所取时间间隔数需要,我们就可以得到n个在T2-T1时间内,Si收到的新进程数Pi2-Pi1,新进程数占用率可以计算为:

INPUTi=Pi2-Pi1i=1n(Pi2-Pi1)n

除了进程数的多少,集群中各服务器的CPU使用情况、内存使用情况、I/O速率、网络带宽能力等,都是该设备负载信息在某一方面的体现,我们分别标记为C、M、D、N,来计算不同的因子对综合负载情况的影响。类似地,我们还可以引入参数r(权值) [3],来标识每一项指标对某一类作业的决定因素大小。其中[r(ri=1)] ,不同类型的服务器和应用,可根据需要调整每一项权值的系数大小。因此,某台服务器的综合负载L[6],可以以如下函数计算得出:

同理,对于本文用来做单台服务器压力测试的专业软件E,可将参数设置为r={0.35,0.1,0.3,0.15,0.1}。如果经实际测试,参数r的值不能恰当地反映应用对资源的比重需要,应用系统运维人员或业务人员可以对其不断修正,直到找到贴近实际情况,最优的一组解。

在实际运行的集群系统中,根据当前计算出的节点负载情况排序,选择负载最轻的服务器来承担相应的作业任务。也可以以事先划分资源池的方式,根据不同应用的实际需要(如:CPU需求型、内存需求型等) ,形成特定用途的集群。每当有作业请求提交时,先将其分配到资源池,再根据负载均衡算法计算出最优的实际服务器,进而提交作业任务。

5 结论

本文結合企业现有集群系统的应用现状,以某款常用应用软件E为例,对单台服务器进行压力测试,当作业量提高一倍或多倍时,生产效率超倍数地大幅降低,用户的等待时长超倍数增长。因此,本文通过在实际生产系统中的应用测试,比较分析静态负载均衡、动态负载均衡——最少连接数、动态负载均衡——动态反馈等算法在企业集群中的实用性,进而提出一套基于Linux专业应用软件的可伸缩、高可用的服务器集群动态反馈机制算法。

参考文献:

[1] 王中丹.完全计算机自动化—批处理程序自动执行系统[J].电大理工,2008(4):39-40.

[2] 周光友,郭庆平,刘鹏,等.一种视频服务器集群的动态反馈调度算法[J].小型微型计算机系统,2009,30(3):555-559.

[3] 陶胜,倪晓军,严献科.基于负载增量动态反馈的动漫渲染机制研究[J].电脑与信息技术,2016,24(6):4-6.

[4] 陈亮,王加阳.基于粗糙集的负载均衡算法研究[J].计算机工程与科学,2010,32(1):101-104.

[5] 何涛,李战怀,刘文洁.均衡负载实时反馈算法的实现[J].微处理机,2009,30(2):78-81.

[6] 张文昌,夏学知.基于剩余计算能力的动态负载均衡系统[J].计算机与数字工程,2010,38(9):135-139.

收稿日期:2021-12-27

作者简介:王茹(1988—) ,女,山西绛县人,中级职称,研究方向为计算机应用技术;刘锐(1987—) ,山东寿光人,中级工程师,硕士,研究方向为计算机应用技术;吕欢欢(1987—) ,女,广西玉林人,中级工程师,硕士,研究方向为海洋工程。

猜你喜欢

负载均衡集群
海上小型无人机集群的反制装备需求与应对之策研究
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
Linux负载均衡集群技术在网络服务器中的应用
Oracle MAA在汽车行业电子政务平台中的应用
异构环境下改进的LATE调度算法
对构建智慧产业集群的几点思考
多站点同步更新系统的设计
中华医学会医学期刊集群化发展的模式分析
模糊理论在Ad hoc网络通信领域的应用