APP下载

计算机集群中负载均衡技术的研究

2011-08-07张文斌

电子测试 2011年11期
关键词:集群分配服务器

张文斌

(中北大学电子与计算机科学技术学院,太原 030051 )

0 引言

随着计算机网络和通信技术的快速发展,越来越多的人通过互联网获取信息,大量用户进入网络,对各类信息中心或数据处理中心的服务器提出了更高的要求,需要它们既能合理的接受客户端的请求,又能在很短的时间内做出应答响应。为保证及时的处理用户请求,增加网络吞吐量,提高服务质量,势必需要对服务器软硬件进行升级,这时面临着两种选择:一是改善单个服务器的配置,如更换处理速度更快的服务器等以提高其性能,但这样做存在着缺陷:①硬件的升级及平台的迁移将造成设备中断一定时间的工作,对于某些不可中断的连接将造成很大的损失。②数据环境的迁移可能面临设备是否具有高可靠性和稳定性的风险。③升级服务器的软硬件配置,经济上是比较昂贵的,升级的代价比较高,对一般的用户而言是一件可望而不可及的事情。事实上,由于用户访问量的剧增,即使按照当时最优的网络配置,任何单一的网络设备也无法满足要求。另一种做法则是把多台服务器用局域网络连接成一个整体结构,通过并行处理及相互间的信息交流来扩展其性能。显然后者具有很高的整体性能、高可伸缩性、高可靠性和更高的性价比[1]。

对于提高服务器性能而言,单纯地靠提高单个处理器的运算能力和处理能力正在变得越来越难,而采用新技术、新体系构建高性能服务器,才是真正提高现代服务器处理能力的有效途径。这时,服务器集群技术的引入,无疑成为解决服务器性能瓶颈的一个有效手段。

1 集群技术

1.1 集群的概念

集群(Cluster)通过局域网将多台普通的计算机连接成一个整体,共同承担众多客户的请求,通过并行处理、相互间的高速信息交流和负载均衡技术,更好地让集群中资源达到共享,提高服务器负载处理能力,它们作为一个整体向用户提供一组网络资源。

一个理想的集群是,用户从来不会意识到集群系统底层的节点。在人们看来,集群是一个系统,而非多个计算机系统,该系统为客户工作站提供高可靠性的服务,并且集群系统的管理员可以随意增加和删改集群系统的节点。一个Cluster包含多台(至少2台)拥有共享数据存储空间的服务器。任何一台服务器运行一个应用时,应用数据被存储在共享的数据空间内。每台服务器的操作系统和应用程序文件存储在其各自的本地储存空间上,Cluster内各节点服务器通过一内部局域网相互通讯。当一台节点服务器发生故障时,这台服务器上所运行的应用程序将在另一节点服务器上被自动接管。当一个应用服务发生故障时,应用服务将被重新启动或被另一台服务器接管。当以上任一故障发生时,客户将能很快连接到新的应用服务上。

对集群的研究起源于集群系统的良好的性能可扩展性(scalability)。提高CPU主频和总线带宽是最初提供计算机性能的主要手段,但是这一手段对系统性能的提高是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了向量机、对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,像SMP这些多处理机系统的可扩展性就变得极差,主要瓶颈在于CPU访问内存的带宽并不能随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的增加几乎是线性变化的,如图1所示。

图1 不同计算机系统的扩展性图

1.2 集群的分类

目前应用最为广泛的集群计算技术可以分为3大类:高可用性集群技术、高性能计算集群技术和负载均衡集群技术[2]。

1.2.1 高性能计算科学集群

以解决复杂的科学计算问题为目的的IA集群系统。它是并行计算的基础,可以不使用专门的由十至上万个独立处理器组成的并行超级计算机,而是采用通过高速连接来链接的一组1/2/4 CPU的IA服务器,并且在公共消息传递层上进行通信以运行并行应用程序。这样的计算集群,其处理能力与真正超级并行机相等,并且具有优良的性价比。

1.2.2 负载均衡集群

