APP下载

一种基于Linux集群技术的负载均衡方法

2014-07-18谢晓燕张静雯

西安邮电大学学报 2014年3期
关键词:轮询吞吐量集群

谢晓燕, 张静雯

(西安邮电大学 计算机学院, 陕西 西安 710121)

一种基于Linux集群技术的负载均衡方法

谢晓燕, 张静雯

(西安邮电大学 计算机学院, 陕西 西安 710121)

针对单纯提高硬件性能已经无法解决的网络服务质量问题,提出一种基于Linux集群技术的负载均衡分配方法。在Linux虚拟服务器异构集群的基础上,引入动态反馈模型来优化采集负载信息的通信机制,并通过智能分配策略来避免传统轮询算法对服务器资源的过度消耗。结合Linux脚本及命令进行性能测试,实验结果表明,提出的智能分配方法比加权轮询算法具有更好的响应时间和吞吐量。

负载均衡;Linux 虚拟服务器;调度算法

互联网日新月异的发展带来了3G井喷时代,客户端的增加和网络请求的实时性、突发性、并发性等特征带给了服务器巨大的压力,而单纯提高硬件性能根本无法满足需求。集群技术就是在这种情况下应运而生的。

集群的核心技术之一就是负载均衡,负载均衡通常由多台服务器以对称的方式组成一个服务器集群。每台服务器都具有等价的地位,可以单独对外提供服务而无需其他服务器的辅助。系统通过某种负载分担技术将外部发来的请求均匀分配到对称结构中的某一台服务器上或是将重负载节点的任务分担到多台服务器上做并行处理,接受到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器集群,从而提供快速获取重要数据并解决并发访问服务问题[1-2]。

目前最常用的负载均衡技术有基于DNS的负载均衡,反向代理负载均衡,基于NAT的负载均衡。基于DNS的负载均衡虽然简单易行但它不能稳定、可靠、高效地满足企业对服务器的需求也不能满足用户对网络访问的及时响应和可用性;基于NAT的负载均衡虽然很好地解决了IP地址紧张的问题,但是每次NAT转换势必会增加NAT设备的开销;反向代理服务器通过代理技术显著地提高了静态网络的浏览速度,改善了网络的访问质量并且保证了一定的安全性,但其在工作的时候需要为每一种应用服务专门设计反向代理,这就很大程度上增加了工作量。由此可见对负载均衡技术的选择取决于具体的环境和需求。

目前负载均衡算法的研究主要包括静态负载均衡、动态负载均衡和自适应负载均衡[3]。在对负载均衡的应用中,Linux虚拟服务器(Linux Virtual Server,LVS)负载均衡系统因其资源共享,源码公开和免费成为了当今的另一个研究热点。在LVS集群系统[4]中主要研究静态和动态两大类调度策略:静态调度策略是以定好的规则来分配资源,不考虑服务器的实时工作情况和负载状况,它在实现的时候比较容易但其适应性不强。当大量请求并发时容易造成节点之间负载不均衡,使系统整体性能变低。动态调度策略主要是以服务器当前的连接数来代表服务器的负载状况,经过具体的策略规则将请求发到合适的服务器上。

LVS作为基于Linux系统的负载调度技术,主要用于创建具有良好的可扩展性、高可靠性、高性能和高可用性集群[5],这样的集群系统在文献[6]中有很好的应用。在对LVS异构集群性能的集中研究中,文献[7]采用类似于网络管理的模式实现了动态反馈的最低利用率的最小连接数调度算法,文献[8]也对WLC权值的静态问题提出应该科学合理地整合硬件有效因素和协调网络应用性能指标来综合考虑。综上所述,在选择异构服务器集群算法的时候,大多都采用WLC算法直接进行解决,但是WLC算法作为一种动态算法,无论从实现复杂度还是资源消耗都远远大于静态算法。

静态轮询调度实现简单,响应时间比较短,但它在实现过程中均匀地将请求发送给每台服务器,并不会根据服务器集群的差异来分配资源,因此并不适合异构服务器集群,这就使得具有权值分配的加权轮询WRR作为对轮询算法RR的一个优化得到广泛的应用[9-10]。

本文拟针对LVS系统中服务器性能不一致的情况,引入动态负载反馈模型来优化通信机制,并在其基础上开辟两块共享内存来实现对不同状态服务器的处理。通过在服务器端开启上报进程和在负载均衡器上开启管理进程,以优化传统的轮询策略,实现集群节点的动态增加和屏蔽。

