连接负载均衡策略
连接负载均衡策略基于连接的来源重定向连接,从而帮助分摊服务客户端连接的负载。这些策略还可以通过在节点之间分摊连接来帮助防止节点达到其客户端连接限制并拒绝新连接。有关客户端连接限制的详细信息,请参阅限制客户端连接的数量和长度。
负载均衡策略包括:
-
网络地址,用于标识节点上的特定 IP 地址/端口号组合。
-
一个或多个路由规则,用来将一系列客户端 IP 地址映射到连接负载均衡组。
当客户端连接到启用负载均衡的数据库中的节点时,该节点会根据客户端的 IP 地址评估所有路由规则,以确定是否有任何匹配项。如果多个规则与该 IP 地址匹配,则节点应用最有针对性的规则(影响最少 IP 地址的规则)。
如果节点找到匹配规则,它会使用该规则来确定用于处理客户端连接的潜在节点池。在评估潜在目标节点时,它始终确保节点当前处于启动状态。然后,最初联系的节点根据组的分布方案选择组中的节点之一。分布方案可以是随机选择一个节点,也可以是按“循环”轮换顺序选择一个节点。例如,在一个三节点群集中,循环顺序是节点 1、节点 2、节点 3,然后再回到节点 1。
在对规则进行处理之后,如果节点确定客户端的连接应当由另一个节点处理,该节点会通知客户端它选择了哪个节点。客户端断开与初始节点的连接,并连接到所选节点以继续连接过程(在连接启用 TLS/SSL 的情况下进行协商加密,或者通过身份验证)。
如果初始节点根据路由规则选择自己,它会通知客户端继续执行连接过程的下一个步骤。
如果没有路由规则与传入 IP 地址匹配,该节点会检查 Vertica 和客户端是否均启用了经典连接负载均衡。如果是,它将根据经典负载均衡策略处理连接。有关详细信息,请参阅经典连接负载均衡。
最后,如果数据库在 Eon 模式下运行,节点会尝试应用默认的内部负载均衡规则。请参阅下面的默认子群集内部负载均衡策略。
如果没有路由规则与传入 IP 地址和经典负载均衡匹配,并且默认子群集内部负载均衡规则不适用,则节点将自行处理连接。如果节点无法遵循负载均衡规则,它也会自行处理连接。例如,如果负载均衡组中作为规则目标的所有节点都已关闭,则最初联系的节点会自行处理客户端连接。在这种情况下,节点不会尝试应用任何其他具有较少限制且适用于传入连接的负载均衡规则。它仅尝试应用单个负载均衡规则。
用例
使用负载均衡策略,可以:
-
确保来自内部网络内外的连接被定向到客户端的有效 IP 地址。例如,假设您的 Vertica 节点有两个 IP 地址:一个用于外部网络,另一个用于内部网络。这些网络相互排斥。您无法从公共网络访问专用网络,也无法从专用网络访问公共网络。负载均衡规则需要为客户端提供它们实际可以访问的 IP 地址。
-
允许访问 NAT 路由器后面的多个 Vertica 群集节点。NAT 路由器可通过单个 IP 地址从外部网络访问。NAT 路由器专用网络内的系统可以使用不同的端口号在这个 IP 地址上访问。您可以创建一个负载均衡策略,将客户端连接重定向到 NAT 的 IP 地址,但使用不同的端口号。
-
指定多组节点来为源自一个 IP 地址范围的客户端连接提供服务。例如,如果为您的 ETL 系统设置了一个 IP 地址范围,您可以仅允许 ETL 系统的客户端连接到任意一组 Vertica 节点、一个子群集或一个容错组。这种技术可用于隔离服务客户端连接到几个节点所需的开销。当您在 Eon 模式数据库中使用子群集来隔离工作负载时,这种技术很有用(有关详细信息,请参阅子群集)。
针对 IPv4 和 IPv6 使用连接负载均衡策略
连接负载均衡策略适用于 IPv4 和 IPv6。就负载均衡策略而言,这两个地址系列代表不同的网络。如果您希望负载均衡策略既能够处理 IPv4 地址又能够处理 IPv6 地址,则必须为每个协议创建单独的网络地址、负载均衡组和规则集。当客户端建立与群集中某个节点的连接时,它使用的寻址协议将确定 Vertica 在决定是否以及如何平衡连接时参考哪组规则。
默认子群集内部负载均衡策略
在 Eon 模式下运行的数据库具有默认连接负载均衡策略,该策略有助于在子群集中的节点之间分摊客户端连接的处理负载。如果客户端在连接到节点的同时选择加入连接负载均衡,节点将检查有无适用于客户端 IP 地址的负载均衡策略。如果它没有找到任何适用的负载均衡规则,并且没有启用经典负载均衡,则节点将回退到默认的内部负载均衡规则。此规则在与最初联系的节点相同的子群集中的节点之间分布连接。
与其他连接负载均衡策略一样,子群集中的节点必须定义一个网络地址,以便它们有资格处理客户端连接。如果子群集中不存在具有网络地址的节点,则该节点不应用默认的子群集内部负载均衡规则,并且不会对连接进行负载均衡。
当您主要对每个子群集内的负载均衡连接感兴趣时,此默认规则很方便。您只需为子群集中的节点创建网络地址,而无需创建负载均衡组或规则。选择加入负载均衡的客户端随后会在子群集中的节点之间自动平衡。
针对多个网络地址的内部负载均衡策略
如果您的节点有多个网络地址,默认的子群集内部负载均衡规则会选择最先创建的地址作为负载均衡规则的目标。例如,假设您在一个节点上为专用 IP 地址 192.168.1.10 创建一个网络地址,然后为公共 IP 地址 233.252.0.1 的节点创建另一个网络地址。默认子群集内部连接负载均衡规则始终选择 192.168.1.10 作为规则的目标。
如果您希望默认内部负载均衡规则选择不同的网络地址作为其目标,请删除节点上的其他网络地址,然后重新创建它们。删除并重新创建其他地址会使您希望规则选择的地址成为最旧的地址。例如,假设您希望规则使用在专用地址 (192.168.1.10) 之后创建的公共地址 (233.252.0.1)。在这种情况下,您可以删除 192.168.1.10 的地址,然后重新创建它。之后,在默认情况下,该规则使用旧的公共地址 233.252.0.1。
如果您打算为子群集中的节点创建多个网络地址,请先创建要用于默认子群集内部负载均衡的网络地址。例如,假设您想使用默认子群集内部负载均衡规则来对大多数客户端连接进行负载均衡。但是,您还想创建一个连接负载均衡策略来管理源自一组 ETL 系统的连接。在这种情况下,首先创建要用于默认内部负载均衡规则的网络地址,然后为 ETL 系统创建网络地址。
负载均衡策略与经典负载均衡
经典负载均衡功能与负载均衡策略功能有以下几个区别:
-
在经典连接负载均衡中,您只需在客户端和服务器上启用负载均衡选项,并启用负载均衡。实施负载均衡策略的步骤更多:必须创建地址、组和规则,然后在客户端上启用负载均衡。
-
经典连接负载均衡仅支持使用群集范围的单个策略来重定向连接。使用连接负载均衡策略,可以根据连接的来源选择哪些节点处理客户端连接。这使您可以更灵活地处理复杂的情况。例如,通过基于 NAT 的路由器路由连接,或者让可通过多个 IP 地址访问的节点位于不同的网络上。
-
在经典连接负载均衡中,群集中的每个节点只能通过一个 IP 地址访问。此地址在 NODES 系统表的 EXPORT_ADDRESS 列中设置。使用连接负载均衡策略,可以为与节点关联的每个 IP 地址创建一个网络地址。然后,创建用于重定向到这些地址的规则。
用于创建负载均衡策略的步骤
您必须遵循以下三个步骤来创建负载均衡策略:
-
为要参与连接负载均衡策略的每个节点创建一个或多个网络地址。
-
创建一个或多个负载均衡组作为路由规则的目标。负载均衡组可以将特定网络地址的集合作为目标。或者,可以从容错组或子群集创建一个组。您可以使用 IP 地址筛选器将负载均衡组的成员限制为容错组或子群集的子集。
-
创建一个或多个路由规则。
尽管并不绝对必需,但最好始终测试负载均衡策略以确保它按预期方式工作。
完成这些步骤后,Vertica 会将负载均衡策略应用于选择加入连接负载均衡的客户端连接。 有关在客户端启用负载均衡的信息,请参阅 ADO.NET 中的负载均衡、JDBC 中的负载均衡和负载均衡。对于 vsql,使用 -C
命令行选项来启用负载均衡。
这些步骤在此部分的其他主题中有说明。