1  概述


LVS中ipvs scheduler总共有10中调度算法:RR,WRR,LC,WLC,LBLC,LBLCR,DH,SH,SED,NQ,

VS根据其调度时是否考虑各RS当前的负载状态,分成两大类:静态方法和动态方法,其中,算法越复杂,会影响服务器的效率(性能)


2  静态方法

静态方法仅根据算法本身进行调度,关心的是起点公平。相对LVS而言的,而不关心RS是否可以处理请求,如RS的负载状态。

有如下4类算法

RRroundrobin

轮询,后端RS均摊所有的请求

WRRWeighted RR

加权轮询,根据权值来分配请求的数量

SHSource Hashing

源地址hash,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

但是,这种方式问题比较多,如源地址是nat后的公网地址,如果该地址对应的后端机器很多,这样同一ip的访问可能会对同一服务器造成负担。

DHDestination Hashing

目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商


3  动态方法


动态主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

动态调度关心的是最终的结果,要考虑到后端服务器RS的负载情况

有如下6类算法

LCleast connections

适用于长连接应用

Overhead=activeconns*256+inactiveconns

活动连接表示正在传送数据

非活动连接表示建立连接了,但是没有传送数据

WLCWeighted LC

WLC是默认调度方法

Overhead=(activeconns*256+inactiveconns)/weight

这里如果是第一次连接,活动和非活动连接的值都是0.,这样同LCWL的算法计算结果都是0,需要通过SED来解决这个问题。因为初始+1,就会有数值的对比

SEDShortest Expection Delay

初始连接高权重优先,Overhead=(activeconns+1)*256/weight

NQNever Queue

第一轮均匀分配,后续SED,解决了第一次分配不均匀的问题。使得所有的服务器都会执行一定的任务

LBLCLocality-Based LC

动态的DH算法,使用场景:根据负载状态实现正向代理

LBLCRLBLC with Replication

带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS