2.3. keepalived 计划概述
使用 Keepalived 为跨实际服务器分发流量提供了很大的灵活性,其部分原因在于支持的调度算法多种多样。负载平衡优于不灵活的方法,例如 round-Robin DNS,其中 DNS 的层次结构以及客户端机器的缓存会导致负载下降。此外,LVS 路由器使用的低级别过滤优于应用程序级请求转发,因为平衡网络数据包级别的负载会导致计算开销最小,并实现更大的可扩展性。
使用分配的权重为各个机器带来任意优先级。利用这种形式的调度,可以创建一组使用各种硬件和软件组合的实际服务器,活动路由器可以平均加载每个实际服务器。
Keepalived 的调度机制由名为 IP Virtual Server 或 IP VS 模块的内核补丁集合提供。这些模块支持第 4 层(L4 )传输层交换,其设计可在单个 IP 地址上与多个服务器配合工作。
为了有效地跟踪和路由数据包到实际服务器,IPVS 在内核中构建 IPVS 表。此表供活动 LVS 路由器用于将来自虚拟服务器地址的请求重定向到 并从池中实际服务器返回。
2.3.1. keepalived Scheduling Algorithms
IPVS 表采用的结构取决于管理员为给定虚拟服务器选择的调度算法。为了最大限度地提高您可以集群的服务类型和这些服务的调度方式,Keepalived 支持以下列出的调度算法。
- round-Robin Scheduling
- 在实际服务器池之间按顺序分发每个请求。使用这种算法时,所有实际服务器都被视为相等,而不考虑容量或负载。此调度模型类似于循环 DNS,但由于它是基于网络连接,而非基于主机,因此更加精细。Load Balancer round-robin 调度也不会遭遇缓存的 DNS 查询导致的静默。
- 加权轮询调度
- 在实际服务器池之间按顺序分发每个请求,但为具有更大容量的服务器提供更多作业。容量由用户分配的权重因数表示,然后通过动态负载信息向上或向下调整。如果池中实际服务器的容量存在显著差异,则加权循环调度是首选。但是,如果请求负载有显著变化,权重较高的服务器可能会回答超过其请求份额。
- minimum-Connection
- 将更多请求分发到活动连接较少的实际服务器。由于它通过 IPVS 表跟踪与实际服务器的实时连接,因此最小连接是一种动态调度算法,因此在请求负载中存在高度变化时做出更好的选择。它最适合一个实际的服务器池,每个成员节点具有大致相同的容量。如果一组服务器具有不同的功能,则优先选择权重最小连接调度。
- 加权 Least-Connections
- 将更多请求分发到与其容量相关的活动连接较少的服务器。容量由用户分配的权重指示,然后通过动态负载信息向上或向下调整。添加权重使得这种算法在实际服务器池中包含不同容量的硬件时非常理想。
- 基于本地性的 Least-Connection 调度
- 将更多请求发送到与其目标 IP 相关的活动连接较少的服务器。此算法设计为用于代理缓存服务器群集。它将 IP 地址的数据包路由到该地址的服务器,除非该服务器超过其容量,并且具有半负载的服务器,在这种情况下,它会将该 IP 地址分配给最小加载的实际服务器。
- 使用复制调度基于本地的 Least-Connection 计划
- 将更多请求发送到与其目标 IP 相关的活动连接较少的服务器。此算法也设计为用于代理缓存服务器群集。它与基于位置的 Least-Connection 调度不同,方法是将目标 IP 地址映射到实际服务器节点的子集。然后,请求被路由到连接数量最低的子集中的服务器。如果目标 IP 的所有节点都超过容量,它会通过将实际服务器的总体连接最少的实际服务器添加到该目标 IP 的实际服务器的子集来复制该目标 IP 的新服务器。然后,最加载的节点从实际的服务器子集中丢弃,以防止过度复制。
- 目标哈希调度
- 通过在静态散列表中查找目标 IP,将请求分发到实际服务器池中。此算法设计为用于代理缓存服务器群集。
- Source Hash Scheduling
- 通过在静态散列表中查找源 IP,将请求分发到实际服务器池中。此算法专为具有多个防火墙的 LVS 路由器设计。
- 最短的预期 Delay
- 将连接请求分发到服务器,根据给定服务器上的连接数预期最短的延时值,除以其分配的权重。
- Never Queue
- 个双管调度程序,首先查找连接请求并将其发送到闲置或没有连接的服务器。如果没有闲置服务器,调度程序会默认使用与 Shortest 预期 Delay 相同的延迟最小的服务器。
2.3.2. 服务器每周和调度
负载平衡器管理员可以为真实服务器池中的每个节点分配一个权重。这个权重是一个整数值,它被算入任何重量感知调度算法 (如加权最小连接)中,并帮助 LVS 路由器更加均匀地加载具有不同能力的硬件。
权重按照相对于相互的比率来工作。例如,如果一个实际服务器具有 1 的权重,而另一服务器权重为 5,那么权重为 5 的服务器会为另一服务器获得的每 1 连接获得 5 连接。实际服务器权重的默认值为 1。
虽然为实际服务器池中的各种硬件配置添加权重可以帮助更有效地对群集进行负载平衡,但在将实际服务器引入实际服务器池时,并且使用加权最小连接调度虚拟服务器时,可能会导致临时问题。例如,假设实际的服务器池中有三个服务器:服务器 A 和 B 的权重为 1,第三台服务器 C 的权重为 2。如果服务器 C 因任何原因而停机,服务器 A 和 B 平均分配负载。但是,一旦服务器 C 重新上线,LVS 路由器看到它的连接为零,并填充了服务器的所有传入请求,直到它与服务器 A 和 B 相同。