面试:LVS的(10+2)种调度算法

生活很苦,但优雅从不过时

LVS 调度算法

  • 循环调度
  • 加权循环调度
  • 来源哈希兴调度
  • 目的地哈希定调度
  • 最少连接调度
  • 加权最小连接调度
  • 最短的预期延迟计划
  • 从不队列调度
  • 基于本地的最小连接调度
  • 基于本地的与复制调度的最小连接

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

分为两种:静态方法和动态方法

3.2.1 静态方法

仅根据算法本身进行调度

1、RR:roundrobin,轮询,较常用

循环调度算法将每个传入请求发送到列表中的下一个服务器。因此,在三个服务器集群(服务器 A、B 和 C)请求 1 将转到服务器 A 时,请求
2 将转到服务器 B,请求 3 将转到服务器 C,请求 4 将转到服务器
A,从而完成服务器的循环或"循环"。无论每个服务器遇到的传入连接数或响应时间如何,它都将所有真实服务器视为等于服务器。虚拟服务器比传统的循环
DNS 具有一些优势。循环 DNS 将单个域解析到不同的 IP 地址,基于主机的调度粒度,DNS
查询的缓存阻碍了基本算法,这些因素导致真实服务器之间出现显著的动态负载不平衡。虚拟服务器的调度细粒度基于网络连接,并且由于调度细度细腻,它比循环
DNS 强得多。

2、WRR:Weighted RR,加权轮询,较常用

加权循环调度旨在更好地处理具有不同处理能力的服务器。每个服务器都可以分配一个权重,一个表示处理能力的整数值。重量较高的服务器首先比重量较小的服务器接收新的连接,重量较高的服务器比重量较小的服务器获得更多的连接,重量相等的服务器获得等重连接。例如,真正的服务器,A,B和C,有重量,4,3,2分别,一个很好的调度顺序将是AABABCABC在调度期(模组总和(Wi))。在实施加权循环调度时,在修改虚拟服务器规则后,将根据服务器权重生成调度序列。网络连接以循环方式基于调度顺序指向不同的真实服务器。

当实际服务器的处理能力不同时,加权循环调度优于循环调度。但是,如果请求的负载差异很大,则可能导致真实服务器之间的动态负载不平衡。简言之,大多数需要大响应的请求都可能指向同一个真实服务器。

实际上,循环调度是加权循环调度的一个特殊实例,其中所有权重均等。

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

源哈希调度算法通过查找源 IP 地址的静态分配的哈希表,将网络连接分配给服务器。

4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

目的地哈希调度算法通过查找目的地 IP 地址的静态分配的哈希表,将网络连接分配给服务器。

3.2.2 动态方法

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用 (最少连接算法)

Overhead=activeconns*256+inactiveconns

连接最少的调度算法将网络连接导到已建立连接数量最少的服务器。这是动态调度算法之一:因为它需要动态计算每个服务器的实时连接。对于管理具有类似性能的服务器集合的虚拟服务器,当请求负载变化很大时,最少连接调度有利于平滑分布。虚拟服务器将将请求直接指向主动连接最少的真实服务器。

乍一看,即使有具有各种处理能力的服务器,最少连接调度似乎也能很好地执行,因为更快的服务器将获得更多的网络连接。事实上,由于 TCP 的TIME_WAIT状态,它不能很好地执行。TCP 的TIME_WAIT通常是 2 分钟,在这 2 分钟内,繁忙的网站通常会接收数千个连接,例如,服务器 A 的功能是服务器 B 的两倍,服务器 A 正在处理数千个请求并将其保持在 TCP 的TIME_WAIT状态,但服务器 B 正在爬行以完成其数千个连接。因此,连接最少的调度无法在具有各种处理能力的服务器之间实现负载平衡。

2、WLC:Weighted LC,默认调度方法,较常用 带权重的最少连接

Overhead=(activeconns*256+inactiveconns)/weight

加权最少连接调度是最少连接调度的叠加,您可以在其中为每个真实服务器分配性能权重。重量值较高的服务器将在任何时间接收更大比例的实时连接。虚拟服务器管理员可以为每个真实服务器分配权重,并且将网络连接安排到每个服务器,其中每个服务器当前实时连接数的百分比与其权重成正比。

3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

Overhead=(activeconns+1)*256/weight

最短的预期延迟调度算法将网络连接分配给预期延迟最短的服务器。如果将 Ci 发送到 ith 服务器,则该作业将经历的预期延迟是 (Ci + 1) / Ui,其中 Ci 是 ith 服务器上的连接次数,Ui 是 ith 服务器的固定服务速率(重量)。

4、NQ:Never Queue,第一轮均匀分配,后续SED

从不队列调度算法采用双速模型。当有可用的空闲服务器时,作业将发送到闲置服务器,而不是等待快速服务器。当没有可用的空闲服务器时,作业将发送到服务器,以最大限度地减少其预期延迟(最短的预期延迟调度算法)。

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等

基于本地的最小连接调度算法用于目标 IP 负载平衡。它通常用于缓存集群。如果服务器处于活性和负载下,此算法通常将用于 IP 地址的包导到其服务器。如果服务器超载(其活动连接数大于其重量),并且其半负载中有一个服务器,则将加权最小连接服务器分配到此 IP 地址。

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等

基于本地的与复制调度算法的最小连接也用于目的地 IP 负载平衡。它通常用于缓存集群。它与 LBLC 调度不同,具体如下:负载平衡器维护从目标到一组可用于目标的服务器节点的映射。目标请求被分配到目标服务器集中连接最少的节点。如果服务器集中的所有节点都已加载,则它会拾取集群中连接最少的节点,并将其添加到目标的服务器设置中。如果服务器集在指定时间内未进行修改,则从服务器集中删除加载最多的节点,以避免高度复制。

内核版本 4.15 版本后新增调度算法:FO和OVF

FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法

OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。属于动态算法

本文部分摘要来自于LVS官网

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值