`
hanxinyu
  • 浏览: 125505 次
  • 来自: henan china
社区版块
存档分类
最新评论

动态网络负载平衡集群时间方法

阅读更多
1.引言

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

    网络服务请求必须是可管理的
    请求的分配对用户是透明的
    最好能够提供异构系统的支持
    能够依据集群节点的资源情况进行动态分配和调整
    负载平衡器在集群的各个服务节点中分配工作负载或网络流量。可以静态预先设置或根据当前的网络状态来决定负载分发到哪个特定的节点,节点在集群内部可以互相连接,但它们必须与平衡器直接或间接相连。
 
网络平衡器可以认为是网络层次上的作业调度系统,大多数网络负载平衡器能够在网络的相应层次上实现单一系统映像,整个集群能够体现为一个单一的IP地址被用户访问,而具体服务的节点对用户而言是透明的。这里,平衡器可静态或动态配置,用一种或多种算法决定哪个节点获得下一个网络服务请求。

    2.网络平衡原理

在TCP/IP协议中,数据包含有必要的网络信息,因而在网络缓存或网络平衡的具体实现算法里,数据包的信息很重要。但由于数据包是面向分组的(IP)和面向连接的(TCP),且经常被分片,没有与应用有关的完整信息,特别是和连接会话相关的状态信息。因此必须从连接的角度看待数据包——从源地址的端口建立到目的地址端口的连接。

平衡考虑的另一个要素就是节点的资源使用状态。由于负载平衡是这类系统的最终目的,那么及时、准确的把握节点负载状况,并根据各个节点当前的资源使用状态动态调整负载平衡的任务分布,是网络动态负载平衡集群系统考虑的另一关键问题。

一般情况下,集群的服务节点可以提供诸如处理器负载,应用系统负载、活跃用户数、可用的网络协议缓存以及其他的资源信息。信息通过高效的消息机制传给平衡器,平衡器监视所有处理节点的状态,主动决定下个任务传给谁。平衡器可以是单个设备,也可以使一组平行或树状分布的设备。

    3.基本的网络负载平衡算法

平衡算法设计的好坏直接决定了集群在负载均衡上的表现,设计不好的算法,会导致集群的负载失衡。一般的平衡算法主要任务是决定如何选择下一个集群节点,然后将新的服务请求转发给它。有些简单平衡方法可以独立使用,有些必须和其它简单或高级方法组合使用。而一个好的负载均衡算法也并不是万能的,它一般只在某些特殊的应用环境下才能发挥最大效用。因此在考察负载均衡算法的同时,也要注意算法本身的适用面,并在采取集群部署的时候根据集群自身的特点进行综合考虑,把不同的算法和技术结合起来使用。

    3.1 轮转法:

轮转算法是所有调度算法中最简单也最容易实现的一种方法。在一个任务队列里,队列的每个成员(节点)都具有相同的地位,轮转法简单的在这组成员中顺序轮转选择。在负载平衡环境中,均衡器将新的请求轮流发给节点队列中的下一节点,如此连续、周而复始,每个集群的节点都在相等的地位下被轮流选择。这个算法在DNS域名轮询中被广泛使用。

轮转法的活动是可预知的,每个节点被选择的机会是1/N,因此很容易计算出节点的负载分布。轮转法典型的适用于集群中所有节点的处理能力和性能均相同的情况,在实际应用中,一般将它与其他简单方法联合使用时比较有效。

    3.2 散列法

散列法也叫哈希法(HASH),通过单射不可逆的HASH函数,按照某种规则将网络请求发往集群节点。哈希法在其他几类平衡算法不是很有效时会显示出特别的威力。例如,在前面提到的UDP会话的情况下,由于轮转法和其他几类基于连接信息的算法,无法识别出会话的起止标记,会引起应用混乱。

而采取基于数据包源地址的哈希映射可以在一定程度上解决这个问题:将具有相同源地址的数据包发给同一服务器节点,这使得基于高层会话的事务可以以适当的方式运行。相对称的是,基于目的地址的哈希调度算法可以用在Web Cache集群中,指向同一个目标站点的访问请求都被负载平衡器发送到同一个Cache服务节点上,以避免页面缺失而带来的更新Cache问题。

    3.3 最少连接法

在最少连接法中,平衡器纪录目前所有活跃连接,把下一个新的请求发给当前含有最少连接数的节点。这种算法针对TCP连接进行,但由于不同应用对系统资源的消耗可能差异很大,而连接数无法反映出真实的应用负载,因此在使用重型Web服务器作为集群节点服务时(例如Apache服务器),该算法在平衡负载的效果上要打个折扣。为了减少这个不利的影响,可以对每个节点设置最大的连接数上限(通过阈值设定体现)。

    3.4 最低缺失法

在最低缺失法中,平衡器长期纪录到各节点的请求情况,把下个请求发给历史上处理请求最少的节点。与最少连接法不同的是,最低缺失记录过去的连接数而不是当前的连接数。

    3.5 最快响应法

平衡器记录自身到每一个集群节点的网络响应时间,并将下一个到达的连接请求分配给响应时间最短的节点,这种方法要求使用ICMP包或基于UDP包的专用技术来主动探测各节点。

在大多数基于LAN的集群中,最快响应算法工作的并不是很好,因为LAN中的ICMP包基本上都在10ms内完成回应,体现不出节点之间的差异;如果在WAN上进行平衡的话,响应时间对于用户就近选择服务器而言还是具有现实意义的;而且集群的拓扑越分散这种方法越能体现出效果来。这种方法是高级平衡基于拓扑结构重定向用到的主要方法。

    3.6 加权法

加权方法只能与其他方法合用,是它们的一个很好的补充。加权算法根据节点的优先级或当前的负载状况(即权值)来构成负载平衡的多优先级队列,队列中的每个等待处理的连接都具有相同处理等级,这样在同一个队列里可以按照前面的轮转法或者最少连接法进行均衡,而队列之间按照优先级的先后顺序进行均衡处理。在这里权值是基于各节点能力的一个估计值。

    4、动态反馈负载均衡

当客户访问集群资源时,提交的任务所需的时间和所要消耗的计算资源是千差万别的,它依赖于很多因素。例如:任务请求的服务类型、当前网络带宽的情况、以及当前服务器资源利用的情况等等。一些负载比较重的任务需要进行计算密集的查询、数据库访问、很长响应数据流;而负载比较轻的任务请求往往只需要读一个小文件或者进行很简单的计算。

对任务请求处理时间的不同可能会导致处理结点利用率的倾斜(Skew),即处理结点的负载不平衡。有可能存在这样情况,有些结点已经超负荷运行,而其他结点基本是闲置着。同时,有些结点已经忙不过来,有很长的请求队列,还不断地收到新的请求。反过来说,这会导致客户长时间的等待,而集群整体的服务质量下降。因此,有必要采用一种机制,使得平衡器能够实时地了解各个结点的负载状况,并能根据负载的变化做出调整。

具体的做法上采用了基于负反馈机制的动态负载均衡算法,该算法考虑每一个结点的实时负载和响应能力,不断调整任务分布的比例,来避免有些结点超载时依然收到大量请求,从而提高单一集群的整体吞吐率。

在集群内,负载均衡器上运行服务端监控进程,监控进程负责监视和收集集群内各个结点的负载信息;而每个结点上运行客户端进程,负责定时向均衡器报告自身的负载状况。监控进程根据收到的全部结点的负载信息来进行同步操作,既对将要分配的任务按照权值得比例重新进行分布。权值得计算主要根据各个结点的CPU利用率、可用内存以及磁盘I/O状况计算出新的权值,若新权值和当前权值的差值大于设定的阀值,监控器采用新的权值对集群范围内的任务重新进行分布,直到下一次的负载信息同步到来之前。均衡器可以配合动态权值,采用加权轮询算法来对接受的网络服务请求进行调度。

    4.1 加权轮询调度

加权轮询调度(Weighted Round-Robin Scheduling)算法用相应的权值表示结点的处理性能。该算法根据权值的高低顺序并按照轮询的方式将任务请求分配到各结点。权值高的结点比权值低的结点处理更多的任务请求,相同权值的结点处理相同份额的请求。加权轮询的基本原理可描述为:

    假设某集群内有一组结点N = {N0, N1, …, Nn-1},W(Ni)表示结点Ni的权值,一个指示变量i表示上一次选择的服务器,T(Ni)表示结点Ni当前所分配的任务量。

    ∑T(Ni)  表示当前同步周期需要处理的任务总量。

    ∑W(Ni)  表示结点的权值总和。

    则: W(Ni)/ ∑W(Ni)= T(Ni)/ ∑T(Ni)
    表示任务的分配是按照各个结点权值占权值总数的比例来进行分配。

    4.2 权值计算

当集群的结点初次投入系统中使用时,系统管理员根据结点的硬件配置情况对每个结点都设定一个初始权值DW(Ni)(通常根据结点的硬件配置来定义,硬件配置越高的结点默认值越高),在负载均衡器上也先使用这个权值。然后,随着结点负载的变化,均衡器对权值进行调整。

动态权值是由结点运行时各方面的参数计算出来的。我们在实验中选取了最重要几项,包括:CPU资源,内存资源,当前进程数,响应时间等信息作为计算公式的因子。结合每个结点当前的权值,可以计算出新的权值的大小。动态权值目的是要正确反映结点负载的状况,以预测结点将来可能的负载变化。对于不同类型的系统应用,各个参数的重要程度也有所不同。典型的Web应用环境下,可用内存资源和响应时间就非常重要;如果用户以长的数据库事务为主,则CPU使用率和可用内存就相对重要一些。为了方便在系统运行过程中针对不同的应用对各个参数的比例进行适当调整,我们为每一个参数设定一个常量系数 Ri ,用来来表示各个负载参数的重要程度,其中Σ Ri = 1。因此,任何一个结点Ni的权值公式就可以描述为:

    LOAD(Ni)=R1*Lcpu(Ni)+R2*Lmemory(Ni)+R3*Lio(Ni)+R4*Lprocess(Ni)+R5*Lresponse(Ni)

    其中Lf(Ni) 表示结点Ni 当前某一项参数的负载值,

    上述公式中依次表示为:CPU使用率、内存使用率、磁盘I/O访问率、进程总数以及响应时间。

例如,在WEB服务器集群中,我们采用以系数{0.1, 0.4, 0.1, 0.1, 0.3},这里认为服务器的内存和请求响应时间较其他参数重要一些。若当前的系数Ri不能很好地反映应用的负载,系统管理员可以对系数不断地修正,直到找到贴近当前应用的一组系数。

另外,关于采集权值的周期置,虽然很短的周期可以更确切地反映各个结点的负载,但是很频繁地采集(如1秒1次或者多次)会给均衡器和结点带来负担,也可能增加不必要的网络负荷。另外,由于采集器是在采集时刻进行负载计算的,经实验证明,均衡器反映出来各个结点的负载信息会出现剧烈的抖动,均衡器无法准确捕捉结点真实的负载变化趋势。因此解决这些问题,一方面要适当地调整采集负载信息的周期,一般在5~10秒;另一方面,可以使用移动平均线或者是滑动窗口来避免抖动,使得均衡器收集到的负载信息表现为平滑曲线,这样在负反馈机制的调整效果上就会比较好。

均衡器的动态权值采集程序周期性地运行,若缺省权值不为零,则查询该结点的各负载参数,并计算出动态权值LOAD(Ni) 。我们引入以下权值计算公式,结合结点的初始权值和采集的动态权值来计算最终的权值结果。

    Wi = A*DW(Ni)+B*(LOAD(Ni)-DW(Ni))1/3

在公式中,如果动态权值恰好等于初始权值,最终权值不变,则说明系统的负载状况刚好达到理想状况,等于初始权值DW(Ni)。如果动态权值计算结果高于初始权值,最终权值变高,则说明系统负载很轻,均衡器将会增加分配给该结点的任务比率。如果动态权值低于初始权值,最终权值变低,说明系统开始处于重载状况,均衡器将会减少对该结点分配的任务。在实际使用中,若发现所有结点的权值都小于他们的DW(Ni),则说明当前个集群处于超载状态,这时需要加入新的结点到集群中来处理部分负载;反之,若所有结点的权值大大高于DW(Ni),则说明当前系统的负载都比较轻。

    5、总结

网络负载平衡是集群作业调度系统的具体实现。由于其处理的作业单元是TCP/IP协议下的网络连接,因此可以采用面向网络连接的集中基本调度算法。考虑集群负载不平衡的可能,采取了动态获取服务节点的权值并使用负反馈机制调整平衡器对网络服务请求的分布,以适应服务节点在运行过程中资源的变化。笔者也在LVS集群系统的基础上,配合原有的轮询算法对其进行改进,增加了采集动态权值的程序并实时反馈到负载平衡器的调度系统上。实践证明,采用动态平衡在集群系统的整体吞吐量方面有所提高,特别是在集群各个节点性能不一,集群提供的网络服务程序所访问的资源多样化的情况下,负反馈机制的效果尤其明显。在其他类型的集群中,负反馈机制的动态负载平衡也能够得到很好的应用,只是平衡器所处理的作业单元不同于网络连接,而具体的负载算法上也将有所不同。

分享到:
评论

相关推荐

    构建负载均衡服务器之一负载均衡与集群详解

    首先我们先介绍一下什么是负载均衡:负载平衡(Loadbalancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小...

    论文研究-基于节点分组的异构集群负载均衡算法.pdf

    首先根据排队论理论给出了一个理想的负载均衡模型。...实验结果表明,相比于轮转法和加权轮转法这两种普遍采用的负载均衡算法,该算法可以提供更加稳定的请求响应时间,并在负载波动较大时明显提高集群的吞吐率。

    分布式协调工具-ZooKeeper实现动态负载均衡

    在分布式环境中,相同的业务应用分布在不同的机器上,有些业务逻辑(例如一些耗时的计算,网络I/O处理),往往只需要让整个集群中的某一台机器进行执行,其余机器可以共享这个结果,这样可以大大减少重复劳动,提高...

    基于因子分析的动态负载均衡算法

    随着互联网的不断发展、用户数量的急剧增长,互联网中出现了网络拥塞、服务器负载过重、响应时间过长等严重问题,其中负载均衡算法是影响服务器集群整体性能的一个关键因素。运用统计学中的因子分析理论,提出了一种...

    利用遗传算法的网络GIS集群服务器动态负载均衡算法 (2011年)

    针对现有负载均衡方法的不足和网络GIS数据的特点,提出了一种基于遗传算法的网络GIS集群服务器动态负载均衡方法。该算法将基于服务器状态和基于内容的调度算法综合起来考虑,设计了相应的编码机制和遗传操作。实验...

    nlb负载均衡架设教程

    网络负载平衡,保证即使是在负载很重的情况下它们也能够在很快的时间内做出反应。 网络负载平衡可以让客户端用一个逻辑Internet名称和虚拟IP地址(又称群集IP地址)访问群集,同时保留每台计算机各自的名称。网络...

    基于mean-variance的服务集群负载均衡方法

    大量并发请求任务进行分配时,负载调度机制是通过最小化响应时间及最大化节点利用率实现网络中节点的负载均衡,在基于遗传算法的负载均衡算法中,适应度函数设计对服务集群负载均衡效率产生重要的影响。对此提出了一...

    一种基于分布式服务器集群的可扩展负载均衡策略技术

    提出了一种基于软件定义网络的...内网中的分布式数据库实验对通用负载均衡技术和基于软件定义网络的负载均衡技术进行了比较,在不同服务器集群的负载状态下,后者的平均响应时间小于前者,并得到了更好的负载均衡效果。

    网络安全员题库答案解析.xls

    10 最常见的三种群集类型不包括( ) 高性能科学集群 负载均衡集群 11 关于负载均衡下面说法错误的是( ) 单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统...

    Web集群与负载均衡服务实现

    一般情况下,如果一个应用使用的人多了,那么用户请求的相应时间就会增大,机器的性能也会受到影响,如果使用负载均衡集群,那么集群中任意一台机器都能相应用户的请求,这样集群就会在用户发出服务请求之后,选择...

    Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案

    负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。...

    基于排队理论的自适应负载均衡算法研究 (2009年)

    负载均衡集群技术中的负载均衡算法是整个互联网络应用研究中一个重要问题。针对“需求快速变化”这一企业级管理软件开发中呈现的特点,以及各应用软件之间的互操作性差、应用集成水平较低,无法实现信息的共享与交流...

    集群并发环境下大规模矢量数据负载均衡算法 (2013年)

    为了提高集群环境下网络地理信息系统(WebGIS)大规模矢量数据的并发访问性能,提出了集群并发环境下大规模矢量数据内容网格化负载均衡算法,研究了大规模矢量数据内容网格化方法,集群并发访问时内容网格的自动识别、...

    论文研究-分布式入侵检测中基于能力与负载的数据分割算法.pdf

    针对高速网络环境下分布式入侵检测中海量数据并行检测处理的效率和检测率问题,提出一种基于能力与负载的...仿真测试结果表明,该算法具有较好的负载均衡性,降低了系统的检测时间,提高了数据并行处理的效率和检测率。

    服务器集群技术方案.doc

    Real Application Cluster可以自动进行负载平衡、故障修复和规划停机时间,以支持高可用性应用程序。 它还显著地提高了大型数据仓库和决策支持系统的性能。通过与并行查询选件结合,它 还提供了节点间的并行性和节点...

    论文研究-一种基于蚁群算法的云存储副本动态选择机制研究.pdf

    构建基于蚁群的副本动态选择模型,建立副本选择度量标准(如带宽占用、网络路径时延和平均访问时间等)与蚁群信息素的映射,并对虚拟机实例负载状况和虚拟机集群资源利用状况进行量化评估,感知所监控的云节点的资源...

    集群服务器.doc

    当其中某台服务器出现故障时,系统可 以在专用软件的支持下将这台服务器与系统隔离,并通过各服务器之间的负载转移机制 实现新的负载平衡;同时向系统管理员发出报警信号。 二、两种集群方法 目前,有以下两种常用的...

Global site tag (gtag.js) - Google Analytics