《电子技术应用》
您所在的位置:首页 > 通信与网络 > 业界动态 > 动态反馈负载均衡在LVS集群中的设计与实现

动态反馈负载均衡在LVS集群中的设计与实现

2008-07-14
作者:秦 刘, 兰巨龙, 杨 帅, 智

    摘 要: 在Linux内核中实现的负载均衡" title="负载均衡">负载均衡调度算法都是静态的,没有动态调节机制。介绍了LVS集群原理,分析了LVS调度算法的不足,提出了一种通过实时获取真实服务器" title="真实服务器">真实服务器的性能数据、计算和评估真实服务器负载,并根据结果调节服务器权值" title="权值">权值的方法。经测试,利用该方法能够有效防止服务器负载倾斜,达到良好高负载均衡的效果。
    关键词: 负载均衡 LVS 集群 负反馈

 

    近年来,Internet的迅速发展使得人们已经习惯从网络上获取任何想要的资源,在这种情况下需要网络服务器具备提供大量并发访问所需服务的能力。然而,单一服务器的处理能力" title="处理能力">处理能力很难满足服务要求,已成为网络系统的瓶颈。简单地提高单个服务器硬件性能或者更换性能更高的服务器,都不能真正地提供大量并发访问的能力。因为单台服务器的性能总是有限的,而且网络请求具有突发性,即当有重大事件发生时,网络访问量会急剧上升,从而造成网络阻塞。
    利用集群技术在服务器应用系统中实现负载均衡可以有效地解决上述问题。Linux的虚拟服务器LVS(Linux Virtual Server)可以完成基于IP层和基于内容请求分发的负载平衡调度,并在Linux内核中实现这些方法,将一组服务器构成一个能实现可伸缩的、高可用网络服务的服务器集群。本文在分析现有LVS负载均衡调度算法的基础上,针对其不足,提出一种可动态调整服务器权值的负载均衡调度算法。
1 LVS集群介绍
1.1  LVS集群的结构[1]

    LVS是由基于Linux操作系统的负载均衡服务器(LB)和基于任意支持TCP/IP平台的支撑服务器RS(Real Server)群组成的高扩展性和高稳定性的虚拟服务器。在LVS集群中,服务器集群的结构对用户是透明的,用户访问集群提供的网络服务就像访问一台高性能、高可用的服务器一样。LVS集群的通用体系结构如图1所示,主要由以下三部分组成:

 

 

    (1) 负载调度器" title="调度器">调度器(load balancer):它是整个集群对外的前端机,负责将用户的请求发送到一组服务器上执行,但从用户角度来看,服务来自一个IP地址。它可以是基于IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。
    (2) 服务器池(server pool):是一组真正执行用户请求的服务器,执行的服务有Web、MAIL、FTP和DNS等。
    (3) 后端存储(backend storage):它为服务器池提供一个共享的存储区,这样可使服务器池很容易拥有相同的内容,提供相同的服务。
    在调度器的实现技术中,IP负载均衡技术是效率最高的,LVS实现的基于IP负载均衡技术的三种虚拟服务器方法如下:
    (1) 通过网络地址转换VS/NAT技术(Virtual Server via Network Address Translation)。大多数商品化的IP负载均衡调度器产品都是使用此方法。
    (2) IP隧道VS/TUN(Virtual Server via IP Tunneling)。
    (3) 直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing)。
    三种IP负载均衡技术的优缺点如表1所示。

 

 

1.2 LVS负载均衡调度算法[2]
    LVS支持的负载均衡调度算法有如下八种:
    (1)轮询(rr):以顺序循环方式进行调度,相比R-R DNS,这种调度是基于TCP或UDP网络套接字连接的,而不是基于网络主机的,它不受客户端Cache或DNS分级结构的影响。
    (2)加权轮询(wrr):循环方式调度,但在循环中给每个内容服务器分配指定权重的连接,从而充分考虑各内容服务器处理能力之间的差异。
    (3)最小连接(lc):将新到的连接请求动态地分配给现有活跃连接数最少的内容服务器。
    (4)加权最小连接(wlc):将新到的连接请求按各内容服务器当前处理连接数量的比例进行动态分配。wlc是LVS系统的缺省调度算法,在一般应用中都可采用此法均衡。
    (5)基于位置的最小连接(lblc):专门为高缓集群(cache cluster)设计的算法,属基于内容的均衡,尽量将对同一目的地址的连接请求分配给固定的一台高缓集群节点。
    (6)带复制的基于位置的最小连接(lblcr):在集群节点中维护若干针对特定目的地址的高缓服务器集合,以后每当有对匹配地址的连接请求时,尽量分配给该集合中活跃连接数最少的那台高缓服务器,并定期将该集合中负载最大的节点剔除。
    (7)目标哈希(dh):根据目标地址查找事先设定的静态哈希表来分配连接。
    (8)源哈希(sh):按客户地址查找设定的静态哈希表来分配连接,可实现服务就近提供,保证服务质量(QoS)。
