LVS的调度算法-个人理解

1、LVS的调度算法

我们对LVS的调度算法分为两类:静态算法和动态算法。


1.1、静态算法

仅根据算法本身进行调度,而不考虑后端真实服务器的实际连接情况和负载情况。


1.1.1 轮询(RR)--Round Robin

负载调度器将用户请求按顺序轮流分配到后端的真实服务器上。

它均等的对待每一台真实服务器,而不管服务器实际的连接数和系统负载。权重值相同,权重值若为0则表示真实服务器不可用。


1.1.2 加权轮询(WRR)--Weighted Round Robin

负载调度器会根据权重值来判断后端真实服务器的性能,优先将请求分配到后端性能较好的真实服务器上。

假如主机A的权重值为2、主机B的权重值为1,则主机A的性能是B的两倍,调度顺序会变为AAB,权重值若为0则表示真实服务器不可用。


1.1.3 源地址散列(SH)--Source Hash

这种调度算法一般用于需要会话保持的WEB集群中。

当用户请求时,负载调度器会将同一个来源IP的请求转发给同一台真实服务器处理。

当用户第一次请求时,负载调度器会根据轮询算法按顺序将请求转发到后端的真实服务器上,并会将用户请求的源IP+转发到后端的真实服务器对应关系以散列键=值的方式存放到一张散列表(哈希表)中,当用户再一次请求时,负载调度器会根据请求的源IP,匹配散列表中对应关系,将请求分发到后端的同一台真实服务器上。若后端的真实服务器超载或不可用,则会返回空。


1.1.4 目标地址散列(DH)--Destination Hash

当用户请求时,负载调度器始终会将请求发往以真实服务器为目标IP的真实服务器上。

若后端的真实服务器超载或不可用,则会返回空。

这种调度算法一般用于后端真实服务器为缓存服务器的场景下,我们希望将所有请求可以一直都匹配到缓存,通过缓存服务器直接返回响应给用户,这种调度算法就基本失去了负载均衡的意义,基本上不会用。


1.2、动态算法

根据算法及真实服务器当前的负载状态进行调度。


1.2.1 最少连接(LC)--Least Connection

负载调度器会将用户请求分配到后端连接数最少的真实服务器上;

当所有的真实服务器连接数都为0时则会按照轮询按顺序将请求转发至后端;

负载调度器会记录每个真实服务器已建立的连接数,当一个请求被调度到后端某台真实服务器上时,则活动连接数(Active)+1,当连接中止或超时,活动连接数-1,即非活动连接(InActive)+1,当非活动连接超过空闲等待时间,则-1。权重值若为0则表示真实服务器不可用。


1.2.2 加权的最少连接(WLC)--Weighted Least Connection

负载调度器会将用户请求分配到后端连接数最少、性能最优的真实服务器上;

当所有的真实服务器连接数都为0时则会按照轮询按顺序将请求转发至后端,不管权重值大小。

负载调度器会记录每个真实服务器已建立的连接数,同时也可以通过权重值来判断真实服务器的性能。


1.2.3 最少期望延迟(SED)--Shortest Expected Delay Scheduling

负载调度器会将用户请求分配到后端连接数最少、性能最优的真实服务器上;

当所有的真实服务器连接数都为0时则会根据权重值来判断真实服务器的性能,并将请求转发至后端。

SED算法弥补了WLC算法的不足。


1.2.4 永不排队(NQ)--Never Queue

在主机A权重值为1,主机B权重值为5的环境下,如果根据SED算法分配请求的话,则可能前4次请求都会交给主机A处理,而主机B为空闲状态,这并不是我们期望所看到的,所以NQ算法又是SED算法的改进;

当所有的真实服务器连接数都为0时则会根据权重值来判断真实服务器的性能,并将请求转发至后端;

当有新的用户请求,有一台真实服务器活动连接数为0时,则会立即转发、无需排队等待;

当所有的真实服务器都在处理连接时,则负载调度器会将用户请求分配到后端连接数最少、性能最优的真实服务器上。


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

这种算法是DH算法的改进算法,一般也应用于后端真实服务器是缓存服务器的场景下,弥补了DH算法的不足,其实基本上也不常用,可以实现后端缓存服务器的高可用。

当用户请求时,负载调度器始终会将请求发往以真实服务器为目标IP的真实服务器上。

若后端的真实服务器超载或不可用,则会将请求转发到后端最少连接的可用的真实服务器上。


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

LBLCR算法是LBLC算法的升级版。LBLC维护一台为目标的真实服务器,而LBLCR则维护一组为目标的真实服务器,实现目标的负载均衡,目前主要用于缓存集群。

当用户请求时,负载调度器从一组真实服务器中找出一台连接数最少的服务器处理请求。

若服务器超载时,则负载调度器会按照最少连接数原则从真实服务器中选出一台服务器,将其加入到组中并处理请求,当组一段时间没有发生变动,则会将最忙的真实服务器从组中删除。


猜你喜欢

转载自blog.51cto.com/10978134/2122127