LVS调度算法
- ipvs scheduler
调度算法分类
◇ ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
- 两种:静态方法和动态方法
静态调度算法:不考虑后端服务器当前的负载情况,仅根据算法本身进行调度
动态调度算法:考虑后端服务器当前的负载情况
静态调度算法
- 1、RR:roundrobin,轮询
- 2、WRR:Weighted RR,加权轮询
- 3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
SH调度算法:
源地址hash。
将client ip地址hash,当源地址相同时,始终往第一次调度的主机上调度,从而实现会话保持。第一次访问按照轮询进行调度。
- 4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
DH调度算法:
目标地址hash
一般的使用场景:比如调度至缓存服务器时,但是不同的缓存服务器缓存的是不同的资源,这种情况。
举例:小区宽带运营商,小区里的人访问各大视频网站(某讯、某艺、某酷等)
==>为加速访问独播的视频:使用的三个缓存服务器各自缓存上述三个视频网站独播的视频。
==>此时可以根据目标地址hash进行不调度,只要访问的是某酷的ip地址,直接调度至某酷的缓存服务器---
动态调度算法
- 动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
- 其中Overhead的值越小,说明服务器负载越小,可以优先被调度。
调度算法:
- 1、LC:least connections 适用于长连接应用
Overhead=activeconns*256+inactiveconns
Overhead=activeconns*256+inactiveconns
activeconns:正处于连接的、活跃状态的连接、有数据在传输才表示活动状态的连接
inactiveconns:连接但是并未进行数据连接
==>activeconns大概256个inactiveconns。
==>LC算法只考虑的负载情况,没有考虑后端服务器的性能、处理数据的能力。
- 2、WLC:Weighted LC,默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight
WLC:带权重的LC算法,此为系统默认lvs调度算法
DR是系统的默认lvs模型
- 3、SED:Shortest Expection Delay,初始连接高权重优先
Overhead=(activeconns+1)*256/weight
SED的最大问题是解决了系统在刚搭建起来时,第一请求是按照权重比例分配的,但是当权重差别比较大时:
连续好多次的请求均发往权重较大的服务器,而权重较低的还一个请求都未接收。
举例:假设权重设为hostA:hostB:hostC = 1:2:5
第一访问: 目前各服务器的负载:
hostA:256/1=256
hostB:256/2=128
hostC:256/5=51.2 ==>此次请求调度至hostC
又来一个访问:目前各服务器负载:
hostA:256/1=256
hostB:256/2=128
hostC:512/5:102.4 ==>此次请求调度至hostC
==>可见当权重差别较大时,前面的些许请求会持续被调度在权重较大的RS服务器
- 4、NQ:Never Queue,第一轮均匀分配,后续SED
解决上述当权重差别较大时,前面的请求一直调度至权重较大的服务器:
NQ:第一轮均匀分配即先保证每个服务都各自先处理一个请求(先热身),之后再执行SED调度。
-
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
-
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS