关注IT
关注系统玩家

LB集群

一 LB集群概述

LB集群(Load Balance Cluster)即负载均衡集群,它是利用一个集群中的多台单机,完成许多并行的小的工作。一般情况下,如果一个应用使用的人多了,那么用户请求的相应时间就会增大,机器的性能也会受到影响,如果使用负载均衡集群,那么集群中任意一台机器都能相应用户的请求,这样集群就会在用户发出服务请求之后,选择当时负载最小,能够提供最好的服务的这台机器来接受请求并相应,这样就可用用集群来增加系统的可用性和稳定性。负载均衡群集为企业需求提供了更为实用的系统。如其名称,这种系统使负载可以在多台计算机中尽可能平均地分摊处理。负载可以是需要均衡的应用程序处理负载或网络流量负载。在系统中,每个节点 都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也是如此。

LB集群通常采用专门的负载均衡路由设备将基于TCP/IP协议的服务请求分发至实际提供服务的服务器中并由这些服务器为客户端提供真实的服务。负载均衡集群系统一般多用于负载较重的网络服务中,如大型的网站、邮件服务系统等。由于采用了负载均衡技术,可以使多台服务器同时提供相同内容的服务,突破了单一服务器硬件性能的限制。负载均衡集群中的关键部件就是负载均衡路由设备,负载均衡路由设备负责将真实客户端的服务请求分发至真实服务器上,一般可采用的方法有使用硬件负载均衡路由设备或使用Linux自己配置负载均衡路由器。

其实,负载均衡并非传统意义上的“均衡”,一般来说,它只是把可能拥塞于一个地方的负载交给多个地方分担。通俗来说,负载均衡在网络中的作用就像轮流值日,把任务分给大家来完成。不过,这种意义上的均衡一般是静态的,也就是事先确定的“轮组”策略。

服务器群集中每个服务结点运行一个所需服务器程序的独立拷贝,诸如Web、FTP、Telnet或e- mail服务器程序。对于某些服务(如 运行在Web服务器上的那些服务)而言,程序的一个拷贝运行在群集内所有的主机上,而网络负载均衡则将工作负载在这些主机间进行分配。对于其他服务(例如e-mail),只有一台主机处理工作负载,针对这些服务,网络负载均衡允许网络通讯量流到一个主机上,并在该主机发生故障时将通讯量移至其他主机。

在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的 灵活性和可用性。它主要完成以下任务:

解决网络拥塞问题,服务就近提供,实现地理位置无关性;

为用户提供更好的访问质量;

提高服务器响应速度;

提高服务器及其他资源的利用效率;

避免了网络关键部位出现单点失效。

在Linux中最常使用的负载均衡路由软件是由章文嵩博士开发的LVS(Linux Virtual Server)项目。LVS能够实现目前大部分硬件负载均衡路由设备的功能。目前基于Linux平台负载均衡解决方案大都是采用了LVS或其衍生产品。由 于LVS项目本身未提供负载均衡路由的高可用功能、真实服务器状态探测功能等,所以在实际配置负载均衡集群时通常会采用LVS的衍生产品。常见的LVS衍 生产品主要有UltraMonkey (http://www.ultramonkey.org/)及RedHat的Piranha项目。

二 负载均衡技术的实现

广义上的负载均衡既可以设置专门的网关、负载均衡器,也可以通过一些专用软件与协议来实现。对一个网络 的负载均衡应用, 从网络的不同层次入手,根据网络瓶颈所在进行具体分析。从客户端应用为起点纵向分析,参考OSI的分层模型,我们把负载均衡技术的实现分为客户端负载均衡技术、应用服务器技术、高层协议交换、网络接入协议交换等几种方式。

应用服务器的负载均衡技术  

如果将客户端的负载均衡层移植到某一个中间平台,形成三层结构,则客户端应用可以不需要做特殊的修改, 透明的通过中间层 应用服务器将请求均衡到相应的服务结点。比较常见的实现手段就是反向代理技术。使用反向代理服务器,可以将请求均匀转发给多 台服务器,或者直接将缓存的数据返回客户端,这样的加速模式在一定程度上可以提升静态网页的访问速度,从而达到负载均衡的目 的。

使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能。然而它本身也存在一些问题,首先就是必须为每一种服务都专门开发一个反向代理服务器,这就不是一个轻松的任务。

反向代理服务器本身虽然可以达到很高效率,但是针对每一次代理,代理服务器就必须维护两个连接,一个对 外的连接,一个对 内的连接,因此对于特别高的连接请求,代理服务器的负载也就非常之大。反向代理能够执行针对应用协议而优化的负载均衡策略, 每次仅访问最空闲的内部服务器来提供服务。但是随着并发连接数量的增加,代理服务器本身的负载也变得非常大,最后反向代理服务器本身会成为服务的瓶颈。

基于域名系统的负载均衡 

NCSA的可扩展Web是最早使用动态DNS轮询技术的web系统。在DNS中为多个地址配置同一个名 字,因而查询这个名字的客户机将 得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。在很多知名的web站点都使用了这个技术:包括 早期的yahoo站点、163等。动态DNS轮询实现起来简单,无需复杂的配置和管理,一般支持bind8.2以上的类unix系统都能够运行,因此广为使用。

DNS负载均衡是一种简单而有效的方法,但是存在不少问题。

首先域名服务器无法知道服务结点是否有效,如果服务结点失效,余名系统依然会将域名解析到该节点上,造成用户访问失效。

其次,由于DNS的数据刷新时间TTL(Time to LIVE)标志,一旦超过这个TTL,其他DNS服务器就需要和这个服务器交互,以重 新获得地址数据,就有可能获得不同IP地址。因此为了使地址能随机分配,就应使TTL尽量短,不同地方的DNS服务器能更新对应的 地址,达到随机获得地址。然而将TTL设置得过短,将使DNS流量大增,而造成额外的网络问题。

最后,它不能区分服务器的差异,也不能反映服务器的当前运行状态。当使用DNS负载均衡的时候,必须尽 量保证不同的客户计 算机能均匀获得不同的地址。例如,用户A可能只是浏览几个网页,而用户B可能进行着大量的下载,由于域名系统没有合适的负载策 略,仅仅是简单的轮流均衡,很容易将用户A的请求发往负载轻的站点,而将B的请求发往负载已经很重的站点。因此,在动态平衡特 性上,动态DNS轮询的效果并不理想。

高层协议内容交换技术  

除了上述的几种负载均衡方式之外,还有在协议内部支持负载均衡能力的技术,即URL交换或七层交换,提 供了一种对访问流量 的高层控制方式。Web内容交换技术检查所有的HTTP报头,根据报头内的信息来执行负载均衡的决策。例如可以根据这些信息来确定 如何为个人主页和图像数据等内容提供服务,常见的有HTTP协议中的重定向能力等。

HTTP运行于TCP连接的最高层。客户端通过恒定的端口号80的TCP服务直接连接到服务器,然后通过TCP连接向服务器端发送一个 HTTP请求。协议交换根据内容策略来控制负载,而不是根据TCP端口号,所以不会造成访问流量的滞留。

由于负载平衡设备要把进入的请求分配给多个服务器,因此,它只能在TCP连接时建立,且HTTP请求通 过后才能确定如何进行负载的平衡。当一个网站的点击率达到每秒上百甚至上千次时,TCP连接、HTTP报头信息的分析以及进程的时延已经变得很重要了,要 尽一切可能提高这几各部份的性能。

在HTTP请求和报头中有很多对负载平衡有用的信息。我们可以从这些信息中获知客户端所请求的URL和 网页,利用这个信息,负 载平衡设备就可以将所有的图像请求引导到一个图像服务器,或者根据URL的数据库查询内容调用CGI程序,将请求引导到一个专用 的高性能数据库服务器。

如果网络管理员熟悉内容交换技术,他可以根据HTTP报头的cookie字段来使用Web内容交换技术 改善对特定客户的服务,如果能 从HTTP请求中找到一些规律,还可以充分利用它作出各种决策。除了TCP连接表的问题外,如何查找合适的HTTP报头信息以及作出 负载平衡决策的过程,是影响Web内容交换技术性能的重要问题。如果Web服务器已经为图像服务、SSL对话、数据库事务服务之类的 特殊功能进行了优化,那么,采用这个层次的流量控制将可以提高网络的性能。

网络接入协议交换  

大型的网络一般都是由大量专用技术设备组成的,如包括防火墙、路由器、第3、4层交换机、负载均衡设 备、缓冲服务器和Web 服务器等。如何将这些技术设备有机地组合在一起,是一个直接影响到网络性能的关键性问题。现在许多交换机提供第四层交换功 能,对外提供一个一致的IP地址,并映射为多个内部IP地址,对每次TCP和UDP连接请求,根据其端口号,按照即定的策略动态选择 一个内部地址,将数据包转发到该地址上,达到负载均衡的目的。很多硬件厂商将这种技术集成在他们的交换机中。一般采用随机选择,根据服务器的连接数量或者相应时间进行选择的负载均衡策略来分配负载。

三 LVS的概述

LVS(Linux Virtual Server)的三层结构

负载调度器:集群对外的前端机,负责将客户的请求发送到一组服务器上执行;

服务器池:执行客户请求的服务器,如Web、Mail、FTP、DNS;

共享存储 :为服务器池提供共享的存储区,如NAS、SAN、iSCSI等

集群工作过程:客户端(Client)通过Internet路由访问集群的负载调度器的对外IP(VIP),由调度器按照一定的调度算法将接受到的请求分配给RealServer,RealServer将结果返回。

调度策略:

RR(Round Robin):轮询,将任务一个个的分发给RealServer

该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载失衡。

WRR(Weight Round Robin):加权轮询,在rr的基础上增加权值

权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮询调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,即权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

LC(Least-Connection): 最小连接调度

算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减1。

WLC(Weight Least-Connection):加权最小连接

算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。

LBLC(Locality-Based):基于局部性的最少链接调度

如果连续两次请求一样,则传给相同的服务器(Cache原理)

相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,从而整个集群系统的处理能力。

LBLCR(Locality-Based Least Connections with Replication Scheduling):在上一个算法基础上,传给新一台服务器,建立多台Cache,以分担负担

LBLCR算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该 服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

DH(Destination Hasing): 目标地址散列调度

根据客户端访问的VIP,经过hash后对应相应的Realserver

SH(Source Hashing):源地址散列调度

根据客户端IP,经过hash后,传给相应的Reaserver

SED(Shortest Expected):最短的期望的延迟,基于wlc算法

三 参考资料

1.http://baike.baidu.com/view/302477.htm

2.http://hi.baidu.com/szh12031/item/59da39e76bf6b8384cdcaf21

3.http://www.cnblogs.com/Sun_Blue_Sky/articles/2042110.html

4.http://hi.baidu.com/hen_lover/item/cc46a9163971ca4ff0090eea

5.http://www.linuxidc.com/Linux/2012-05/59839.htm

6.http://network.51cto.com/art/200806/78774.htm

7.http://wenku.baidu.com/view/245973de5022aaea998f0fee.html

未经允许不得转载:系统玩家 » LB集群

分享到:更多 ()
喜欢 0
rancher

评论 抢沙发

评论前必须登录!