在LVS轮询调度算法的实现中,当服务器的性能存在差异的时候,服务器的整体性能取决于最差服务器的性能。如果在轮询策略中负载均衡器LD可以智能地分配请求,那么在理想状态下框架的性能可以达到最优。这就需要负载均衡器LD清楚RS集群的负载信息。本文在实现分配的时候,服务器需要上报自己的性能信息,负载均衡器不仅需要对服务器上报的信息进行处理还要及时根据分配策略来智能分配资源,因此不妨将文中所给方法称为智能分配算法。

1 LVS系统框架

在设计的LVS系统中,建立LD与RS集群的性能同步通信机制也就是动态反馈机制[11],使负载均衡器可以清楚后端RS集群的性能信息并且在分配请求的时候优先把请求分配到负载低的节点;对于负载高的RS节点,暂时停止分配请求并在每个时间周期去判断该高负载节点是否恢复正常。具体逻辑如图1所示。

图1 LVS系统框架

对LVS框架做如下优化。

(1) 在RS集群的每个节点开启agent进程,用来上报RS节点的负载信息;在负载均衡器上增加一个独立的模块monitor,用来接收agent的数据,并判读RS的健康情况。

(2) LD需要额外开辟两块共享内存来存放输出结果,存放“可用的RS”和“不可用的RS”。LD分配请求的时候需从“可用RS池”读取RS信息并转发请求。

(3) RS处理请求的同时,agent会实时监控服务器节点负载情况,按周期上报给LD的monitor模块,monitor模块根据agent上报的信息通过规则来判断RS是否可以继续处理更多的请求。

(4) 如果该RS负载信息正常,则把其放入“可用RS池”,等待LD的请求分配;如果该RS负载信息异常,则放入“不可用RS池”。同时LD还需要对“不可用RS池”的 RS节点进行监测。

2 算法研究及性能分析

传统的轮询算法在面对服务器性能一样的时候,通常能较好地分配任务请求,但是当服务器性能不一样的时候,往往不能使服务器资源利用最大化,这就使集群系统的整体性能受到影响。以下结合服务器的参数指标分析系统在不同情况下的服务器集群性能。

(1) 在一个具有n个服务器的集群中,服务器i的性能指标有很多[12],包括当前连接数、CPU使用率、内存使用率、输入/输出设备,网络带宽等等。在此假定CPU使用率为C,内存使用率为M,磁盘使用率为D,网卡使用率为W。在Web服务集群中,处理单次请求所需要的资源使用率分别为w,x,y,z。任何一个指标达到性能瓶颈都会影响服务器的处理性能,所以服务器i(i=1,2,…,n)的并发处理能力取决于函数

f(i)=min{Ci/w,Mi/x,Di/y,Wi/z} 。

为要保证集群有服务器,n应是大于0 的数。Ci,Mi,Di,Wi为服务器i当前使用率也就是i的动态参数。

当且仅当

(2) 在系统稳定且状态良好的时候,集群理想处理性能为各个真实服务器处理性能的总和。

(3) 在系统不稳定的时候,假设服务器i到达性能瓶颈并处在短暂屏蔽状态,则服务器i的处理性能约等于f(i),当且仅当

而此时集群中其它服务器的性能可以写成βf(i),即为除i外其它真实服务器性能的总和。β取值范围可表示为

此时系统仍然具有的理论处理能力为

F(x)-f(i)-βf(i)。

(4) 如果在短暂的屏蔽后,服务器i性能恢复正常,则系统目前的处理能力仍然为各个真实服务器处理能力的和。如果服务器i就此宕机,则此时系统具有的最大处理能力为F(x)-f(i)。

(5) 集群x的性能可表示为

通过对服务器集群性能的研究结合对轮询算法的理解可知,轮询调度并不适合异构服务器集群。带有权值的轮询算法能够很好地解决异构服务器集群性能不一的情况,它根据静态配置的权值来分配工作请求。但是在所有权值算法中,都有如下两个问题无法避免:其一就是各个服务器间的性能无法完美的符合M∶N,其次就是即使在权值比接近完美的时候,个别服务器会因为突发地运行某些服务或者处理异常的请求导致权值比失去平衡;而且当系统运行一段时间或增加节点时势必需要重新配置,增加了集群的维护成本。此外,如果权值分配不合理则会使系统性能得不到充分的利用甚至还会引发服务器宕机;即使在权值分配理想的情况下,由于它无法动态地获取服务器的真实状况,因此无法根据服务器的具体性能变化而及时动态合理地分配请求。智能分配策略可以动态地监测每台服务器的负载信息,灵活增加节点以及屏蔽不可用的节点,具体实现如图2所示。