负载均衡集群为企业需求提供更实用的系统。该系统使各节点的负载流量可以在服务器集群中尽可能平均合理地分摊处理。该负载需要均衡计算的应用程序处理端口负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载以实现平衡,对于网络流量也是如此。通常,网络服务器应用程序接受了大量入网流量无法迅速处理,这就需要将流量发送给其它节点。负载均衡算法还可以根据每个节点不同的可用资源或网络的特殊环境来进行优化。这种集群追求的不是高速的计算能力,而是快速的事务处理和响应能力。

1.2.3 高可用性集群

为保证集群整体服务的高可用,考虑计算机硬件和软件的容错性,如果高可用性集群中的某个节点发生了故障,那么这段时间内将由各分节点代替它,各分节点通常是主节点的镜像。所以当它代替主节点时,可以完全接管其任务,并且使系统环境对于用户是一致的。高可用性集群设计思想是要最大限度地减少服务中断时间。

在群集的这3种基本类型之间,高可用性群集也可以在其节点之间均衡用户负载,同时仍试图维持高可用性程度。同样,可以从要编入应用程序的群集中找到一个并行群集,它可以在节点之间执行负载均衡。在实际应用的集群系统中,这3种基本类型经常会发生混合与交叉。

2 负载均衡

2.1 负载均衡产生的原因及定义

负载均衡技术是集群系统中的关键部分,影响着集群系统的性能,对负载均衡技术的研究随着集群系统的发展而不断发展并趋于完善[3]。

负载是个抽象的概念,对服务器负载的一种定义方法是,将服务器上所有请求的服务时间之和定义为服务器的负载。负载描述的是系统的忙闲程度,系统在一定时间内比较空闲,则称系统在这段时间的负载较轻;系统在一段时间比较繁忙,则称系统在这段时间负载较重。对于一台特定的服务器,负载较轻意味着此时有较多的空闲处理能力,能够以较快的速度完成新到的请求工作。反之,负载较重表示系统已负荷累累,新到的请求仍需要与许多系统当前正在服务的请求一起分享服务器资源,因此服务响应时间要延长。负载是一种失效参量,描述的是系统的一种瞬态特性。并行的服务器集群系统中,每台服务器所获得的负载实际上是负载调度器分配的,负载分配的单位就是一个个单独的请求。由于将请求分配到不同的服务器上去所产生的效果是不一样的,因此,不同的请求分配策略,将会在各台服务器上产生不同的负载分布,进而导致整个系统的效率不同。

2.1.1 负载均衡产生的原因

分布式系统由于其任务到达的随机性,以及各处理节点处理能力上的差异,当系统运行一段时间后,某些节点分配的任务还很多造成超载,而另一些节点却是空闲的造成空载。如何避免这种空闲与忙等待并存的情况,从而有效地提高系统的资源利用率,减少任务的平均响应时间,这就成为了负载平衡产生的原因。

2.1.2 负载均衡的定义

负载均衡就是设法对己经提交给各节点的任务进行重新调度分配,并通过任务迁移,使各节点的负载大致平衡,从而提高系统资源的利用率,减少任务的平均响应时间,达到提高系统整体性能的目的[4]。

负载均衡是一种负载分配技术,它试图平衡系统内所有节点上的负载,以使得系统内各个节点上的负载基本相等,但这种相等不是简单的任务数目相等,而是根据这些节点自身的性能综合得出的负载权值相等,因此需要根据系统内节点的负载变化进行任务的动态迁移。

2.2 负载均衡技术原理

本质上讲,负载均衡是分布式作业调度系统的一种实现。均衡器作为网络请求分配的控制者,要根据集群节点的当前处理能力,采用集中或分布策略对服务请求进行调配,并且在每个服务请求的生命周期里监控各个节点的有效状态。负载平衡器在集群的各个服务节点中分配工作负载或网络流量。

负载均衡的作用就像轮流值日制度,把任务分给大家来完成,以免让一个人过度劳累。但是与轮流值日制度不同的是,它是一种动态均衡,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理分配出去。对于不同的应用环境使用的均衡策略(算法)是不同的,所以均衡策略(算法)也就有了多种多样的形式[5]。

2.3 负载均衡的分类

负载平衡可以分为静态负载均衡和动态负载均衡两大类。

2.3.1 静态负载均衡

就是根据过去的经验或系统本身信息收集,事先确定好网络中任务的分发策略。在任务的执行过程中,分发策略并不随着外部环境的变化而改变。由于网络上任务的达到具有不确定性,到达的时间、到达数量的多少都是未知的,实际上服务器在某种程度上处于一种被动的地位。这种被动地位导致服务器的执行具有盲目性,它始终只做一件事情,就是执行任务,即使同在一个集群中的服务器,相互之间也没有信息的交流。

在静态负载调度中,服务器执行任务的盲目表现在,当任务到达时,服务器会执行任务;当任务过多时,服务器还是按照原来的策略执行任务,而没有及时执行的任务只能够排队等候前面的任务执行结束,才有执行的机会;当没有任务时,服务器只能空闲着,不能够将其他服务器上排队等候的任务转移到自身来执行。这种情况下,服务器的性能就会有所下降。

因此,静态负载均衡根据预先设定好的方案来分配任务的策略,虽然可以很快速地将任务分配到对应的服务器上,具有简单性和系统开销小的优点,但它不考虑各节点服务器上的实际负载情况和整个系统的状态信息,高负载和低负载服务器之间不能够相互转移任务去执行,负载分发策略也不会在任务到达时来决定任务如何更好的分配。静态负载均衡策略只能在一定程度上实现负载均衡,均衡效果往往不能令人满意。

2.3.2 动态负载均衡

一般来说,动态负载均衡算法要比静态算法有更高的实用价值。动态负载均衡通过一些工具实时地分析数据包,掌握服务器的负载状况,把任务合理地分配出去。其分配算法是通过分析集群系统的实时负载信息,动态地将任务在各处理器之间进行分配和调整,以消除系统中负载分布的不平衡性。动态负载均衡算法考虑各节点服务器的实时负载和响应情况,将新进来的请求优先分配到某一评价值最高服务器上,以此来提高整个系统的吞吐量和降低响应时间。但是由于它必须收集并分析服务器状态信息,因此动态负载均衡算法会产生一定的额外开销。然而,这种开销可以被提高的各服务器效率抵消掉,因此动态负载分配算法成为目前的研究重点。

相比较静态负载均衡算法,动态负载均衡算法更为高效灵活。但是在某些情况下,动态负载均衡算法也有不足之处。比如,以连接数作为评价值,当客户通过TCP连接进行网络访问时,服务所需的时间和所要消耗的计算资源实际上是千差万别的,它依赖于很多因素,一些负载比较重的请求需要进行计算密集的查询、数据库访问、很长响应数据流;而负载比较轻的请求往往只需要读一个HTML页面或者进行很简单的计算。请求处理时间的千差万别可能会导致服务器利用的倾斜,即服务器间的负载不平衡。可能存在这样情况,有些服务器已经超负荷运行,而其他服务器基本是闲置着;同时,有些服务器已经忙不过来,有很长的请求队列,还不断地收到新的请求。反过来说,这会导致客户时间的等待,觉得系统的服务质量差。所以,它存在着以下两个问题[6]:

(1)它以连接来表示节点负载,并不能体现当前服务节点的负载情况。由于每个服务请求带来的负载不同,所以相同的连接数量并不能表示相同的负载。

(2)系统长时间运行下,计算得到的节点的负载量无法得到修正,必然会背离节点的实际负载状况,从而导致负载的不均衡。

3 用apache和tomcat搭建集群

3.1 环境说明

(1)服务器有3台,一台安装apache和tomcat,另外两台安装tomcat;

(2)所 需 软 件 :apache2.0.55、tomcat5.5.23 、jk2.0.5 、jdk1.6;

(3)环境配置:见表1。