2  动态负载均衡模型
    服务器的负载主要由客户端的请求服务引起。当客户端的请求到来时,调度器如何选择服务器来为此请求服务的过程成为服务器负载大小的关键。在LVS中,调度器通过使用上述各种调度算法来完成这个工作。但上述调度算法是一些静态算法。
    静态调度算法是利用事先设定好的服务器的信息调度的,决策过程的依据都是事先设定好的,如权值等,因而不能动态反映服务器的负载情况。当客户通过TCP/UDP连接访问服务器时,由于网络服务的服务时间不同、访问分布的不均匀性及服务所需资源千差万别,静态调度算法不能实时地反映后端服务器的负载情况,无法保证系统内服务器真正地实现均衡。动态算法的主要思想是根据负反馈理论,获得服务器的真实负载情况并作出评估,将评估的结果作为系统的反馈来修正负载均衡算法的参数。系统模型如图2所示。

 


     图2只是表示了一个服务器的反馈情况,在实际情况中,每个服务器都会向调度器反馈负载情况l(l较大表示负载较大,反之则负载较小)。图中,F(w,l)表示权值和负载关系的权值调节模块,根据服务器当前负载情况l和当前权值w计算得出新权值w′,调度器(LB)则根据服务器新的权值信息w′分配用户的请求。服务器池(RS)由多台服务器组成,负责对客户请求做出响应并向权值调节模块反馈负载信息。
    权值代表服务器的处理,通过反馈调整过的新权值w′,反映了服务器的实时处理能力。而在LVS的各种调度算法中,权值是事先设定好的。根据加权轮询调度算法(wrr)或加权最小连接调度算法(wlc),权值大的服务器会分配到相对较多的请求。这就可能出现负载相对不均衡的情况:当权值较大的服务器得到较多请求时的处理能力反而比权值小的服务器的处理能力小。这时,可采用如图2所示的负反馈模型解决负载相对的不均衡问题,即当某个服务器的l较大时,可降低w;l较小时可增大w,从而能充分发挥服务器的处理能力,较好地达到均衡负载的作用。
3 动态负载均衡的实现
    LVS系统中实现的调度算法都是静态调度算法,为此,本文根据图2模型引入动态负载均衡机制,对真实服务器的权值进行动态调整。由于动态负载均衡模块需要定时收集后端真实服务器的实时负载信息,因此,要在LB中加上负载查询与接收模块、负载信息处理与评估模块和内核通信模块[3]。加入动态负载均衡模块后,基于linux内核的动态负载均衡流程如图3所示。

 

 

3.1 负载采集模块
    动态调度算法需要获得各节点的系统性能和负载信息, 包括CPU占用率、CPU利用率、磁盘可用空间、内存以及I/O利用率等。在Linux系统中,这些信息的获取可通过简单网络管理协议SNMP来实现。支持SNMP管理的网路设备,其性能数据都有一个标准MIB变量并有惟一的OID与之对应,如1.3.6.1.4.1.2021.10.1.3.2表示CPU最近5分钟的平均占用率等。在所有RS的用户空间运行SNMP代理进程,SNMP将负责接收和处理LB发出的SNMP请求。由于影响服务器自身性能的因素很多,负载采集不可能收集所有的信息,在此,只选取了一般应用中影响服务器性能的五个关键指标:CPU占用率L(Ci)、请求响应时间L(Ti)、内存占用率L(Mi)、磁盘I/O占用率L(Di)、网络带宽占有率L(Bi)。
3.2 定时器模块和负载查询与接收模块
    负载查询与接收模块运行在LB的用户空间。对于查询对象即RS的地址的获取,负载查询进程会按一定的时间间隔遍历内核LVS模块的RS链表,并返回Real Server的地址等信息,建立用户空间的RS链表。查询进程根据RS链表,针对每一个RS,发出相应SNMP请求查询并存储其负载信息。
    动态反馈机制本身也是需要系统开销的,因此不可能对用户的所有请求都对服务器端的负载情况进行查询。可采用每隔一定的时间间隔T(如2秒钟),由负载查询进程再查询各个服务器的情况,并相应调整服务器的权值。这样周期性地进行,通过一个负反馈机制,使得服务器保持较好的利用率。
