负载调度
简介
在Lvs进行负载均衡选择后端RS(真实服务器)的时候,可以根据策略进行动态选择。当前有十种负载均衡算法。
固定调度算法
按照某种既定的算法,不考虑实时的连接数予以分配。
轮询调度(Round Robin) 轮询调度会按顺序挨个将请求分配到后端集群中,而不管RS的负载和性能情况。如果有A,B,C三台RS,那会按顺序转发到A,B,C上面,第四个请求就又发到A上面了。
加权轮询(Weighted Round Robin) “加权轮询”调度算法是根据RS的不同处理能力来调度访问请求。可以对每台RS设置不同的调度权值。对于性能相对较好的RS可以设置较高的权值,而对于处理能力较弱的RS可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询RS的负载情况,并动态地调整其权值。
目标地址散列(Destination Hashing) 来自于同一个IP地址的请求都被重定向到同一台Real Server上(保证目标地址不变)。
先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。
源地址散列(Source Hashing) Director必须确保响应的数据包必须通过请求数据包所经过的路由器或者防火墙(保证原地址不变)。
先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。
使用SH算法,SH算法在内核中会自动维护一个哈希表,此哈希表中用每一个请求的源IP地址经过哈希计算得出的值作为键,把请求所到达的RS的地址作为值。在后面的请求中,每一个请求会先经过此哈希表,如果请求在此哈希表中有键值,那么直接定向至特定Real Server,如没有,则会新生成一个键值,以便后续请求的定向。但是此种方法在时间的记录上比较模糊(依据TCP的连接时长计算),而且其是算法本身,所以无法与算法分离,并不是特别理想的方法。
动态调度算法
通过检查服务器上当前连接的活动状态来重新决定下一步调度方式该如何实现。
最少链接(Least Connections) “最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
算法:连接数=活动连接数*256 非活动连接数
加权最少链接(Weighted Least Connections) 在最少连接的基础上给每台Real Server分配一个权重。
“加权最少链接”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
算法:连接数=(活动连接数*256 非活动连接数)÷权重
基于局部性的最少链接(Locality-Based Least Connections) 针对请求报文的目标IP地址的负载均衡调度,简称LBLC。目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。
这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。
先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) 也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。
按’最小连接’原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度
最短的期望的延迟(Shortest Expected Delay) 不再考虑非活动连接数
基于加权最少链接算法,举个例子,ABC三台服务器的权重分别为1、2、3 ,那么如果使用加权最少链接的话一个新请求进入时它可能会分给ABC中的任意一个。
算法:连接数=(活动连接数 1) *256 ÷权重
最少队列调度(Never Queue) 对SED的改进,当新请求过来的时候不仅要取决于SED算法所得到的值,还要取决于Real Server上是否有活动连接。
特点
优点:
- 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
- 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案。
- 无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会受到大流量的影响。
- 工作在四层,可以对所有应用进行负载均衡,包括Web、数据库等
缺点:
- 软件本身不支持正则表达式处理,不能做动静分离
- 如果是网站应用比较庞大,配置和测试就会很复杂,需要很长时间。
- 对网络依赖比较大,需要稳定的网络环境