Lvs 调度算法

lvs scheduler:仅根据IP和端口进行调度

静态方法:仅根据算法自己进行调度,不考虑当前服务器实际负载状况;保证起点公平web

RR:round robin, 轮调,轮询,轮叫:算法

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

WRR:weighted rr, 加权轮询;缓存

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

SH:source ip hash, 源地址哈希;未来自于同一个IP的请求始终调度至同一个RS。网络

    (由于IP-VS在本地会维护一个哈希表,这张表把每个请求的源地址K被调度到哪个real server V,都会记录下来。表中的每一个K-V有可能还会有一个计时器,SH       实现session保持的机制,会损害负载均衡的效果,由于它会未来自同一个地址的请求将始终被调度至同一个real server)session

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

DH:desination ip hash, 目标地址哈希;对同一个目标的请求始终发往同一个RS性能

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

    正向web代理,负载均衡内网用户对互联网的请求;

Client --> Director --> Web Cache Server(正向代理)

 

动态方法:根据算法及各RS当前的负载状态进行评估;保证结果公平

挑选后端real server是有挑选方式是有计算机制的,首先要把各real server的当前负载状况记录下来,

计算当前主机的负载方式:  Overhead=       

RS权重为0时,表示RS不可用  

把全部权重加起来,权重之和是总体权重基数,每一个服务器的权重比上这个权重之和,获得的比例大概就是调度这个服务器与整个集群所接受的全部全部请求的比例。

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

Overhead=Active*256+Inactive      活动链接数*256+非活动连接数

Active:每个服务器当前主机活动连接的数量;

Inactive:非活动链接数量

256:相比较于非活动(Inactive)连接的数量,活动连接将会占据更多的资源,因此权重比较大

RS1: 10, 100

RS2: 20, 10

WLC: weighted LC   加权最少链接(默认采用的就是这种)(Weighted Least Connections)

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

Overhead=(Active*256+Inactive)/weight

RS1: 10, 100, 1

RS2: 20, 10, 3

缺陷是:当前10个主机,都没有响应报文,假如能力最小的排最前面,来了一个请求,那么只能第一个主机响应,因此响应的最慢,然后面响应快的主机却在空闲。

SED:Shortest Expection Delay  最短延迟调度/最短时间望延迟

在WLC基础上改进,Overhead=(ACTIVE+1)*256/weight,再也不考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动链接过多缺陷:当权限过大的时候,会致使空闲服务器一直处于无链接状态。

Overhead=(Active+1)*256/weight

刚开始每台主机的活动连接数都为0,利用SED调度算法后,这里先不乘以256,由于不考虑非活动连接,就没有必要考虑非活动链接数

第一台主机的Overhead=(0+1)/1=1

第二台主机的Overhead=(0+1)/2=1/2

第三台主机的Overhead=(0+1)/3=1/3

第四台主机的Overhead=(0+1)/4=1/4

第五台主机的Overhead=(0+1)/5=1/5

按照上述计算后,第五台连接数最少,权重最大,因此直接挑选第五台响应请求,这就最大限度利用了资源

缺点:总共两台服务器,第一台权重为1,第二台权重为4,那么前三个请求会所有分给第二台

RS1: 0, 1

RS2: 0, 9

NQ: Nerver Queue永不排队

SED算法的改进;(首先挑选一个主机分配一个请求,而后挑选下一个主机分配请求,直到把全部主机轮询一遍以后,再根据SED算法进行分配)  

无需队列。若是有台realserver的链接数=0就直接分配过去,不须要再进行sed运算,保证不会有一个主机很空闲。在SED基础上不管+几,第二次必定给下一个,保证不会有一个主机很空闲,不考虑非活动链接,才用NQ,SED要考虑活动状态链接,对于DNS的UDP不须要考虑非活动链接,而httpd的处于保持状态的服务就须要考虑非活动链接给服务器的压力。

LBLC:Locality-Based LC 基于局部/本地的最少连接(locality-Based Least Connections)

即为动态的DH算法;用到场景:只有在实现正向代理,代理本地大量客户端访问互联网时,用到缓存时才有用

正向代理情形下的cache server调度

Client --> Director --> Web Cache Server(正向代理)

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

 

LBLCR:LBLC with Replication,带复制功能的LBLC;带复制的基于局部性最少链接(Locality-Based Least-Connections with Replication)

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

相关文章
相关标签/搜索