您的位置:首页 > 其它

LVS负载均衡调度算法

2014-02-22 22:54 106 查看
在前面我们主要讲了LVS集群的三种架构(VS/NAT,VS/DR,VS/TUN),主要解决了系统的可伸缩性和透明性问题,是我们了解到了调度器是如何将请求高效地分发到不同的服务器上去执行,使得后端的多台Realserver组成的集群能成为一台虚拟服务器;在客户端应用程序与集群系统交互时,就像与一台高性能的服务器交互一样。通过熟悉了解我们知道选择一种好的架构对整个集群系统的性能来说是非常重要的,同样的选择一种合适的负载均衡调度算法对提高整个集群系统的性能也是极其重要的。那么调度器如何将客户端的请求均衡的调度到后端的各个Realserver上,使得每台Realserver能够尽可能的保持负载均能呢?这就需要我们来选择一种合适的负载均衡调度算法。下面就让我们一起来了解一下LVS的十种调度算法。

轮循调度(Round Robin Scheduling)

调度器通过“轮循”调度算法将外部请求按顺序轮流分配到真正的服务器上,它均等地对待每一台服务器,而不管服务器上的实际连接数和系统负载。

请求队列为:A,B,C,D,E,F调度结果为: A-->Realserver1B-->Realserver2C-->Realserver1D-->Realserver2E-->Realserver1F-->Realserver2

加权轮循调度(Weighted Round-RobinScheduling)

调度器通过“加权轮循”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理跟多的访问流量。

Realserver1权重为1,Realserver权重为2请求队列为:A,B,C,D,E,F调度结果为:A-->Realserver1B-->Realserver2C-->Realserver2D-->Realserver1E-->Realserver2F-->Realserver2

目标地址散列调度(Destination HashingScheduling)

“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表中找出对应的服务器,若该服务器可用且未超载,请请求发送到该服务器。

假如Client1第一次请求连接被Director调度到Realserver1上,那么Client1的后续的请求都将调度到Realserver1上处理,而不会被调度到Realserver2上处理。

源地址散列调度(Source HashingScheduling)

“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表中找出对应的服务器,若该服务器可用且未超载,请请求发送到该服务器。

假如Client1第一次请求连接通过FW1被Director调度到Realserver1上,那么Realserver1的响应请求也会通过FW1返回给Client1,而不会经过FW2返回给Client1。
在实际应用中,源地址散列调度(SH)和目标地址散列调度(DH)可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

最少连接调度(Least-ConnectionScheduling)

调度器通过“最少连接”调度算法动态地将请求调度到已建立的连接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最少连接”调度算法可以很好地均衡负载。

当客户端的请求到达Director时,Director首先判断Realserver1,Realserver2服务器的开销(活动连接数×256+非活动连接数),然后将请求调度到开销最小的Realserver上。

加权最少连接算法(WeightedLeast-Connection Scheduling)

在集群系统中的真实服务器性能差异较大的情况下,调度器采用“加权最少连接”调度算法优化负载性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整期权值。

当客户端的请求到达Director时,Director首先判断Realserver1,Realserver2服务器的开销(活动连接数×256+非活动连接数)/权重,然后将请求调度到开销最小的Realserver上。

最短期望延迟调度(Shortest ExpectedDelay Scheduling)

基于WLC调度优化,只计算活动连接数。

当客户端的请求到达Director时,Director首先判断Realserver1,Realserver2服务器的开销(活动连接数+1)/权重,这个算法只计算活动连接数,不计算非活动连接数,然后将请求调度到开销最小的Realserver上。

最少队列调度(Never Queue Scheduling)

无需队列,如果有一台Realserver的连接数=0就直接将请求分配过去,不需要在进行SED计算。

如果有一台Realserver的连接数等于0,当客户端的请求到达Director时,Director直接将请求调度到这台Realserver上,不再经SED算法。

基于局部性的最少连接调度(Locality-BasedLeast Connections Scheduling)

“基于局部性的最少连接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用过的服务器,若该服务器是可用的且没有超载,就将请求发送到该服务器;若服务器不存在,或者服务器超载且有服务器处于一半的工作负载,则用“最少连接”的原则选出一个可用的服务器,将请求发送到该服务器。这个算法是对DH算法的优化,并使用了WLC做进一步的优化。

基于局部性的最少连接调度(Locality-BasedLeast Connections with Replication Scheduling)

“带复制的基于局部性的最少连接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是他要维护从一个目标IP到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最少连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载,则按“最少连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。这个算法是对LBLC算法的进一步优化。

本文出自 “清风明月” 博客,请务必保留此出处http://coolsky.blog.51cto.com/177347/1362229
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: