`

LVS负载均衡(调度)算法-内核中的连接调度算法

阅读更多

 

此次主题主要讲述LVS 负载均衡策略和算法,这里面完全是罗列了章博士里面的blog,属于总结和转发性质。

 

如何将请求流调度到各台服务器,使得各台服务器尽可能地保持负载均衡。文章主要由两个部分组成。第一 部分描述IP 负载均衡软件IPVS 在内核中所实现的各种连接调度算法;第二部分给出一个动态反馈负载均衡算法(Dynamic-feedback load balancing ),它结合内核中的加权连接调度算法,根据动态反馈回来的负载信息来调整服务器的权值,来进一步避免服务器间的负载不平衡。

在下面描述中,我们称客户的socket 和服务器的socket 之间的数据通讯为连接,无论它们是使用TCP 还是UDP 协议。对于UDP 数据报文的 调度,IPVS 调度器也会为之建立调度记录并设置超时值(如5 分钟);在设定的时间内,来自同一地址(IP 地址和端口)的UDP 数据包会被调度到同一台服 务器。

内核中的连接调度算法

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

在内核中的连接调度算法上,IPVS 已实现了以下十种调度算法:

  • 轮叫调度(Round-Robin Scheduling

轮叫调度( Round Robin Scheduling )算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行 i = (i + 1) mod n ,并选出第 i 台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

  • 加权轮叫调度(Weighted Round-Robin Scheduling

跟轮询调度算法基本类似,轮询调式适合于每个服务器的负载都相同的情况,而加权轮询,可以处理每个服务器负载不同的情况,比如说,应该给cpu 和内存多的服务器以更多的权重。

  • 最小连接调度(Least-Connection Scheduling

最小连接调度( Least-Connection Scheduling )算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务 器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加 1 ;当连接中止或超时,其连接数减一。

  • 加权最小连接调度(Weighted Least-Connection Scheduling

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

  • 基于局部性的最少链接(Locality-Based Least Connections Scheduling

基于局部性的最少链接调度( Locality-Based Least Connections Scheduling ,以下简称为 LBLC )算法是针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache 集群中 客户请求报文的目标 IP 地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标 IP 地址的 请求调度到同一台服务器,来提高各台服务器的访问局部性和主存 Cache 命中率,从而整个集群系统的处理能力。

  • 带复制的基于局部性最少链接(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 集群系统的使用效率。

 

  • 目标地址散列调度(Destination Hashing Scheduling

目标地址散列调度(Destination Hashing Scheduling )算法也是针对目标IP 地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash )函数将一个目标IP 地址映射到一台服务器。

目标地址散列调度算法先根据请求的目标IP 地址,作为散列键(Hash Key )从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。该算法的流程如下:

注:下面的hash 函数比较有用,可以很好的让key 均匀的散列在hash 表里,提高查询效率。

static inline unsigned hashkey(unsigned int dest_ip)

{

  return (dest_ip* 2654435761UL) & HASH_TAB_MASK;

}

 

  • 源地址散列调度(Source Hashing Scheduling

源地址散列调度(Source Hashing Scheduling )算法正好与目标地址散列调度算法相反,它根据请求的源IP 地址,作为散列键(Hash Key )从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP 地址换成请求的源IP 地址,所以这里不一一叙述。

在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

 

  • 最短预期延时调度(Shortest Expected Delay Scheduling
  • 不排队调度(Never Queue Scheduling

 

分享到:
评论

相关推荐

    LVS负载均衡

    LVS提供了多种调度算法,包括轮询(Round Robin)、最小连接数(Least Connections)、短连接优先(First Come First Served)、哈希(Hash-based)等,这些算法可以根据实际需求灵活配置,以实现最佳的负载分配。...

    lvs负载均衡源码

    LVS负载均衡器的调度算法有很多种,例如轮询(Round Robin)、最少连接(Least Connections)、短连接优先(Shortest Connection First)等,可以根据实际需求选择合适的算法来分配请求。 在“LVS-master”这个...

    负载均衡的LVS服务器的设计与实现.pdf

    - 调度算法:LVS提供了多种调度算法,如轮询、最少连接、IP哈希等,以满足不同场景下的需求。 - 高可用性:LVS可以配置为热备份或主备模式,以确保服务的连续性。 - 性能优化:LVS可以通过调整内核参数、优化网络...

    LVS负载均衡服务器.pdf

    例如,`ipvsadm -A -t <virtual_ip>:<port> -s <scheduler>`命令可以添加一个新的TCP负载均衡服务,指定虚拟IP、端口和调度算法。 在实际应用中,LVS不仅可以用于Web服务的负载均衡,还可以扩展到其他TCP或UDP服务...

    lvs四层的负载均衡和七层负载均衡的区别

    常见的调度算法包括轮询(RR)、加权轮询(WRR)、最少连接(LC)、加权最少连接(WLC)、最短期望延迟(SED)、从不排队(NQ)等。 - **IP地址类型**: - CIP:客户端IP(client IP)。 - VIP:虚拟IP(virtual IP)...

    LVS工作模式-始终调度算法

    LVS(Linux Virtual Server)是一种基于Linux内核的负载均衡技术,它通过构建虚拟服务器集群来实现对大量并发访问的处理,有效提升系统的可用性和扩展性。LVS支持三种主要的工作模式:VS/NAT(Virtual Server via ...

    Lvs负载均衡的基本设置[收集].pdf

    本文主要探讨LVS/NAT方式的负载均衡配置,这种模式下,Director机器接收外部请求,修改目标地址并按照调度算法将请求分发给Real Server,Real Server处理后,结果通过Director返回给客户端。 ### 一、LVS/NAT工作...

    第三十二章:Lvs负载均衡群集1

    **LVS调度算法** LVS采用多种调度策略来分配请求: 1. **轮询(rr)**:简单地将请求均匀分配给所有服务器。 2. **加权轮询(wrr)**:根据服务器的实际处理能力动态调整权重,让能力强的服务器接收更多请求。 3. **...

    利用LVS+Keepalived 实现高性能高可用负载均衡服务器

    【LVS+Keepalived 实现高性能高可用负载均衡服务器】 在互联网行业中,随着网站业务量的不断增长,服务器承受的压力日益增大。为了确保服务的稳定性和可用性,需要采用负载均衡策略。LVS(Linux Virtual Server)和...

    LVS基本概念及要诀--NetSeek.pdf

    **LVS实践经验**:LVS调度的基本单位是“连接”,当Apache的KeepAlive选项关闭时,每次HTTP请求都会建立一个新的连接,这将影响LVS的连接管理策略,可能增加连接的创建和维护成本。 以上是对LVS基本概念及要诀的...

    lvs负载均衡

    1. **IPVS(IP Virtual Server)内核模块**:这是LVS的核心部分,集成在Linux内核中,负责实现四层负载均衡。IPVS提供虚拟服务器的实现,使得客户端看到的是一个统一的IP地址,而实际的服务处理则分散到多台后端...

    LVS网络负载均衡手册(正式版)

    负载调度器负责接收客户端请求并根据预设的调度算法转发到后端的服务器,真实服务器则实际处理请求并返回结果给客户端。 接着,手册深入讲解了IPVS负载均衡技术,主要包括三种不同的实现方式:VS/NAT(Virtual ...

    负载均衡-LVS+Keepalived(终极文档).doc

    通常,负载均衡架构会包含一个或多个LVS服务器,这些服务器拥有共享的虚拟IP(VIP),客户端的请求会发送到VIP,然后由LVS根据预设的调度算法将请求转发到健康的RealServer。在这个例子中,配置了两台LVS服务器,一...

    基于LVS的网站服务器群的负载均衡.pdf

    综上所述,LVS作为一种基于IP层的负载均衡解决方案,不仅能够有效提高网站服务器群的整体性能,还能通过灵活的调度算法满足不同场景下的需求。对于那些希望提升网站响应速度和服务质量的企业而言,LVS是一个值得考虑...

Global site tag (gtag.js) - Google Analytics