LVS-三种负载均衡方式比较

LVS-三种负载均衡方式比较

发表于2年前(2014-07-25 11:46)   阅读( 1551) | 评论( 2)  29人收藏此文章, 我要收藏
1

一、什么是LVS?前端

首先简单介绍一下LVS (Linux Virtual Server)究竟是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率,将请求均衡地转移到不一样的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,并且无需修改客户端和服务器端的程序。算法

为此,在设计时须要考虑系统的透明性、可伸缩性、高可用性和易管理性。通常来讲,LVS集后端

群采用三层结构,其体系结构如图所示:服务器

                                              LVS集群的体系结构网络

2LVS主要组成部分为:负载均衡

      负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(咱们可称之为虚拟IP地址)上的。函数

        服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务通常有WEBMAILFTPDNS等。性能

    共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。测试

3LVS负载均衡方式:spa

Virtual Server via Network Address Translation NAT(VS/NAT)
V
S/NAT是一种最简单的方式,全部的RealServer只须要将本身的网关指向Director便可。客户端能够是任意操做系统,但此方式下,一个Director可以带动的RealServer比较有限。在VS/NAT的方式下,Director也能够兼为一台RealServer。VS/NAT的体系结构如图所示。


VS/NAT的体系结构

      Virtual Server via IP Tunneling(VS/TUN)

IP隧道(IP tunneling)是将一个IP报文封装在另外一个IP报文的技术,这可使得目标为一个IP地址的数据报文能被封装和转发到另外一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态创建的,隧道一端有一个IP地址,另外一端也有惟一的IP地址。
它的链接调度和管理与VS/NAT中的同样,只是它的报文转发方法不一样。调度器根据各个服务器的负载状况,动态地选择一台服务器,将请求报文封装在另外一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封得到原来目标地址为 VIP 的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,因此就处理这个请求,而后根据路由表将响应报文直接返回给客户。

VS/TUN的体系结构

VS/TUN的工做流程:

 Virtual Server via Direct Routing(VS/DR)
VS/DR
方式是经过改写请求报文中的MAC地址部分来实现的。DirectorRealServer必需在物理上有一个网卡经过不间断的局域网相连。 RealServer上绑定的VIP配置在各自Non-ARP的网络设备上(lotunl),DirectorVIP地址对外可见,而RealServerVIP对外是不可见的。RealServer的地址便可以是内部地址,也能够是真实地址。

    VS/DR的体系结构

    VS/DR的工做流程

    VS/DR的工做流程如图所示:它的链接调度和管理与VS/NATVS/TUN中的同样,它的报文转发方法又有不一样,将报文直接路由给目标服务器。在VS/DR中,调度器根据各个服务器的负载状况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改成选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。由于数据帧的MAC地址是选出的服务器,因此服务器确定能够收到这个数据帧,从中能够得到该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,而后根据路由表将响应报文直接返回给客户。

 

                                                      VS/DR的工做流程

四、三种负载均衡方式比较:

Virtual Server via NAT

VS/NAT 的优势是服务器能够运行任何支持TCP/IP的操做系统,它只须要一个IP地址配置在调度器上,服务器组能够用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器自己有可能成为系统的新瓶颈,由于在VS/NAT中请求和响应报文都须要经过负载调度器。咱们在Pentium166 处理器的主机上测得重写报文的平均延时为60us,性能更高的处理器上延时会短一些。假设TCP报文的平均长度为536 Bytes,则调度器的最大吞吐量为8.93 MBytes/s. 咱们再假设每台服务器的吞吐量为800KBytes/s,这样一个调度器能够带动10台服务器。(注:这是很早之前测得的数据)

    基于 VS/NAT的的集群系统能够适合许多服务器的性能要求。若是负载调度器成为系统新的瓶颈,能够有三种方法解决这个问题:混合方法、VS/TUN和 VS/DR。在DNS混合集群系统中,有若干个VS/NAT负调度器,每一个负载调度器带本身的服务器集群,同时这些负载调度器又经过RR-DNS组成简单的域名。

    但VS/TUN和VS/DR是提升系统吞吐量的更好方法。

    对于那些将IP地址或者端口号在报文数据中传送的网络服务,须要编写相应的应用模块来转换报文数据中的IP地址或者端口号。这会带来实现的工做量,同时应用模块检查报文的开销会下降系统的吞吐率。

Virtual Server via IP Tunneling

在VS/TUN 的集群系统中,负载调度器只将请求调度到不一样的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就能够处理大量的请求,它甚至能够调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即便负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。因此,VS/TUN能够极大地增长负载调度器调度的服务器数量。VS/TUN调度器能够调度上百台服务器,而它自己不会成为系统的瓶颈,能够用来构建高性能的超级服务器。VS/TUN技术对服务器有要求,即全部的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操做系统,咱们没对其余操做系统进行测试。由于“IP Tunneling”正成为各个操做系统的标准协议,因此VS/TUN应该会适用运行其余操做系统的后端服务器。

Virtual Server via Direct Routing

跟VS/TUN方法同样,VS/DR调度器只处理客户到服务器端的链接,响应数据能够直接从独立的网络路由返回给客户。这能够极大地提升LVS集群系统的伸缩性。跟VS/TUN相比,这种方法没有IP隧道的开销,可是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不做ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。

三种LVS负载均衡技术的优缺点概括如下表:


VS/NAT
VS/TUN VS/DR

服务器操做系统 

任意 支持隧道 多数(支持Non-arp)

服务器网络

私有网络

局域网/广域网 局域网

服务器数目(100M网络)

10~20 100 大于100

服务器网关 

负载均衡器 本身的路由 本身的路由
效率 通常
最高

注:以上三种方法所能支持最大服务器数目的估计是假设调度器使用100M网卡,调度器的硬件配置与后端服务器的硬件配置相同,并且是对通常Web服务。使 用更高的硬件配置(如千兆网卡和更快的处理器)做为调度器,调度器所能调度的服务器数量会相应增长。当应用不一样时,服务器的数目也会相应地改变。因此,以上数据估计主要是为三种方法的伸缩性进行量化比较。

五、lvs的负载调度算法 在内核中的链接调度算法上,IPVS已实现了如下八种调度算法:

一 轮叫调度(Round­Robin Schedul ing   )

轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不一样的服务器,即每次调度执行i=(i+1)mod n,并选出第i台服务器。算法的优势是其简洁性,它无需记录当前全部链接的状态,因此它是一种无状态调度。

二 加权轮叫调度(Weighted Round­Robin Scheduling   )

加权轮叫调度 (Weighted Round­Robin Scheduling)算法能够解决服务器间性能不一的状况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高 低和轮叫方式分配请求到各服务器。权值高的服务器先收到的链接,权值高的服 务器比权值低的服务器处理更多的链接,相同权值的服务器处理相同数目的链接数。

三 最小链接调度(Least­Connect ion Schedul ing   )

最小链接调度(Least­ Connect ion Scheduling)算法是把新的链接请求分配到当前链接数最小的服务器。最小链接调度是一种动态调度算法,它经过服务器当前所活跃的链接数来估计服务器的负载状况。调度器须要记录各个服务器已创建链接的数目,当一个请求被调度到某台服务器,其链接数加1;当链接停止或超时,其链接数减一。

四 加权最小链接调度(Weighted Least­Connectio n Scheduling)

  加权最小链接调 度(Weighted Least­Connectio n Scheduling)算法是最小链接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员能够动态地设置服务器的权值。加权最小链接调度在调度新链接时尽量使服务器的已创建链接数和其权值成比例。

五 基于局部性的最少连接(Locality­Based Least Connections Schedulin g   )

基于局部性的最少连接调度(Locality­Based Least Connections Scheduling,如下简称为LBLC算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,由于在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服务器均可以处理任一请求,算法的设计目标是在服务器的负载基本平衡状况下,将相同目标IP地址的请求调度到同一台服务器,来提升各台服务器的访问局部性和主存Cache命中率,从而整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP   地址 找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工 做负载,则用“最少连接”的原则选出一个可用的服务器,将请求发送到该服务器。

六 带复制的基于局部性最少连接(Locality­Based Least Connectio ns with Replication Scheduling)

带复制的基于局部性最少连接调度(Locality­Based Least Connectio ns with Replication Scheduling,如下简称为LBLCR)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不一样之处是它要 维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的服务请求,一台Cache 服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会从全部的Cache服务器中按“最小链接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器,很快这台Cache服务器也会超载,就会重复上述过程选出新的Cache服务器。这样,可能会致使该“热门”站点的映像会出现 在全部的Cache服务器上,下降了Cache服务器的使用效率。LBLCR调度算法将“门站”点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增长时,会增长集合里的Cache服务器,来处理不断增加的负载;当该“热门”站点的请求负载下降时,会减小集合里的Cache服务器 数目。这样,该热门站点的映像不可能出如今全部的Cache服务器上,从而提供Cache集群系统的使用效率。LBLCR算法先根据请求的目标IP 地址找出该目标IP地址对应的服务器组;按“最小链接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按“最小链接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服 务器从服务器组中删除,以下降复制的程度。

七 目标地址散列调度(Destinat ion Hashing Scheduling   )

目标地址散列调度 (Destinat ion Hashing Scheduling)算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,经过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。

八 源地址散列调度(Source Hashing Scheduling)

源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本类似,除了将请求的目标IP地址换成请求的源IP   地址,因此这里不一一叙述。在实际应用中,源地址散列 调度和目标地址散列调度能够结合使用在防火墙集群中,它们能够保证整个系统的惟一出入口。

                                   --leeypp@gmail.com




相关文章
相关标签/搜索