LVS简介及其调度算法说明

LVS简介及其调度算法说明前端



    虚拟服务器(LVS)的体系结构如图所示,一组服务器经过高速的局域网或者地理分布的广域网相互链接,在它们的前端有一个负载调度器(Load Balancer)。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器同样。客户程序不受服务器集群的影响不需做任何修改。系统的伸缩性经过在服务机群中透明地加入和删除一个节点来达到,经过检测节点或服务进程故障和正确地重置系统达到高可用性。因为咱们的负载调度技术是在Linux内核中实现的,咱们称之为Linux虚拟服务器(Linux Virtual Server算法


wKiom1YJC9SAi9jYAADQBZiOqYE656.jpg







 

在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有经过网络地址转换(Network AddressTranslation)将一组服务器构成一个高性能的、高可用的虚拟服务器,咱们称之为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负载均衡技术,它们的大体原理以下(咱们将在其余章节对其工做原理进行详细描述),后端

 

Virtual Server via Network Address Translation(VS/NAT)服务器

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

wKiom1YJDIHDweU-AADy0-CQsaw969.jpg

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

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

 

Virtual Server via Direct Routing(VS/DR)性能

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


wKiom1YJDJjz2vPHAAFzdjCjBso273.jpg

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

 

轮叫(Round Robin)

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

 

加权轮叫(Weighted Round Robin)

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

 

最少连接(Least Connections)

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

 

加权最少连接(Weighted Least Connections)

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

 

基于局部性的最少连接(Locality-Based Least Connections)

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

 

带复制的基于局部性最少连接(Locality-Based Least Connections withReplication)

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

 

目标地址散列(Destination Hashing)

"目标地址散列"调度算法根据请求的目标IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。

 

源地址散列(Source Hashing)

"源地址散列"调度算法根据请求的源IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。

相关文章
相关标签/搜索