Keepalived支持多种负载均衡调度算法,因此Keepalived可以采取灵活多变的方式将请求负载转发到后端服务器池中。Keepalived所使用的负载均调度机制由集成到内核中的IPVS模块提供,IPVS是LVS项目的核心功能模块,其设计的主要目的之一就是解决单IP多服务器的工作环境,IPVS模块使得基于TCP/IP传输层(第4层)的数据交换成为可能。在实际使用中,IPVS会在内核中创建一个名为IPVS Table的表,该表记录了后端服务器的地址及服务运行状态,通过IPVS Table,Keepalived便可跟踪并将请求路由到后端物理服务器中,即LVS Router利用此表将来自Keepalived虚拟服务器地址的请求转发到后端服务器池中,同时将后端服务器的处理结果转发给客户端。此外,IPVS Table的表结构主要取决于管理员对指定的虚拟服务器所设置的负载均衡算法,Keepalived支持以下几种负载均衡算法。
1)Round-Robin即轮询负载均衡算法,服务请求会被依次转发到服务器池中的每一个服务器上,而不去评估服务器的当前负载或者处理能力,服务器池中的每一个服务器都被平等对待。如果使用Round-Robin负载均衡算法,每台后端服务器会轮询依次处理服务请求。
2)Weighted Round-Robin即加权的Round-Robin算法,是对Round-Robin算法的一种扩展。在这种算法中,请求被依次转发到每一台服务器上,但是当前负载较轻或者计算能力较大的服务器会被转发更多的请求,服务器的处理能力通过用户指定的权重因子来决定,权重因子可以根据负载信息动态上调或者下调。如果服务器的配置差别较大,导致不同服务器的处理能力相差较大,则加权的Round-Robin算法会是不错的选择,但是如果请求负载频繁变动,则权重较大的服务器可能会超负荷工作。
3)Least-Connection即最少连接算法,请求被转发到活动连接较少的服务器上。在Keepalived的实际使用中,LVS Router一直在利用内核中的IPVS Table来记录后端服务器的活动连接,从而动态跟踪每个服务器的活动连接数。最少连接数算法是一种动态决策算法,它比较适合服务器池中每个成员的处理能力都大致相当,同时负载请求又频繁变化的场景,如果不同服务器有不同的处理能力,则下面的加权最少连接数算法较为合适。
4)Weighted Least-Connections即加权的最少连接数算法,路由会根据服务器的权重,转发更多的请求到连接数较少的服务器上。服务器的处理能力通过用户指定的权重因子来决定,权重因子可以根据负载信息动态上调或者下调。一般来说,服务器加权算法主要用于集群存在不同类型服务器,而服务器配置和处理能力相差较大的场景中。
5)Destination Hash Scheduling即目标地址哈希算法,通过在静态Hash表中查询目的IP地址来确定请求要转发的服务器,这类算法主要用于缓存代理服务器集群中。
6)Source Hash Scheduling即源地址哈希算法,通过在静态Hash表中查询源IP地址来确定请求要转发的服务器,这类算法主要应用于存在多防火墙的LVS Router中。
7)Shortest Expected Delay即最小延时算法,在这种算法中,请求被转发到具有最小连接响应延时的服务器上。
笔记整理来自山金孝的《OpenStack高可用集群(上册):原理与架构》4.1.3章节,如有侵权请通知删除