一、概述
LVS根据后端服务器的负载,或其他的计算的标准,判断挑选哪台RS来进行请求处理
调度算法主要分为静态调度算法、动态调度算法
静态调度算法: RR、WRR、SH、DH
动态调度算法: LC、WLC、SED、NQ、LBLC、LBLCR
二、LVS静态调度算法
静态:仅根据算法本身进行调度,不考虑后端实际负载情况(起点公平)
1、RR
RR:round robin轮询调度算法,将每一次用户的请求,轮流分配各Real Server节点
ipvsadm -E -他172.16.1.3:80 -s rr
2、WRR
WRR:weighted round robin加权轮询调度算法,根据服务器的硬件情况、以及处理能力为每台服务器分配不同的权值,使其能够接受相应权值的请求
ipvsadm -E -t 172.16.1.3:80 -s wrr
ipvsadm -e -t 172.16.1.3:80 -r 172.16.1.7:80 -g -w 5
ipvsadm -e -t 172.16.1.3:80 -r 172.16.1.8:80 -g -w 1
ipvsadm -L -n
3、SH
SH:Source Hashing源地址hash调度算法,将请求的源IP地址进行hash运算,得到一个具体的数值 ,同时对后端服务器进行编号,按照运算结果将请求分发到对应编号的服务器上
1、可以实现不同来源IP的请求进行负载分发
2、同时还能实现相同来源IP的请求始终被派发至某一台特定的节点
4、DH
DH:destination hash目标地址hash将客户端的请求,始终发往同一个RS
应用场景:LVS-cache-源站,始终调度到指定的cache,加速用户体验
三、LVS动态调度算法
动态:根据算法及RS节点负载状态进行调度,较小的RS将被调度(保证结果公平)
1、LC
LC:least-Connection最小连接数调度算法,哪台RS连接数少就将请求调度至哪台RS
算法:Overhead=(Active * 256 + Inactive仅连接)一个活动连接相当于256个非活动连接
2、WLC
WLC:Weighted Least-Connection加权最小连接数(默认调度算法),在服务器性能差异较大的情况下,采用"加权最少链接"调度算法优化负载均衡性能,权值较高的RS节点,将承受更多的连接;负载均衡可以自动询问RS节点服务器的负载状态,通过算法计算当前连接数最少得节点,而后将新的请求调度至该节点
算法:Overhead=(Active*256+Inactive)/weight
3、SED
SED: Shortest Expected Delay最短期望延迟,尽可能让权重高的优先接受请求,不再考虑非活动 状态,把当前处于活动状态的数目+1,通过算法计算当前连接数最少的节点,而后将新的请求调度至该节点 。
算法: 在WLC基础上改进,Overhead=(Active+1)*256/weight
4、NQ
NQ:Never Queue永不排队/最小队列调度
原理:SED算法由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,而NQ算法是说不管权重多大都会被分配到请求,简单来说,就是无需队列,如果有和Real Server的连接数为0会直接分配过去,后续采用SED算法
算法:Overhead=(Active+1)*256/weight
5、LBLC
LBLC: Locality-Based Least-Connection动态目标地址hash调度算法,解决DH调度算法负载不均衡。应用场景:LVS-cache-源站,此前DH算法始终调度到后端Cache1节点,会造成Cache1负载过高,LBLC会根据负载均衡动态调度到后端其他的cache节点
6、LBLCR
LBLCR: Locality-Based Least-Connection with Replication带复制功能的LBLC算法,解决LBLC负载 不均衡的问题,从负载重的复制到负载轻的RS
应用场景:LVS-cache-源站,此前LBLC算法始终调度到后端的cache1节点,会造成cache1负载过高。会根据负载均衡动态调度到后端其他cache节点,同时也会将缓存数据同步一份至cache1、cache2节点