LVS(Linus Virtual Server):三种IP负载均衡方式比较+另三种Web负载均衡方式

我还写了一篇:【系统架构】亿级Web系统搭建(1):Web负载均衡(阿里)html

还有个姊妹篇也能够参考这个文章:六大Web负载均衡原理与实现

什么是LVS (Linux Virtual Server)?  

首先简单介绍一下LVS (Linux Virtual Server)究竟是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率,将请求均衡地转移到不一样的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,并且无需修改客户端和服务器端的程序。 
  为此,在设计时须要考虑系统的透明性、可伸缩性、高可用性和易管理性。通常来讲,LVS集群采用三层结构,其体系结构如图所示: 
前端


LVS主要组成部分

  负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(咱们可称之为虚拟IP地址)上的。 
  服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务通常有WEB、MAIL、FTP和DNS等。 
  共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。web


LVS负载均衡方式:

 (1)NAT模式-Virtual Server via Network Address Translation NAT(VS/NAT)

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

(2)TUN隧道模式-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隧道设备上,因此就处理这个请求,而后根据路由表将响应报文直接返回给客户。 
后端

(3)DR直接路由模式-Virtual Server via Direct Routing(VS/DR)

 VS/DR方式是经过改写请求报文中的MAC地址部分来实现的Director和RealServer必需在物理上有一个网卡经过不间断的局域网相连。 RealServer上绑定的VIP配置在各自Non-ARP的网络设备上(如lo或tunl),Director的VIP地址对外可见,而RealServer的VIP对外是不可见的。RealServer的地址便可以是内部地址,也能够是真实地址。 
 
  VS/DR的工做流程如图所示:它的链接调度和管理与VS/NAT和VS/TUN中的同样,它的报文转发方法又有不一样,将报文直接路由给目标服务器。在VS/DR中,调度器根据各个服务器的负载状况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改成选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。由于数据帧的MAC地址是选出的服务器,因此服务器确定能够收到这个数据帧,从中能够得到该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,而后根据路由表将响应报文直接返回给客户。 
  VS/DR的方式是目前大型网站使用最普遍的一种负载均衡手段。浏览器


三种负载均衡方式比较

  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地址或者端口号。这会带来实现的工做量,同时应用模块检查报文的开销会下降系统的吞吐率。 
  在VS/TUN 的集群系统中,负载调度器只将请求调度到不一样的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就能够处理大量的请求,它甚至能够调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即便负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。因此,VS/TUN能够极大地增长负载调度器调度的服务器数量。 
  VS/TUN调度器能够调度上百台服务器,而它自己不会成为系统的瓶颈,能够用来构建高性能的超级服务器。VS/TUN技术对服务器有要求,即全部的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操做系统,咱们没对其余操做系统进行测试。由于“IP Tunneling”正成为各个操做系统的标准协议,因此VS/TUN应该会适用运行其余操做系统的后端服务器。 
  跟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服务。使用更高的硬件配置(如千兆网卡和更快的处理器)做为调度器,调度器所能调度的服务器数量会相应增长。当应用不一样时,服务器的数目也会相应地改变。因此,以上数据估计主要是为三种方法的伸缩性进行量化比较。服务器


附:其余Web负载均衡算法

  • HTTP重定向负载均衡 
      当用户发来请求的时候,Web服务器经过修改HTTP响应头中的Location标记来返回一个新的url,而后浏览器再继续请求这个新url,实际上就是页面重定向。经过重定向,来达到“负载均衡”的目标。例如,咱们在下载PHP源码包的时候,点击下载连接时,为了解决不一样国家和地域下载速度的问题,它会返回一个离咱们近的下载地址。重定向的HTTP返回码是302。网络

    优势:比较简单。 
    缺点:浏览器须要两次请求服务器才能完成一次访问,性能较差。重定向服务自身的处理能力有可能成为瓶颈,整个集群的伸缩性国模有限;使用HTTP302响应码重定向,有可能使搜索引擎判断为SEO做弊,下降搜索排名。架构

  • DNS域名解析负载均衡 
      DNS(Domain Name System)负责域名解析的服务,域名url其实是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射。而一个域名是能够配置成对应多个IP的。所以,DNS也就能够做为负载均衡服务。 
      事实上,大型网站老是部分使用DNS域名解析,利用域名解析做为第一级负载均衡手段,即域名解析获得的一组服务器并非实际提供Web服务的物理服务器,而是一样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进行负载均衡,将请求分发到真是的Web服务器上。

    优势:将负载均衡的工做转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦,同时许多DNS还支持基于地理位置的域名解析,即会将域名解析成举例用户地理最近的一个服务器地址,这样能够加快用户访问速度,改善性能。 
    缺点:不能自由定义规则,并且变动被映射的IP或者机器故障时很麻烦,还存在DNS生效延迟的问题。并且DNS负载均衡的控制权在域名服务商那里,网站没法对其作更多改善和更强大的管理。

  • 反向代理负载均衡 
      反向代理服务能够缓存资源以改善网站性能。实际上,在部署位置上,反向代理服务器处于Web服务器前面(这样才可能缓存Web相应,加速访问),这个位置也正好是负载均衡服务器的位置,因此大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不一样的Web服务器上。Web服务器处理完成的响应也须要经过反向代理服务器返回给用户。因为web服务器不直接对外提供访问,所以Web服务器不须要使用外部ip地址,而反向代理服务器则须要配置双网卡和内部外部两套IP地址。

    优势:和反向代理服务器功能集成在一块儿,部署简单。 
    缺点:反向代理服务器是全部请求和响应的中转站,其性能可能会成为瓶颈。

 

参考: LVS:三种负载均衡方式比较+另三种负载均衡方式 

相关文章
相关标签/搜索