LVS:三种模式的原理、调度算法、及应用介绍

LVS三种模式原理(nat/dr/tun)



LVS/NAT:

wKiom1gVUWSw9vHAAACnqA4h99s922.jpg

  如上图,客户通过virtual IP (虚拟服务的IP地址,公网地址),访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址VIP,改写成选定服务器的地址(RIP),报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。

  同时,调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器(Real server)的响应报文经过调度器时,调度器将报文的源地址和源端口改为VIP和相应的端口,再把报文发给用户。

  我们在连接上引入一个状态机,不同的报文会使得连接处于不同的状态,不同的状态有不同的超时值。在TCP连接中,根据标准的TCP有限状态机进行状态迁移;在UDP中,我们只设置一个UDP状态。不同状态的超时值是可以设置的,在缺省情况下,SYN状态的超时为1分钟,ESTABLISHED状态的超时为15分钟,FIN状态的超时为1分钟;UDP状态的超时为5分钟。当连接终止或超时,调度器将这个连接从连接Hash表中删除。

   小结:

    1、对外界可视的只有director,后端的真实服务器(real server)是不可见的;

    2、所有响应报文从real server发出后,必须再经由director才能转发到客户端

    3、director与real server,必须在同一IP网络内,且应该是私网内,real server的网关必须指向director,有测试报告显示,当后端real server在10到20台之间的时候,director容易成为整个集群系统的瓶颈,因此对大型站点来讲该方法并非最佳的负载均衡方法

    4、支持端口映射,可修改请求报文的目标PORT;

    5、vs必须是Linux系统,rs可以是任意系统;


LVS/DR:


wKioL1gVU1WCeOipAACzH2kj6gw977.jpg




   如上图,(备调用器zuhi,)在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。

  因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上(将VIP设置在回环地址上Lo),服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。由于是real server直接将相应报文经由回环地址发给客户端的,所以客户端既不知道real server的存在,也可以将nat模式中director瓶颈隐患处理了,适用范围较广



wKiom1gVU1WDsusbAAB3COOEII4892.jpg

  小结

    1、确保前端路由器将目标IP为VIP的请求报文发往Director:

        (a) 在前端网关做静态绑定;

        (b) 在RS上使用arptables;

        (c) 在RS上修改内核参数以限制arp通告及应答级别;

            arp_announce

            arp_ignore

    2、RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;

    3、RS跟Director要在同一个物理网络;

    4、请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;

    5、不支持端口映射;

    

   但是很多人都想,假如用real server直接将相应报文发给客户端,那么VIP与DIP和RIP需要在同一网段,这样的话就需要大量的公网地址IP了,大大增加了额外的开销,可否将VIP于DIP和RIP分别设置在两个网段中,VIP用公网地址,而DIP和RIP用私网地址?答案是可以的。

   假如将VIP与DIP和RIP设置在两个IP网络中,那么Real server就要将网关指向通往公网的IP,绝对不能指向director(指向director的话与lvs/net模式还有由什么区别?)




LVS/TUN(通过IP隧道实现虚拟服务器)


 

   IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。


wKioL1gVX6ujysEcAAC0kcML3jE436.jpg



  如下图:

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

    



wKiom1gVX6yiYOn1AABs_It74_Q396.jpg

   在这里,请求报文的目标地址为VIP,响应报文的源地址也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。

  

  小结:

    1、DIP, VIP, RIP都只能是公网地址;

    2、RS的网关不能,也不可能指向DIP;

    3、请求报文要经由Director,但响应不能经由Director,而是real server直接用VIP响应客户端;

    4、不支持端口映射;

    5、RS的OS得支持隧道功能;

    



三种方法的优缺点比较:



    

三种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服务。使用更高的硬件配置(如千兆网卡和更快的处理器)作为调度器,调度器所能调度的服务器数量会相应增加。当应用不同时,服务器的数目也会相应地改变。所以,以上数据估计主要是为三种方法的伸缩性进行量化比较。


大多数Internet服务都有这样的特点:

  请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。


  所以适当的将请求报文与响应报文发散处理,是一种很好的集群对外服务性能向往扩展的思路

==================================================分界线========================================================================

LVS之调度算法

根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种:

  静态方法:仅根据算法本身进行调度;

     RR:roundrobin,轮询,将外部的请求报文轮流分配到集群服务中的每一台Real server中(每一台是只要定义在集群中的Real server,不论是否活动还是非活动,主要是因为lvs无法对后端服务器的健康状态做检查),主要强调的是公平调度


     WRR:Weighted RR,加权轮询;调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    如:RS1–>weight 1

        RS2–>weight 2

       那么我们可以理解为后端一共有三台RS,分别是RS1,和两台RS2

    

     SH:Source Hashing,实现session sticy,将报文的源IP地址当做key,做一张hash表;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定;


    DH:Destination Hashing;请求的目标地址当做key,做一张hash表,将发往同一个目标地址的请求始终转发至第一次挑中的RS,常用于缓存服务器;


   动态方法:主要根据每RS当前的负载状态及调度算法进行调度;

       

      LC:least connections,调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。(其算法为:Overhead=activeconns*256+inactiveconns)

        

      WLC:Weighted LC,在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。(其算法为:Overhead=(activeconns*256+inactiveconns)/weight

若会话值一致 , 从上而下搜索第一台服务器作响应)


      SED:Shortest Expection Delay,基于wlc算法。这个必须举例来说了:
          ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
        A(1+1)/1
        B(1+2)/2
        C(1+3)/3
        根据运算结果,把连接交给C 。


       NQ:Never Queue,无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算


      LBLC:Locality-Based LC,“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。

      该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。


      LBLCR:LBLC with Replication,“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射

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



还有另外一种,但是不属于ipvs cluster算法:FWM,FireWall Mark

   这一种发放时利用iptables,在PREROUTING链上,将规划好的,哪种协议,发往哪个IP,哪个端口的报文,全都打上标记,当ipvs cluster收到报文的时候,查看到报文上有Firewall mask,将事先定义好的Firewall mask同类发往符合规则的后端集群Real server进行报文处理。   

   此种方法时借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度。

原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/55859

(0)
上一篇 2016-10-30 10:37
下一篇 2016-10-30 11:21

相关推荐

  • Linux下的SSH端口转发

    通常情况下两个不同的网络之间总会开放某一些特定的端口用于通讯使用,而SSH所使用的22端口通常就在开放之列。基于SSH的端口转发就是利用SSH作为中间的代理,达到绕过两个网络之间的限制,顺利的进行任意的端口的访问。端口转发可以分为三种,正向端口转发,反向端口转发和动态端口转发。为了演示这三种端口转发方式的用法我们先假设存在有2个网域Office和Prod,在…

    Linux干货 2015-02-09
  • 编程语言编年史

          我们都知道,编程语言是一组用来定义计算机程序的语法规则。它是一种被标准化的交流语言,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是…

    Linux干货 2017-03-30
  • Linux发行版的基础目录名称、功能及目录的命名法则

    Linux发行版的基础目录名称、功能及目录的命名法则 基础目录名称及功能 /lib 32位系统的基础共享库文件和可装载的内核模块,用于为/bin和/sbin下的程序提供共享库,并为内核提供内核模块 /lib64 64位系统的基础共享库文件,用于为/bin和/sbin下的程序提供共享库 /etc 系统程序的配置文件 /bin 用户命令的程序文件,所有用户可用 …

    Linux干货 2017-07-02
  • iptables基础概念

    iptables基本概念梳理 前言 netfilter/Iptables (其中包括netfilter和Iptables两个组件)组 成了Linux平台下的包过滤防火墙,它与大多数的Linux自带软 件一样,这个防火墙是免费提供的,它可以代替昂贵的企业级 防火墙来解决实际问题与实际方案,完成封包过滤,封包重定 向和网络地址转换等功能。 一、工作原理 数据包从…

    Linux干货 2016-12-19
  • Linux文本处理工具和正则表达式

    概述:     Linux核心哲学思想中很重硬件要的一条内容就是一切皆文件,在Linux系统上,无论硬件、软件、配置文件等等一切,都以文件形式呈现出来。一般文件类型有:普通文件、目录文件、链接文件、管道文件、套接字文件、字符设备文件、块设备文件等。而普通文件里面又有一些文本文件、二进制文件等细分化的文件类型,而我们日常…

    Linux干货 2016-08-07
  • 用户组和权限管理

    一、3A认证     Authentication:认证     Autherization:授权     Accoutiong|Audition:审计 二、用户user      linu…

    Linux干货 2016-08-04