3.2 负载均衡配置

(1)分别修改3个tomcat的配置文件conf/service.xml。

(2)重启3个tomcat,调试使之能够正常运行。

(3)修改apache安装目录conf/http.conf配置文件。

(4)在apache安装目录conf下,新建mod_jk.conf和workers2.properties配置文件,并写入相应的内容。

(5)在3个tomcat安装目录webapps建立相同的应用,并创建相同的WEB-INF和test.jsp页面。

(6)重启apache和3个tomcat服务器,测试是否能够正常访问。

表1 系统环境配置表

3.3 集群配置

(1)分别修改3个tomcat的配置文件conf/service.xml。

(2)添加异步负载Session文件。

4 测试结果

4.1 负载均衡测试

(1)打开3个IE窗口,分别访问3个不同的tomcat服务器。

分别输入 tomcat1 :名称:T1,值:T1;

tomcat2: 名称 :T2,值 :T2;

tomcat3:名称:T3,值:T3;

(2)3个tomcat服务器的信息

tomcat1输出的信息如图2所示。

图2 tomcat1输出信息图

tomcat2输出的信息如图3所示。

图3 tomcat2输出信息图

tomcat3输出的信息如图4所示。

图4 tomcat3输出信息图

从上面3张图中的输出信息我们可以看到,集群环境搭建成功并且实现了负载均衡。

4.2 集群容错能力测试

(1)关闭tomcat1和tomcat2,分别在3个IE的test.jsp输入。

tomcat1 :名称:RT1,值:RT1;

tomcat2: 名称 :RT2,值 :RT2;

tomcat3:名称:RT3,值:RT3;

(2)关闭了两个tomcat服务实例tomcat1和tomcat2,tomcat1和tomcat2的session会话信息会全部复制tomcat3服务实例上,Session没有丢失。具体信息如图5所示。

图5 容错测试结果图

由以上可以看出,使用apache和tomcat搭建的集群环境成功完成了测试,并且具有一定的容错能力,同时它具有一定的可扩展性,在实际的应用中可以具体情况采用相应的负载均衡算法完成相应的集群环境搭建[7-9]。

5 总结

本文简单介绍了计算机集群和负载均衡技术的基本概念,利用apache和tomcat搭建了集群环境,并成功完成了对负载均衡和容错能力的测试。当然,此实验只是简单地对搭建简单的集群环境进行了模拟,并对其进行了测试。在实际的应用中,要根据实际的情况采用相应的复杂均衡算法来完成集群环境的搭建。

[1]陈亮.集群负载均衡关键技术研究[D].南京:东南大学,2009.

[2]张志友.计算机集群技术概述[J].实验室研究与探索,2006,25(5):607-609.

[3]裴刚,曾卫东.分布式系统中网络负载平衡的研究[J].盘软件与应用,2010(6):62-63.

[4]戴翔,周晓峰.计算机集群中负载均衡技术[J].常州工学院学报,2005,18(6):43-46.

[5]戴翔.计算机集群中负载均衡机制的形式化分析[D].南京:河海大学,2006.

[6]卢照,张锦娟.MPI动态负载平衡策略的研究与实现[J].计算机技术与发展,2010,20(5):132, 136.

[7]张帆,袁道华,叶振.基于Linux的服务器集群系统设计及实现[J].计算机工程与应用,2006:45-48.

[8]张磊,姜弘道,潘海琳.计算机集群的搭建、测试与应用[J].水利水电科技进展,2006,26(2):65-69.

[9]温小飞,朱宗柏.高性能计算机集群的性能评价[J].武汉理工大学学报,2005,27(4):19-23.

猜你喜欢

集群分配服务器
应答器THR和TFFR分配及SIL等级探讨
通信控制服务器(CCS)维护终端的设计与实现
海上小型无人机集群的反制装备需求与应对之策研究
遗产的分配
一种分配十分不均的财富
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
中国服务器市场份额出炉
勤快又呆萌的集群机器人
得形忘意的服务器标准