文档章节

负载均衡调度算法(LVS)

o
 osc_x4h57ch8
发布于 2018/04/24 11:49
字数 1102
阅读 8
收藏 0

上篇介绍LVS三种实现架构,LVS作为负载均衡软件,依靠调度器LB(Load Balancer)把客户端发来的请求按照一定规则分发给后端的真实服务器RS(Real Server),这个规则就是预先设定好的调度算法。

在LVS中支持的调度算法主要有以下八种。

 

1.轮询调度(Round-Robin,RR)

最简单的调度算法,LB按照顺序将请求依次转发给后端的RS,并没有考量后端RS的状态(处理速度以及响应时间)。大部分情况下,RS的性能状态都是各不一致的,这种算法显然无法满足合理利用资源的要求。

 

2.带权重的轮询调度(Weighted Round-Robin,WRR)

在轮询算法的基础上加上权重设置,权重越高的RS被分配到的请求越多。适用于按照服务器性能高低,配置不同的权重,以达到合理的资源利用。

 

3.最小连接调度(Least-Connection, LC)

把新的请求分配给连接数最少的RS。连接数少说明服务器空闲。

 

4.带权重的最小连接调度(Weight Least-Connection, WLC)

在最小连接算法的基础上加上权重设置,这样可以人为地控制请求分配。

 

5.基于局部性的最小连接调度(Locality-Based Least Connection, LBLC)

针对请求报文目标IP地址的负载均衡调度。目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。

算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,提升整个集群系统的处理能力。

LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最小连接”的原则选出一个可用的服务器,将请求发送到该服务器。

 

6.带复制的基于局部性最小连接调度(Locality-Based Least Connections with Replication, LBLCR)

也是针对请求报文目标IP地址的负载均衡调度,与LBLC算法不同之处:LBLC维护一个目标IP到一台服务器的映射,而LBLCR则需要维护一个目标IP到一组服务器的映射。

LBLCR调度算法先根据请求的目标IP地址找到对应的服务器组,按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载,则将请求发送到该服务器;若服务器超载,则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务组中,将请求发送给这台服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

 

7.目标地址散列调度(Destination Hashing, DH)

也是针对请求报文目标IP地址的负载均衡调度,但它是一种静态映射算法,通过一个散列(hash)函数将一个目标IP地址映射到一台服务器。DH算法先根据请求的目标IP地址,作为散列键(hash key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且为超载,将请求发送到该服务器,否则返回空。

 

8.源地址散列调度(Source Hashing, SH)

该算法正好与DH调度算法相反,它根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。算法流程与目标地址散列调度算法基本相似,只不过将请求的目标IP地址换成请求的源IP地址。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

如何在Ruby中生成随机字符串 - How to generate a random string in Ruby

问题: I'm currently generating an 8-character pseudo-random uppercase string for "A" .. "Z": 我目前正在为“ A” ..“ Z”生成一个8个字符的伪随机大写字符串: value = ""; 8.times{......

法国红酒甜
今天
20
0
Python中的mkdir -p功能[重复] - mkdir -p functionality in Python [duplicate]

问题: This question already has an answer here: 这个问题在这里已有答案: How can I safely create a nested directory? 如何安全地创建嵌套目录? 25 answers 25个答案 Is there a way...

技术盛宴
今天
21
0
原价500元的认证证书,限时免费考取!

本文作者:y****n 百度云智学院致力于为百度ABC战略(人工智能、大数据、云计算)提供人才生态体系建设,包括基于百度ABC、IoT的课程体系,整合百度优势技术能力的深度学习技术、Apollo无人车...

百度开发者中心
昨天
17
0
在virtualenv中使用Python 3 - Using Python 3 in virtualenv

问题: Using virtualenv , I run my projects with the default version of Python (2.7). 使用virtualenv ,我使用默认版本的Python(2.7)运行项目。 On one project, I need to use Pyth......

富含淀粉
今天
16
0
Python的__init__和self是做什么的? - What __init__ and self do on Python?

问题: I'm learning the Python programming language and I've came across something I don't fully understand. 我正在学习Python编程语言,遇到了一些我不太了解的东西。 In a method ......

javail
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部