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当前的负载状态
  • 粗略分为两类:静态调度算法和动态调度算法
    LVS12种调度算法

静态算法 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

新增的两种基于真实服务器的调度算法

可用的真实服务器

  • 需要同时满足以下条件:
  1. 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
  2. 真实服务器当前的活动连接数量小于其权重值
  3. 权重值不为零

FO Weighted Fail Over 加权故障转移算法

  • 静态算法,
  • 增加了标记位,被标记的不被分配任务
  • 遍历虚拟服务所关联的真实服务器链表,找到权重最高的真实服务器,进行调度。

OVF Overflow-connection 溢出连接算法

  • 动态算法,
  • 先可着权重高的真实服务器调度,直到负载超过权重了,调度次高的,
  • 同时增加标记位,如果有标记位了就不往其上调度了
  • 遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器,进行调度。
  • 基于真实服务器的活动连接数量和权重值实现。
  • 将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,
  • 之后调度到下一个权重值最高的真实服务器。

以上是关于Linux负载均衡集群LVS十二种调度算法的主要内容,如果未能解决你的问题,请参考以下文章

LVS集群之十种调度算法及负载均衡-理论

LVS集群十种调度算法及负载均衡理论

负载均衡集群相关LVS介绍LVS调度算法LVS NAT模式搭建

Linux集群之高可用负载均衡lvs+keepalived

LVS的三种负载均衡技术,八大负载调度算法

负载均衡(集群介绍,lvs介绍,LVS调度算法,NAT模式搭建)