图2 系统流程

业务通过外网把请求发送到负载均衡器LD的外网卡,LD接收到请求后查询“可用的RS池”,通过策略将请求发送给合适的RS进行处理。处理完成后通过RS本身外网卡把处理结果直接反馈给用户,这里采用的是LVS-DR方式。RS上部署的agent进程会定期把RS的性能数据和负载状况上报到LD“存储RS负载模块”,然后通过规则进行判断。如果该RS可用,则把该RS的信息更新到“可用的RS池”,否则把该RS放到“暂不可用的RS池”,同时把该RS的信息在“可用的RS池”中去掉相当于屏蔽这个节点,等待一个周期后再由agent上报数据进行判断。当需要动态增加一个节点的时候,只需要为其开启agent进程就可以正常上报信息了。

3 系统测试及分析

通过虚拟机来实现系统的搭建和测试,在负载参数的采集过程中由于CPU使用率、内存使用率以及磁盘使用率数据波动不大,选择网卡来验证算法,当网卡超过规定的阈值时就自动进行屏蔽。实验平台选择Redhat企业版本,其中Linux内核版本为2.6,采用Linux系统管理工具和shell脚本来共同完成。测试拓扑图如图3所示。

图3 测试拓扑图

通过测试获取基于LVS-DR方式的Web服务的吞吐量及响应时间,通过对WRR算法和智能分配算法分别进行压测来验证服务集群的性能,其中后端服务器的参数信息如表1。

表1 服务器性能对比表

针对上表服务器性能不统一的情况,智能分配算法通过优化轮询算法RR来避免静态算法中权值的选择。用RI表示RS1的性能,Ri表示RS2的性能,通过表1可以大致地认为2Ri

ab -n 2000 -c 4 http://192.168.0.254/a.file来实现,其中-n和-c分别表示一共要发送的请求数和一次并发的请求数。整个命令表示对192.168.0.254下的a.file文件发送2 000个请求,每次并发4个。

通过调整-c后面的参数来调整并发的数目。多次测试后,通过ipvsadm命令可以查看WRR的连接数比例基本为3∶1。对智能分配算法和加权轮询算法WRR从1至17不断调整并发数,分别比较其响应时间和吞吐量,结果如图4所示。

(a) 响应时间

(b) 吞吐量

通过图4对加权轮询算法WRR进行分析,WRR算法在并发为4的时候,吞吐量达到最大值,该点也正好符合权值3∶1的分配。同时在并发为8,12的时候吞吐量也略有毛刺。并发为14的时候性能较好的RS1首先出现失败率徒增,原因是RS1与RS2的性能关系是2Ri

同样,通过上图对智能分配算法进行分析。

(1) 并发为1到13之间,两种算法的响应时间和吞吐量相差不大,WRR算法按照3∶1给RS1和RS2分配请求,智能分配算法仍按照轮询算法来分配请求。因此RS1和RS2的性能都正常。通过测试,在并发为6的时候,智能分配算法吞吐量达到最佳,系统性能基本上为F(x)。

(2) 在并发为14和15的时候,RS1性能比RS2好,系统运行基本正常。随着并发数继续增加,RS2渐渐出现性能问题。在并发为16的时候,智能分配算法已暂停给RS2分配请求了,此时系统的性能为

F(x)=f(i)+βf(i),

其中f(i)为RS2的性能,可以看出此时智能分配算法的响应时间曲线与吞吐量曲线优于WRR算法。

(3) 当并发数达到17的时候,RS2宕机了。智能分配算法和WRR算法均出现了大量的失败,吞吐量有所下降。图中智能分配算法的响应时间在并发数17的时候会超过WRR算法,可能是因为当并发请求继续增加的时候,系统进行算法判断、处理中断的代价增大造成了响应时间的延长。

综上所述,对于整体系统而言,智能分配算法在响应时间上比WRR算法短,吞吐量比WRR算法高,在整体性能上比加权轮询算法WRR优。

4 结 语

在LVS轮询算法的基础上引入了动态反馈机制,避免了静态分配所造成的负载分配不均衡。通过对比轮询算法最常用的优化策略,即加权轮询算法,提出了智能分配策略,既避免了轮询算法对异构服务器集群资源的浪费,也避免了加权轮询算法中权值静态分配所造成的不适应性。

使用Linux脚本对智能分配方法进行了测试,测试结果表明,智能分配策略比加权轮询算法具有更好的响应时间及吞吐量。通过对比加权轮询算法WRR和智能分配算法的响应时间与吞吐量,可以明显地看出智能分配算法的整体响应时间比加权轮询算法WRR低,吞吐量比加权轮询算法WRR高。由此可见,智能分配算法的整体性能优于加权轮询算法,它是轮询算法的一个很好的优化策略。

[1] 汤君.基于集群的动态反馈负载均衡系统的研究与应用[D].天津:天津大学,2008:11-12.

[2] 朱志祥,许辉辉,王雄.基于云计算的弹性负载均衡方案[J].西安邮电大学学报,2013,18(6):43-47.

[3] Valeria C, Michele C, Philips Y. Dynamic Load Balancing on Web-Server Systems[J]. IEEE Internet Computing,1999,3(3):28-29.

[4] 崔小燕.Linux集群系统分析[J].西安邮电学院学报,2006,11(5):103-106.

[5] 李莉,卢春,杨柯.LVS:优秀的服务器集群解决方案[J].信息安全与通信保密,2011(9):74-77.

[6] Xu Yang, Xie Xiaoyao, Xia Daoxun. Research and Design on LVS Cluster System[C]//2009 IEEE International Workshop on Open-source Software for Scientific Computation. Guiyang: IEEE, 2009:68-72.

[7] 谢茂涛,宋中山.LVS集群系统负载均衡策略的研究[J].计算机工程与科学,2006,28(8):30-39.

[8] 刘玉艳.LVS负载均衡技术在网络服务中的应用研究[D].合肥:合肥工业大学,2007:34-35.

[9] 李慧玲,周继成.加权轮询算法在TCP非对称网络中的应用及其性能分析[J].计算机工程与技术,2000(3):10-11.

[10] 张鹏,俞伯峰,庞琳,等.基于公平服务多维加权轮询调度的IPTV组播流量控制策略[J].计算机应用,2008,28(7):1832-1834.

[11] 田绍亮,左明,吴绍伟.一种改进的基于动态反馈的负载均衡算法[J].计算机工程与设计,2007,28(3):572-573.

[12] 刘武钊.集群计算机系统负载均衡技术研究[D].哈尔滨:哈尔滨工程大学,2008:19-22.

[责任编辑:王辉]

A method of load balancing based on Linux cluster

XIE Xiaoyan, ZHANG Jingwen

(School of Computer Science and Technology, Xi’an University of Posts and Telecommunications, Xi’an 710121, China)

The rapid increase of concurrent request brings great burden on the server. Simply raising the performance of hardware cannot fundamentally solve the problem and on the contrary it will increase overhead cost. Therefore load balancing is becoming one of hot research topics. The proposed method in this paper is based on the LVS heterogeneous cluster. It adopts dynamic feedback mechanism to optimize the communication mechanisms of load information collection, and gives an intelligent allocation method to improve the overall system performance. The experiment results show that the proposed method can significantly improve throughput and decrease response time compared with the weighted round robin algorithm.

load balancing, Linux virtual server, dispatch algorithm

10.13682/j.issn.2095-6533.2014.03.013

2014-03-11

陕西省自然科学基础研究计划资助项目(2012JQ8029);陕西省教育厅科研计划资助项目(12JK0938)

谢晓燕(1972-),女,副教授,从事网络及服务计算研究。E-mail:35731599@qq.com 张静雯(1989-),女,硕士研究生,研究方向为计算机网络和多媒体技术。E-mail:773684821@qq.com

TP399

A

2095-6533(2014)03-0064-05

猜你喜欢

轮询吞吐量集群
海上小型无人机集群的反制装备需求与应对之策研究
基于等概率的ASON业务授权设计∗
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
2017年3月长三角地区主要港口吞吐量
2016年10月长三角地区主要港口吞吐量
2016年11月长三角地区主要港口吞吐量
勤快又呆萌的集群机器人
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排