9.3. LVS 调度总览

使用 LVS 群集的一个优越性是它能够在真正服务器组中执行灵活的、IP 级别的负载均衡。带来这种灵活性的原因是管理员在配置群集时可以选择多种调度算式,例如:循环 DNS(Round-Robin DNS),这里的 DNS 的层次性和客户机器的缓存能力可能会导致负载不均衡。此外,LVS 路由器使用的低级过滤比应用程序级别的请求转发要有优越性,因为网络分组级别的均衡负载会带来最低限度的计算费用,并允许最大程度上的可缩放性。

使用调度,活跃路由器便可以把真正服务器的活动考虑在内,它还可以在选路发送服务请求时考虑管理员分派的权(weight)因素。

LVS 群集的调度机制是由一组叫做 IP 虚拟服务器(IP Virtual Server)或 IPVS 模块的内核补丁提供的。这些模块启用第四层(layer 4,L4)传输层转换,该转换的设计使其能够在单 IP 地址上和多服务器一起良好地工作。

要有效地跟踪和选路发送到真正服务器的分组,IPVS 在内核中建构一个 IPVS 表(IPVS table)。该表被活跃 LVS 路由器用来把来自虚拟服务器地址的请求重导向和返回到真正服务器中。IPVS 表被一个叫做 ipvsadm 的守护进程不断更新 — 根据群集成员的可用性来添加或移除它们。

9.3.1. 调度算式

IPVS 表的结构是根据管理员为虚拟服务器选择的调度算式而定的。要在你能够集群的服务类型中允许最大程度的灵活性,或决定这些服务该如何调度,红帽企业 Linux 提供了以下调度算式。关于如何分派算式的说明请参阅第 12.6.1 节

循环调度

把每项请求按顺序在真正服务器中循环分派。使用这个算式,所有真正服务器都被平等对待,不考虑它们的能力或载量。这种调度模型和循环 DNS 相似,但是它更粗糙些,因为它是基于网络连接的而不是基于主机的。LVS 循环调度还不会受由缓存的 DNS 查询所导致的不平衡所影响。

加权循环调度

把每项请求按顺序在真正服务器中循环分派,但是给能力较大的服务器分派较多的作业。能力是由一个用户分派的权因素表明的,然后它再由动态载量信息上下调整。关于给真正服务器加权的详情请参阅第 9.3.2 节

如果集合内的真正服务器在能力上大相径庭,加权循环法是优选的方法。不过,如果请求载量的变化太大,加以重权的服务器就可能会答复比它份内更多的请求。

最少连接

给带有较少活跃连接的真正服务器分派较多的请求。因为它通过 IPVS 表来保持真正服务器的活跃连接记录,最少连接方法是一种动态调度算式,如果请求载量的变动较大,这种方法就是较佳的选择。它最适合于每个成员的能力都大致相同的真正服务器集合。如果一组服务器间的能力有大有小,加权最少连接法调度就是较好的选择。

加权最少连接法(默认)

给和它们的能力相比带有较少活跃连接的服务器分派较多的请求。能力是由一个用户分派的权表明的,然后它再由动态载量信息来上下调整。增加权信息使该算式成为包含不同硬件能力的真正服务器的理想选择。关于给真正服务器加权的详情请参阅第 9.3.2 节

基于地区的最少连接调度

给和它们的目标 IP 相比带有较少活跃连接的服务器分派较多的请求。这种算式是为在代理缓存服务器群集中使用而设计的。它把到某个 IP 地址的分组选路发送到该地址的服务器,除非该服务器超过了它的能力,而且另一个服务器只有一半载量。在后者情况下,它把 IP 地址分派给载量最少的真正服务器。

带有复制调度的基于地区的最少连接调度

给和它们的目标 IP 相比带有较少活跃连接的服务器分派较多的请求。该算式也是为用在代理缓存服务器群集中而设计的。它和基于地区的最少连接调度法的区别在于:它是通过把目标 IP 地址映射到真正服务器节点的子集合来调度的。然后,请求被选路发送到这个子集合中带有最少连接数量的服务器上。如果目标 IP 的所有节点都超载了,它就会通过把真正服务器总集合中带有最少连接的服务器添加到该目标 IP 的真正服务器子集合中来为该目标 IP 地址复制一个新的服务器。

目标散列调度

通过在静态散列表中查看目标 IP 来给真正服务器分派请求。这种算式是为在代理缓存服务器群集中使用而设计的。

源散列调度

通过在静态散列表中查看源 IP 来给真正服务器分派请求。这种算式是为带有多个防火墙的 LVS 路由器设计的。

9.3.2. 服务器加权和调度

LVS 群集的管理员可以给真正服务器集合中的每个节点分派一个权(weight)。这个权是任何识别“权”的调度算式(如加权最少连接法)会考虑的整数值。它还能够帮助 LVS 路由器在能力各有不同的硬件中均衡地分配载量。

“权”是一种相对的比率。例如,如果一个真正服务器的权是1,另一个服务器的权是5,那么权是1的服务器每得到一个连接,权是5的服务器就会得到5个连接。真正服务器的权的默认值是1。

虽然给真正服务器集合中的各类硬件配置添加权能够更有效地均衡群集的负载,它却会在某个真正服务器刚被介绍入真正服务器集合,并且虚拟服务器使用加权的最少连接法刚被调度时造成暂时的不平衡。例如,假设真正服务器集合中有三个真正服务器。服务器 A 和 B 的权是1,服务器 C 的权是 2。如果服务器 C 由于某种原因停运了,服务器 A 和 B 就会平均分配被放弃的载量。然而,如果服务器 C 又开始运行了,LVS 路由器看到它的连接数量为0,就会把所有的进入请求都调度给它,直到它的载量和服务器 A 和 B 在同一级别为止。

要防止这种情况的出现,管理员可以把虚拟服务器配置成一个静态(quiesce)服务器 — 每当一个新的真正服务器节点被加入后,最少连接表都被重设为零,LVS 路由器就会如同所有的真正服务器都是刚刚被加入群集一样来选路发送。