LVS负载均衡调度算法

in with 0 comment

十种 LVS 负载均衡调度算法

根据前面的介绍,了解了 LVS 的三种工作模式,但不管实际环境中采用的哪种模式,调度算法进行调度的策略与算法都是 LVS 的核心技术,LVS 在内核中主要实现了以下十种调度算法。

1. 轮询调度(Round Robin 简称 RR)

RR 算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询发酸假设所有的服务器处理请求的能力都一样,调度器会将所有的请求平均分配给每个真实服务器。

2. 加权轮询调度(Weight Round Robin 简称 WRR)

WRR 算法主要是对轮询算法的一直给你优化与补充,LVS 会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器 A 的权值为 1,服务器 B 的权值为 2,则调度器调度到服务器 B 的请求回事服务器 A 的两倍。权值越高的服务器处理的请求越多。

3. 最小链接调度(Least Connections 简称 LC)

LC 算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加 1;当连接数中断或者超时,其连接数减 1。 (集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好的均衡负载)。

4. 加权最小连接调度(Weight Least Connectyions 简称 WLC)

WLC 算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为 1,系统管理员可以动态的设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态的调整其权值。

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

LBLC 算法是针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache 集群客户请求豹纹的目标 IP 地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标 IP 地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和 Cache 命中率,从而提升整个集群系统的处理能力。LBLC 调度算法先根据请求的目标 IP 地址找出该目标 IP 地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用 最少连接 的原则选出一个可用的服务器,将请求发送到服务器。

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

LBLCR 算法也是针对目标 IP 地址的负载均衡,目前主要用于 Cache 集群系统,它与 LBLC 不同之处是它要维护从一个目标 IP 地址到一组服务器的映射,而 LBLC 算法维护从一个目标 IP 地址到一台服务器的映射。按 最小连接 原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按 最小连接 原则从整个集群中选出一台服务器,将该服务器假如到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

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

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

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

SH 算法先根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且为超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法相同,它的算法流程与目标地址散列调度算法基本相似。

9. 最短的期望的延迟(Shortest Expected Delay 简称 SED)

SED 算法基于 WLC 算法。举个例子:ABC 三台服务器权重分别为 1、2、3.那么如果使用 WLC 算法的话一个新请求进入时他可能会分给 ABC 中的任意一个。使用 SED 算法后会进行一个运算: A:(1 + 1) / 2 = 2 B:(1 + 2) / 2 = 3 / 2 C:(1 + 3) / 2 = 4 / 3 就把请求交给得出运算结果最小的服务器。

10. 最少队列调度(Never Queue 简称 NQ)

NQ 算法,无需队列。如果 Real Server 的连接数等于 0 就直接分配过去,不需要进行 SED 运算。