`
jackyhongvip
  • 浏览: 159709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LVS中的负载均衡技术浅析

 
阅读更多

通过NAT实现虚拟服务器(VS/NAT)
由于IPv4中IP地址空间的日益紧张和安全方面的原因,很多网络使用保留IP地址(10.0.0.0/255.0.0.0、 172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0)[64, 65, 66]。这些地址不在Internet上使用,而是专门为内部网络预留的。当内部网络中的主机要访问Internet或被Internet访问时,就需要采用网络地址转换(Network Address Translation, 以下简称NAT),将内部地址转化为Internets上可用的外部地址。NAT的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户相信它们连接一个IP地址,而不同IP地址的服务器组也认为它们是与客户直接相连的。由此,可以用NAT方法将不同IP地址的并行网络服务变成在一个IP地址上的一个虚拟服务。
VS/NAT的体系结构如图2所示。在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如NFS)共享,也可以通过一个分布式文件系统来提供。


图2:VS/NAT的体系结构
客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。我们在连接上引入一个状态机,不同的报文会使得连接处于不同的状态,不同的状态有不同的超时值。在TCP 连接中,根据标准的TCP有限状态机进行状态迁移,这里我们不一一叙述,请参见W. Richard Stevens的《TCP/IP Illustrated Volume I》;在UDP中,我们只设置一个UDP状态。不同状态的超时值是可以设置的,在缺省情况下,SYN状态的超时为1分钟,ESTABLISHED状态的超时为15分钟,FIN状态的超时为1分钟;UDP状态的超时为5分钟。当连接终止或超时,调度器将这个连接从连接Hash表中删除。
这样,客户所看到的只是在Virtual IP Address上提供的服务,而服务器集群的结构对用户是透明的。对改写后的报文,应用增量调整Checksum的算法调整TCP Checksum的值,避免了扫描整个报文来计算Checksum的开销。
在一些网络服务中,它们将IP地址或者端口号在报文的数据中传送,若我们只对报文头的IP地址和端口号作转换,这样就会出现不一致性,服务会中断。所以,针对这些服务,需要编写相应的应用模块来转换报文数据中的IP地址或者端口号。我们所知道有这个问题的网络服务有FTP、IRC、 H.323、CUSeeMe、Real Audio、Real Video、Vxtreme / Vosiac、VDOLive、VIVOActive、True Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha MIDPlug、iChat Pager、Quake和Diablo。
下面,举个例子来进一步说明VS/NAT,如图3所示:
 

图3:VS/NAT的例子

VS/NAT的配置如下表所示,所有到IP地址为202.103.106.5和端口为80的流量都被负载均衡地调度的真实服务器172.16.0.2: 80和172.16.0.3:8000上。目标地址为202.103.106.5:21的报文被转移到172.16.0.3:21上。而到其他端口的报文将被拒绝。
Protocol Virtual IP Address Port Real IP Address Port Weight 
TCP 202.103.106.5 80 172.16.0.2 80 1 
172.16.0.3 8000 2 
TCP 202.103.106.5 21 172.16.0.3 21 1 
从以下的例子中,我们可以更详细地了解报文改写的流程。
访问Web服务的报文可能有以下的源地址和目标地址:
SOURCE 202.100.1.2:3456 DEST 202.103.106.5:80 
调度器从调度列表中选出一台服务器,例如是172.16.0.3:8000。该报文会被改写为如下地址,并将它发送给选出的服务器。
SOURCE 202.100.1.2:3456 DEST 172.16.0.3:8000 
从服务器返回到调度器的响应报文如下:
SOURCE 172.16.0.3:8000 DEST 202.100.1.2:3456 
响应报文的源地址会被改写为虚拟服务的地址,再将报文发送给客户:
SOURCE 202.103.106.5:80 DEST 202.100.1.2:3456 
这样,客户认为是从202.103.106.5:80服务得到正确的响应,而不会知道该请求是服务器172.16.0.2还是服务器172.16.0.3处理的。

 

通过IP隧道实现虚拟服务器(VS/TUN)
在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。
IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。
我们利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。VS/TUN的体系结构如图4所示,各个服务器将VIP地址配置在自己的IP隧道设备上。
 

图4:VS/TUN的体系结构VS/TUN的工作流程如图5所示:它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP 的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
 


图5:VS/TUN的工作流程
在这里需要指出,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道究竟是哪一台服务器处理的。
 


通过直接路由实现虚拟服务器(VS/DR)
跟VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。该方法与IBM的NetDispatcher产品中使用的方法类似(其中服务器上的IP地址配置方法是相似的),但IBM 的NetDispatcher是非常昂贵的商品化产品,我们也不知道它内部所使用的机制,其中有些是IBM的专利。
VS/DR的体系结构如图7所示:调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
 

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


图8:VS/DR的工作流程
在VS/DR中,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
VS/DR负载调度器跟VS/TUN一样只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。
三种方法的优缺点比较

三种IP负载均衡技术的优缺点归纳在下表中:
_ VS/NAT VS/TUN VS/DR 
Server any Tunneling Non-arp device 
server network private LAN/WAN LAN 
server number low (10~20) High (100) High (100) 
server gateway load balancer own router Own router 
注:以上三种方法所能支持最大服务器数目的估计是假设调度器使用100M网卡,调度器的硬件配置与后端服务器的硬件配置相同,而且是对一般Web服务。使用更高的硬件配置(如千兆网卡和更快的处理器)作为调度器,调度器所能调度的服务器数量会相应增加。当应用不同时,服务器的数目也会相应地改变。所以,以上数据估计主要是为三种方法的伸缩性进行量化比较。
6.1. Virtual Server via NAT
VS/NAT的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器。我们在Pentium 166 处理器的主机上测得重写报文的平均延时为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地址或者端口号。这会带来实现的工作量,同时应用模块检查报文的开销会降低系统的吞吐率。
6.2. 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应该会适用运行其他操作系统的后端服务器。
6.3. Virtual Server via Direct Routing
跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。
小结

本文主要讲述了LVS集群中的三种IP负载均衡技术。在分析网络地址转换方法(VS/NAT)的缺点和网络服务的非对称性的基础上,我们给出了通过IP隧道实现虚拟服务器的方法VS/TUN,和通过直接路由实现虚拟服务器的方法VS/DR,极大地提高了系统的伸缩性

分享到:
评论

相关推荐

    lvs负载均衡集群详解

    LVS负载均衡集群在企业中的应用非常广泛,例如Web服务、数据库服务、邮件服务等。通过LVS,可以实现服务器的负载均衡,提高系统的性能和可用性,降低系统的成本和风险。 Ipvsadm命令是LVS负载均衡集群的管理命令,...

    虚拟机中Lvs的负载均衡实验

    虚拟机中 LVS 的负载均衡实验 在虚拟机中实现 LVS 负载均衡需要配置 LVS director 和 real 服务器,并进行相应的设置和配置。下面是实现 LVS 负载均衡的详细步骤和知识点: 一、LVS 负载均衡的基本概念 LVS...

    LVS集群与负载均衡

    6. IP负载均衡技术:LVS的IP负载均衡技术主要分为三种:NAT(网络地址转换)、DR(直接路由)和TUN(IP隧道)。NAT是最简单的实现方式,但可能会成为系统的瓶颈;DR和TUN则允许用户直接与实际服务器通信,提高了效率...

    LVS 负载均衡配置参考

    它通过IP负载均衡技术和基于内容请求分发技术来实现这一目标。具体而言,LVS通过一个调度器将外部请求分发到后端的一组真实服务器上进行处理,并且能够自动检测并隔离故障服务器,从而确保整体服务的连续性和稳定性...

    LVS负载均衡

    LVS,全称Linux Virtual Server,是Linux系统中的一种高性能的负载均衡技术,由章文嵩博士发起并维护,旨在提供一个高质量的虚拟服务器集群解决方案。LVS作为开源项目,其官方网站为www.linuxvirtualserver.org。自...

    lvs实现负载均衡

    LVS (Linux Virtual Server) 是一种在 Linux 平台上实现负载均衡的技术。它可以有效地将大量的网络请求分发到多个后端服务器上处理,从而提高系统的整体响应速度和服务能力。LVS 项目由章文嵩博士于 1998 年发起,...

    LVS实现网络负载均衡实例精讲

    LVS(Linux Virtual Server)是一种基于Linux平台的开源软件,它可以利用IP负载均衡技术和内容请求分发技术来构建高度可扩展和高可用的服务器集群。 #### 二、LVS的核心功能 LVS的核心功能在于能够实现高可用性和...

    lvs负载均衡源码

    LVS主要依赖于Linux内核中的IP层调度器,实现网络数据包的分发和负载均衡。 LVS的核心技术包括三种工作模式:DR(Direct Routing)、NAT(Network Address Translation)和TUNNEL(IP Tunneling)。每种模式都有其...

    LVS实现网络负载均衡

    LVS实现网络负载均衡LVS实现网络负载均衡

    lvs负载均衡集群实验.docx

    在lvs负载均衡集群中,需要一台Director Server服务器,两台Real Server服务器(分别为Real Server 1和Real Server 2)。Director Server负责将用户的请求分发到不同的Real Server上,而Real Server则提供实际的服务...

    LVS网络负载均衡手册(正式版)

    接着,手册深入讲解了IPVS负载均衡技术,主要包括三种不同的实现方式:VS/NAT(Virtual Server via Network Address Translation)、VS/DR(Virtual Server via Direct Routing)和VS/TUN(Virtual Server via IP ...

    lvs四层的负载均衡和七层负载均衡的区别

    负载均衡技术是现代互联网架构中不可或缺的一部分,其主要目的是通过合理地分配网络请求到不同的服务器上来提高系统的可用性和扩展性。根据处理数据包的层次不同,负载均衡器可以分为四层负载均衡和七层负载均衡。 ...

    基于LVS负载均衡的高性能Web站点设计与实现

    在构建高性能Web站点时,基于LVS(Linux Virtual Server)的负载均衡技术是关键的一环。LVS是一种开源的负载均衡解决方案,它能够将网络流量有效地分发到多个服务器上,以提高系统的处理能力和可用性。本文将详细...

    LVS+Keepalived实现高可用负载均衡

    本文档中所描述的具体业务场景是以CentOS Linux release 6.0 (Final)操作系统为基础,使用LVS+Keepalived实现高可用负载均衡。系统架构如图2所示,其中负载均衡服务器负责将客户端对VIP的访问请求转发至后端的真实...

    keepalived+lvs集群负载均衡配置

    在现代互联网架构中,为了确保服务的高可用性和负载均衡,通常会采用一系列技术手段来实现这一目标。其中,Keepalived 和 LVS 组合是一种常用的方案,尤其适用于 Linux 平台上的集群构建。 **Keepalived** 是一款...

    LVS网络负载均衡搭建指南.docx

    LVS(Linux Virtual Server)是基于Linux操作系统的一种高性能、高可用的网络负载均衡技术。它通过将请求分发到多个后端服务器,实现了对网络服务的负载均衡,从而提高了服务的稳定性和响应速度。LVS支持多种调度...

Global site tag (gtag.js) - Google Analytics