lvs的12种调度算法

lvs的调度算法多达12种,下面依次进行简单介绍。算法后跟的英文缩写为设置算法时实际的参数选项。

一、静态算法

静态算法只根据算法本身进行调度,不考虑服务器当前的负载情况。静态的调度算法有4种。

1、轮询算法 rr

调度器将收到的请求按顺序轮流分配到集群中的RS。均匀地分配请求,不考虑服务器连接数和负载情况。

2、加权轮询算法 wrr

根据RS的处理能力给予不同的权重,性能好的服务器分配更多的请求。

3、源地址哈希算法 sh

根据请求的源IP地址作为哈希键从静态分配的哈希表中找出对应的服务器。同一个IP地址的请求始终发往第一次调度的RS,可实现会话绑定。

4、目标地址哈希算法 dh

根据请求的目标IP地址作为哈希键从静态分配的哈希表中找出对应的服务器。发往同一个目标地址的请求始终转发到第一次调度的RS,可用于实现正向代理缓存场景中的负载均衡,如:web缓存。

二、动态算法

主要根据每个RS当前的负载状况和算法进行调度,负载(overhead)较小的RS下次将会被调度。

1、最少连接算法(Least Connection) lc

动态地将网络请求调度到连接数最少的RS上。如果集群各服务器性能相近,这种算法可以较好地均衡负载。适用于长链接应用。其负载计算公式如下:

overhead=活动连接数*256+非活动连接数

2、加权最少连接算法(Weighted Least Connection) wlc

集群服务器性能差异较大时,使用这种算法比较合适,具有较高权重值的服务器将承受较大比例的活动连接负载。这也是lvs的默认调度算法。其负载计算公式如下:

overhead=(活动连接数*256+非活动连接数)/权重值

3、最短期望延迟算法(Shortest Expected Delay Scheduling) sed

当使用wlc算法时,如果RS的连接数和权重比例正好一样,下一个请求到来时可能会分配给任意RS,而不是性能最好的RS,sed算法保障了高权重优先。该算法只考虑活动连接,不考虑非活动连接。 

overhead=(活动连接数+1)*256/权重值

 4、最少队列算法(Never Queue Scheduling) nq

如果有RS的连接数为0,就直接分配过去。第一轮会均匀分配,后续使用sed。

5、基于局部的最少连接算法(Locality-Based Least Connections) lblc

根据请求的目标IP找出该目标IP最近使用的服务器,若该服务器可用且没超载,就将请求发给它;若服务器不存在或者超载,且有服务器处于一半的工作负载,则用最少连接原则将请求发给一个可用服务器。是针对目标IP地址的负载均衡算法,可以看作动态的dh算法。可根据负载情况实现正向代理、web缓存等。

6、带复制的基于局部的最少连接算法(Locality-Based Least Connections with Replication) lblcr

该算法维护从一个目标IP地址到一组服务器的映射(lblc维护的是一个目标IP地址到一台服务器的映射)。根据请求的目标IP找出该目标IP对应的服务器组,按最少连接原则从组内选出一台没有超载的服务器,将请求发给它;若该服务器超载,则最少连接原则从该集群中选出一台服务器加入到服务器组中,将请求发给该服务器。如果服务器组在一段时间没有修改,将最忙的服务器从组内剔除,以降低复制程度。这个算法也是针对目标IP地址的负载均衡算法,解决lblc负载不均衡的问题,从负载重的RS复制到负载轻的RS。可根据负载情况实现正向代理、web缓存等。

7、FO算法(Weighted Fail Over) fo

该算法会遍历lvs关联的RS链表,找到未过载(未设置IP_VS_DEST_F_OVERLOAD标识)且权重最高的RS进行调度。

8、OVF算法(Overflow-connection) ovf

基于RS的活动连接数和权重值来实现。它会将新连接调度到权重值最高的RS,直到其活动连接数超过它的权重值,之后调度到下一个权重值最高的RS。该算法会遍历lvs关联的RS链表,找到权重值最高的可用RS。可用RS需要满足以下条件:

①未过载(未设置IP_VS_DEST_F_OVERLOAD标识)。

②RS当前活动连接数小于其权重值。

③权重值不为0。

以上就是lvs的12种调度算法。其中FO和OVF算法只有内核版本4.15版本后才有。查看linux内核版本一般使用以下命令:

1、cat /proc/version
2、uname -a

你可能感兴趣的:(负载均衡,linux,算法,lvs)