3.3 负载处理与评估模块
    该模块负责处理与评估负载接收模块存储对应于每个RS的负载信息,将每个RS当前的权值和其负载信息计算出一个新的权值。当负载值表示服务器比较忙时,新计算出的权值会比当前权值小;反之会比当前权值大(新权值的具体算法如后所述)。算出新权值后,通过内核通信模块用新的权值更新内核中相应服务器的信息。
    因为服务器的各种性能信息对服务器的处理能力影响不一样,根据其不同的影响力,对每个因素设定一个影响因子,不同的服务器影响因子将不相同。例如,在Web服务器集群中,对服务器RSi的主要负载因素[L(Ci)、L(Ti)、L(Mi)、L(Di)、L(Bi)]引入影响因子Qi进行计算。Qi=[qi1,qi2,qi3,qi4,qi5]=[0.4,0.3,0.1,0.1,0.1]时,认为服务器的CPU负载和请求响应时间较其他参数重要一些。若当前的系数Qi不能很好地反映应用的负载,系统管理员可以对系数不断地进行修正,直到找到贴近当前应用的一组系数。通过下式可得出服务器RSi的负载综合Li=Qi×[L(Ci),L(Ti),L(Mi),L(Di),L(Bi)]T
    结合节点的初始权值和采集的综合负载情况计算新的权值结果,即可引入如下权值计算公式:

   

式中,0.65是本文想要达到的系统利用率,A是一个可调整的系数(缺省值为5)。当综合负载值为0.65时,服务器权值不变;而大于0.65时,权值变小;小于0.65时,权值变大。为了避免权值变成一个很大的值,对权值的范围作一个限制其中k是可以调整的,其缺省值为10。若新权值可将新权值设为k×wi。若新权值与当前权值的差值没有超过设定的阀值,则将新权值设置到内核中的IPVS调度参数中;否则避免打断IPVS调度的开销。这样将使权值调整到一个稳定点。当系统达到理想的利用率时,权值是不变的。
3.4 内核通信模块
    由于IPVS模块工作在内核中,因此,内核通信模块负责负载处理模块及负载接收模块与内核的交互。主要有两个任务:(1)完成负载查询与接收模块取得内核RS链表,并返回。(2)通过调用setsockopt()函数把负载处理模块生成的新的权值信息传入内核IPVS模块。
4 测 试
4.1 硬件环境

    测试平台连接拓扑图如图4所示。图中设备的硬件配置如表2所示。

 

 

 

4.2 软件环境[5-6]
    各个设备使用的操作系统如表2所示。真实服务器RS1、RS2都运行Apache2.2服务器,提供Web服务;安装了简单网络管理协议SNMP,负责监控服务器的性能信息。测试仪利用工具 WAS(Web Application Stress)在客户端向虚拟服务发起持续请求,观察服务器的服务性能。WAS是Microsoft公司推出的Web服务器性能测试工具。WAS设置时将Stress Level大小设置为100,StressMultiplier 大小设置为 20,测试时间为 4 分钟,测试期间WAS请求真实服务器上的HTTP动态页面。
4.3 测试内容和结果分析
    在上述环境下,采用DR(Direct Route)方式实现服务器的负载均衡,其连接拓扑图见图1。
    为了测试是否会出现负载倾斜现象,将RS1和RS2的初始权值分别设为4和10,内核LVS调度算法采用加权轮询调度(wrr)算法。
    (1)不使用动态调度算法的情况
    静态算法下的负载情况如图5所示。由图可知,RS1的配置比RS2的配置低很多,却拥有较大的权值,所以基本一直工作在满负荷状态,而RS2虽然配置很高但权值很低,一直处于较低的负载,其性能得不到充分发挥。这是因为服务器的权值无法动态更改,在运行过程中无法根据服务器的实时负载来确定服务器的权值以确定新链接的分配去向,造成服务器的负载倾斜。

 


    (2)在LB上启动动态负载模块并在RS1、RS2上启动SNMPD进程后,得到如图6所示的结果。

 

 

    由图6可知,虽然两台服务器的配置及初始权值不一样,但由于动态权值的引入,使得LB能够按照各真实服务器的实时负载情况来分配任务,使两台服务器的负载情况都在期望值(0.65)附近,较好地实现了负载的均衡,达到了预期效果。
    网络中各种服务对服务器性能的需求差别很大,Linux 内核中LVS实现的静态负载均衡调度算法容易使服务器发生倾斜,达不很理想的均衡效果。而本文在介绍LVS集群系统及其负载均衡调度算法的基础上,提出并实现了一种根据真实服务器实时性能数据动态调整服务器权值的方案,经测试,采用该方案后,能够更加充分地发挥各服务器的性能,减少任务分配的倾斜的可能性,能更好地达到均衡负载的效果。 
参考文献
[1]  ZHANG Weng Song. Linux virtual server Web site.[EB/OL] http://www.linuxvirtualserver.org, 2002.
[2]  Turbolinux cluster server white paper[EB/OL] http ://www.turbolinux.com,2002.
[3]  王晋鹏,潘龙法,李降龙.LVS集群中的动态反馈调度算法[J]. 计算机工程,2005,31(19).
[4]  吴晓葵.利用SNMP获取网络资源信息[J].现代电子技术,2006,(16).
[5]  软件测试工具——WAS服务器负载测试软件导读.http://51cmm.csai.cn/casepanel/ST/No024.htm?ID=1267,2004.
[6]  叶言苓,崔彦军.软件测试管理的研究与应用[J].计算机应用与软件, 2003,(9).

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。