(转)详解LVS负载均衡之三种工做模型原理和10种调度算法

原创做品,容许转载,转载时请务必以超连接形式标明文章  原始出处 、做者信息和本声明。不然将追究法律责任。 http://linuxnx.blog.51cto.com/6676498/1195379

 

LVS负载均衡原理和算法详解前端

   Internet的快速增加使多媒体网络服务器面对的访问数量快速增长,服务器须要具有提供大量并发访问服务的能力,所以对于大负载的服务器来说,CPU、I/O处理能力很快会成为瓶颈。因为单台服务器的性能老是有限的,简单的提升硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能知足大量并发访问的须要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增加的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。 LVS是一个开源的软件,能够实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。 linux

 

   在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有经过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,咱们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,经过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和经过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们能够极大地提升系统的伸缩性。因此,IPVS软件实现了这三种IP负载均衡技术,它们的大体原理以下。算法

 

1,Virtual Server via Network Address Translation(VS/NAT)后端

  经过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文经过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程服务器

 

 

2,Virtual Server via Direct Routing(VS/DR)网络

  VS/DR经过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术同样,VS/DR技术可极大地 提升集群系统的伸缩性。这种方法没有IP隧道的开销, 对集群中的真实服务器也没有必须支持IP隧道协议的要求,可是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。并发

 

 

 

3,Virtual Server via IP Tunneling(VS/TUN)负载均衡

  采用NAT技术时,因为请求和响应报文都必须通过调度器地址重写,当客户请求愈来愈多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文经过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,因此调度器只处理请求报文。因为通常网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量能够提升10倍。函数

  

 

  LVS系统结构与特色:性能

   使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感受到一个虚拟服务器.物理服务器之间能够经过高速的LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各类服务请求分发给后面的物理服务器,让整个集群表现得象一个服务于同一IP地址的虚拟服务器 

 

   LVS集群系统具备良好的可扩展性和高可用性。 可扩展性是指,LVS集群创建后,能够很容易地根据实际的须要增长或减小物理服务器。而高可用性是指当检测到服务器节点或服务进程出错、失效时,集群系统可以自动进行适当的从新调整系统。

 

   LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率,将请求均衡地转移到不一样的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,并且无需修改客户端和服务器端的程序。  

为此,在设计时须要考虑系统的透明性、可伸缩性、高可用性和易管理性。 

 

 LVS集群采用三层结构,其主要组成部分为:

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

   B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

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

 

 

 

针对不一样的网络服务需求和服务器配置,IPVS调度器实现了以下十种负载调度算法:

 

1,轮叫(Round Robin)简称RR

   调度器经过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而无论服务器上实际的链接数和系统负载。

 

2,加权轮叫(Weighted Round Robin) 简称WRR

   调度器经过"加权轮叫"调度算法根据真实服务器的不一样处理能力来调度访问请求。 这样能够保证处理能力强的服务器处理更多的访问流量。调度器能够自动问询真实服务器的负载状况,并动态地调整其权值。

 

3,最少连接(Least Connections)简称LC

  调度器经过"最少链接"调度算法动态地将网络请求调度到已创建的连接数最少的服务器上。 若是集群系统的真实服务器具备相近的系统性能,采用"最小链接"调度算法能够较好地均衡负载。

 

4,加权最少连接(Weighted Least Connections)简称WLC

  在集群系统中的服务器性能差别较大的状况下,调度器采用"加权最少连接"调度算法优化负载均衡性能,具备较高权值的服务器将承受较大比例的活动链接负载。调度器能够自动问询真实服务器的负载状况,并动态地调整其权值。

 

5,基于局部性的最少连接(Locality-Based Least Connections)简称LBLC

  "基于局部性的最少连接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工做负载,则用"最少连接"的原则选出一个可用的服务 器,将请求发送到该服务器。

 

6,带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)简称LBLCR

  "带复制的基于局部性最少连接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不一样之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小链接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小链接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改, 将最忙的服务器从服务器组中删除,以下降复制的 程度。

 

7,目标地址散列调度(Destination Hashing)简称DH

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

 

8,源地址散列调度(Source Hashing)简称SH

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

 

9,最短的指望的延迟(shortest expected delay scheduling)简称sed
   
基于wlc算法,举例说明
  ABC三台机器分别权重123,链接数也分别是123,name若是使用WLC算法的话一个新请求 进入时他可能会分给ABC中任意一个,使用SED算法后会进行这样一个运算.
   A:(1+1)/2
   B:(1+2)/2
   C:(1+3)/3
   根据运算结果,把链接交给C

 

10,最少队列调度(never queue scheduling)简称nq

 无需列队,若是有台realserver的链接数=0 就直接分配过去,不须要进行sed运算 .

 

 

 

本文出自 “linux_夏日” 博客,请务必保留此出处http://linuxnx.blog.51cto.com/6676498/1195379

相关文章
相关标签/搜索