LVS负载均衡算法

1 、内核中的连接调度算法
IPVS 在内核中的负载均衡调度是以连接为粒度的。在 HTTP 协议(非持久)中,每个对象从 WEB服务器上获取都需要建立一个 TCP 连接,同一用户的不同请求会被调度到不同的服务器上,所以这种细粒度的调度在一定程度上可以避免单个用户访问的突发性引起服务器间的负载不平衡。

在内核中的连接调度算法上, IPVS 已实现了以下十种调度算法:
轮叫调度( Round-Robin Scheduling )
加权轮叫调度( Weighted Round-Robin Scheduling )
最小连接调度( Least-Connection Scheduling )
加权最小连接调度( Weighted Least-Connection Scheduling )
基于局部性的最少链接( Locality-Based Least Connections Scheduling )
带复制的基于局部性最少链接( Locality-Based Least Connections with Replication Scheduling )
目标地址散列调度( Destinat ion Hashing Scheduling )
源地址散列调度( Source Hashing Scheduling )
最短预期延时调度( Shortest Expected Delay Scheduling )
不排队调度( Never Queue Scheduling )

下面,我们先介绍这八种连接调度算法的工作原理和算法流程,会在以后的文章中描述怎么用它们。

1.1 、轮叫调度( Round-Robin Scheduling )
        轮叫调度( Round Robin Scheduling )算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行 i = (i + 1) mod n ,并选出第 i 台服务器。算法的优点是其 简洁性,它无需记录当前所有连接的状态,所以它是一种 无状态调度。在系统实现时,我们引入了一个额外条件,当服务器的权值为零时,表示该服务器不可用而不被调度。这样做的目的是将服务器切出服务(如屏蔽服务器故障和系统维护),同时与其他加权算法保持一致。

        轮叫调度算法 假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。虽然 Round-Robin DNS 方法也是以轮叫调度的方式将一个域名解析到多个 IP 地址,但轮叫 DNS方法的调度粒度是基于每个域名服务器的,域名服务器对域名解析的缓存会妨碍轮叫解析域名生效,这会导致服务器间负载的严重不平衡。这里, IPVS 轮叫调度算法的粒度是基于每个连接的,同一用户的不同连接都会被调度到不同的服务器上,所以这种细粒度的轮叫调度要比DNS的轮叫调度优越很多。

1.2 、加权轮叫调度( Weighted  Round-Robin  Scheduling)
        轮叫调度( Round Robin Scheduling )算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行 i = (i + 1) mod n ,并选出第 i 台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。在系统实现时,我们引入了一个额外条件,当服务器的权值为零时,表示该服务器不可用而不被调度。这样做的目的是将服务器切出服务(如屏蔽服务器故障和系统维护),同时与其他加权算法保持一致。


1.3 、最小连接调度(Least-Connection Scheduling )
        最小连接调度( Least-Connection Scheduling )算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器 ,其连接数加 1 ;当连接中止或超时,其连接数减一。
在系统实现时,我们也引入当服务器的权值为零时,表示该服务器不可用而不被调度。

        当各个服务器有相同的处理性能时,最小连接调度算法能把负载变化大的请求分布平滑到各个服务器上,所有处理时间比较长的请求不可能被发送到同一台服务器上。但是,当各个服务器的处理能力不同时,该算法并不理想,为 TCP 连接处理请求后会进入 TIME_WAIT 状态, TCP的 TIME_WAIT 一般为 2 分钟,此时连接还占用服务器的资源所以会出现这样情形,性能高的服务器已处理所收到的连接,连接处于 TIME_WAIT 状态,而性能低的服务器已经忙于处理所收到的连接,还不断地收到新的连接请求。

1.4 、加权最小连接调度( Weighted Least-Connection Scheduling)
        加权最小连接调度( Weighted Least-Connection Scheduling )算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为 1 ,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例 。

1.5 、基于局部性的最少链接(Locality-Based Least Connections Scheduling )
        基于局部性的最少链接调度( Locality-Based Least Connections Scheduling ,以下简称为 LBLC )算法是针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache集群中客户请求报文的目标 IP 地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标 IP 地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存 Cache 命中率,从而整个集群系统的处理能力。LBLC 调度算法先根据请求的目标 IP 地址找出该目标 IP 地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用 “ 最少链接 ” 的原则选出一个可用的服务器,将请求发送到该服务器 。

        此外,对关联变量 ServerNode[dest_ip] 要进行周期性的垃圾回收( Garbage Collection ),将过期的目标 IP 地址到服务器关联项进行回收。过期的关联项是指哪些当前时间(实现时采用系统时钟节拍数)减去最近使用时间超过设定过期时间的关联项,系统缺省的设定过期时间为 24 小时。

1.6、带复制的基于局部性最少链接( Locality-Based Least Connections with Replication Scheduling)
        带复制的基于局部 性最少链接调度( Locality-Based Least Connections with Replication
Scheduling ,以下简称为 LBLCR )算法也是针对目标 IP 地址的负载均衡,目前主要用于 Cache 集群系统。它与 LBLC 算法的不同之处是它要 维护从一个目标 IP 地址到一组服务器的映射,而 LBLC算法维护从一个目标 IP 地址到一台服务器的映射。对于一个 “ 热门 ” 站点的服务请求,一台 Cache服务器可能会忙不过来处理这些请求。这时, LBLC 调度算法会从所有的 Cache 服务器中按 “ 最小连接 ” 原则选出一台 Cache 服务器,映射该 “ 热门 ” 站点到这台 Cache 服务器,很快这台 Cache 服务器也会超载,就会重复上述过程选出新的 Cache 服务器。这样,可能会导致该 “ 热门 ” 站点的映像会出现在所有的 Cache 服务器上,降低了 Cache 服务器的使用效率。 LBLCR 调度算法将 “ 热门 ” 站点映射到一组 Cache 服务器(服务器集合),当该 “ 热门 ” 站点的请求负载增加时,会增加集合里的 Cache 服务器,来处理不断增长的负载;当该 “ 热门 ” 站点的请求负载降低时,会减少集合里的Cache 服务器数目。这样,该 “ 热门 ” 站点的映像不太可能出现在所有的 Cache 服务器上,从而提高 Cache 集群系统的使用效率。
        LBLCR 算法先根据请求的目标 IP 地址找出该目标 IP 地址对应的服务器组;按 “ 最小连接 ” 原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按 “ 最小连接 ” 原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

        此外,对关联变量 ServerSet[dest_ip] 也要进行周期性的垃圾回收( Garbage Collection ),将过期的目标 IP 地址到服务器关联项进行回收。过期的关联项是指哪些当前时间(实现时采用系统时钟节拍数)减去最近使用时间( lastuse )超过设定过期时间的关联项,系统缺省的设定过期时间为 24 小时。

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

1.8、源地址散列调度(Source Hashing  Scheduling )
        源地址散列调度( Source Hashing Scheduling )算法正好与目标地址散列调度算法相反,它根据请求的源 IP 地址,作为散列键( Hash Key )从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标 IP地址换成请求的源 IP 地址,所以这里不一一叙述。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值