Linux负载均衡集群LVS十二种调度算法
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux负载均衡集群LVS十二种调度算法相关的知识,希望对你有一定的参考价值。
LVS
- Linux Virtual Server
- 1995 中国 章文嵩
- Linux内核默认组件
- 接受用户请求并转发给后端服务器由后端服务器响应请求
LVS四种工作模式
- DR 直接路由模式 替换目标地址MAC为RSMAC并转发,应答包不经过调度器
- TUN 隧道模式 利用隧道模式,在VIP外添加RIP并转发,应答包不经过调度器
- NAT 地址转换模式,将VIP替换为RIP并转发,应答包返回调度器
- FULLNAT 全部地址转换模式,把源地址替换为VIP,目标地址替换为RIP并转发,应答包返回调度器,并再次改回去发还给请求端
关于四种工作模式的详细介绍:
https://blog.csdn.net/timonium/article/details/117594756
LVS十二种调度算法
- ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
- 粗略分为两类:静态调度算法和动态调度算法
静态算法 4种
1. RR RoundRobin 轮询算法
- 雨露均沾 无差别按次序分配调度任务的算法
2. WRR Weighted RR 加权轮询算法
- 不同服务器设置不同权重,自定义权重,比较常用
- 权重高的就多轮几次,权重低的就少轮几次
3. SH Source Hashing 源地址哈希算法
- 实现源地址会话绑定,
- 因广域网都是NAT,所以会导部分服务器致压力过大
- 将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4. DH Destination Hashing 目标地址哈希算法
- 实现缓存功能,
- 第一次RR轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,
- 典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存
动态算法 6种
- 根据后端服务器负载情况进行调度
- Overhead-value 上头值
- 通过不同算法计算出上头值,对上头值进行比较得出谁的负载更小
- 负载小的被优先调度
1. LC least connections 最少连接算法
- 适用于长连接应用,默认调度算法
- 活动链接x256/非活动链接=上头值
- 谁活少先把任务分配给谁
Overhead=activeconns*256+inactiveconns
2. WLC Weighted LC,加权最少连接算法
- 默认调度方法,较常用
- 在考虑负载的同时添加了服务器权重信息
- (活动链接x256/非活动链接)/权重=上头值
- 位高权重而且活少的先被分配任务,
Overhead=(activeconns*256+inactiveconns)/weight
3. SED Shortest Expection Delay 最短期望延迟算法
- 只检查活动连接而不考虑非活动连接
- 一上来就连接高权重的RS
- (活动链接+1)/权重=上头值
- 权重一样,谁活少新任务派给谁
- 活一样多,谁权重高新任务派给谁
Overhead=(activeconns+1)*256/weight
- 低权重RS有可能过度空闲甚至长时间无分配
4. NQ Never Queue 永不排队算法
- 第一轮均匀分配,之后再SED
- 只要有RS的连接数为0,不进行sed运算就直接把任务调度分配过去。
- 避免SED低权重无分配的问题,RS至少分一个,避免空任务情况
5. LBLC Locality-Based LC 动态DH算法
- 基于目的地址的最小连接数调度算法,实质上是DH算法的动态实现
- 根据目标地址可劲的把请求调度到RR轮询到的还没过载的RS上
- 如果被可劲造的RS过载了,用WLC算计出一台新的过来再可劲造
- 根据负载状态实现正向代理
- 例如:实现WebCache缓存服务器集群等
6. LBLCR LBLC with Replication 带复制功能LBLC算法
- 维护从一个目标 IP地址到一组服务器的映射
- 从负载重的RS复制调度到负载轻的上面,适当的解决LBLC负载不均衡的问题
用的最多的
RR,WRR,SH,LC,WLC
新增的两种基于真实服务器的调度算法
可用的真实服务器
- 需要同时满足以下条件:
- 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
- 真实服务器当前的活动连接数量小于其权重值
- 权重值不为零
FO Weighted Fail Over 加权故障转移算法
- 静态算法,
- 增加了标记位,被标记的不被分配任务
- 遍历虚拟服务所关联的真实服务器链表,找到权重最高的真实服务器,进行调度。
OVF Overflow-connection 溢出连接算法
- 动态算法,
- 先可着权重高的真实服务器调度,直到负载超过权重了,调度次高的,
- 同时增加标记位,如果有标记位了就不往其上调度了
- 遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器,进行调度。
- 基于真实服务器的活动连接数量和权重值实现。
- 将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,
- 之后调度到下一个权重值最高的真实服务器。
以上是关于Linux负载均衡集群LVS十二种调度算法的主要内容,如果未能解决你的问题,请参考以下文章