1 概述
LVS中ipvs scheduler总共有10中调度算法:RR,WRR,LC,WLC,LBLC,LBLCR,DH,SH,SED,NQ,
VS根据其调度时是否考虑各RS当前的负载状态,分成两大类:静态方法和动态方法,其中,算法越复杂,会影响服务器的效率(性能)
2 静态方法
静态方法仅根据算法本身进行调度,关心的是起点公平。相对LVS而言的,而不关心RS是否可以处理请求,如RS的负载状态。
有如下4类算法
RR:roundrobin:
轮询,后端RS均摊所有的请求
WRR:Weighted RR:
加权轮询,根据权值来分配请求的数量
SH:Source Hashing:
源地址hash,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
但是,这种方式问题比较多,如源地址是nat后的公网地址,如果该地址对应的后端机器很多,这样同一ip的访问可能会对同一服务器造成负担。
DH:Destination Hashing:
目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
3 动态方法
动态主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
动态调度关心的是最终的结果,要考虑到后端服务器RS的负载情况
有如下6类算法
LC:least connections
适用于长连接应用
Overhead=activeconns*256+inactiveconns
活动连接表示正在传送数据
非活动连接表示建立连接了,但是没有传送数据
WLC:Weighted LC:
WLC是默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight
这里如果是第一次连接,活动和非活动连接的值都是0.,这样同LC和WL的算法计算结果都是0,需要通过SED来解决这个问题。因为初始+1,就会有数值的对比
SED:Shortest Expection Delay:
初始连接高权重优先,Overhead=(activeconns+1)*256/weight
NQ:Never Queue:
第一轮均匀分配,后续SED,解决了第一次分配不均匀的问题。使得所有的服务器都会执行一定的任务
LBLC:Locality-Based LC:
动态的DH算法,使用场景:根据负载状态实现正向代理
LBLCR:LBLC with Replication:
带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS