这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

经典连接负载均衡

经典连接负载均衡功能为与数据库的所有客户端连接应用单个策略。数据库和客户端都必须启用负载均衡选项才能对连接进行负载均衡。如果客户端和服务器都启用负载均衡,则在客户端尝试与 Vertica 建立连接时,会发生以下过程:

  1. 客户端连接数据库群集中的主机时,连接参数指示它正在请求负载均衡连接。

  2. 主机根据当前负载均衡方案,从群集中当前正在运行的主机列表中选择一个主机。在所有方案下,主机都可以选择自身。

  3. 主机告诉客户端它选择了哪个主机来处理客户端连接。

  4. 如果主机选择数据库中其他主机来处理客户端连接,客户端将断开与初始主机的连接。否则,客户端将跳到步骤 6。

  5. 客户端与将负责处理其连接的主机建立连接。客户端设置第二个连接请求,使第二个主机不会将连接解释为负载均衡请求。

  6. 客户端连接继续正常运行(如果连接已启用 SSL,则协商加密,并继续对用户进行身份验证)。

此过程对客户端应用程序是透明的。客户端驱动程序会自动断开与初始主机的连接,然后重新连接到为负载均衡选择的主机。

要求

  • 在混合 IPv4 和 IPv6 环境中,平衡仅对配置了本机连接负载均衡的地址系列起作用。例如,如果您使用 IPv4 地址配置了负载均衡,则 IPv6 客户端无法使用负载均衡,不过 IPv6 客户端仍然可以连接,只是不进行负载均衡而已。

  • 本机负载均衡器为客户端返回要使用的 IP 地址。该地址必须是客户端可以到达的地址。如果您的节点位于专用网络上,则本机负载均衡要求您通过以下两种方式之一发布公共地址:

    • 在每个节点上设置公共地址。Vertica 将该地址保存在 NODES 系统表的 export_address 字段中。

    • 在数据库上设置子网。Vertica 将该地址保存在 DATABASES 系统表的 export_subnet 字段中。

负载均衡方案

负载均衡方案控制主机如何选择哪个主机来处理客户端连接。以下是三种可用方案:

  • NONE (默认值):禁用本机连接负载均衡。

  • ROUNDROBIN:从群集中处于启动状态的主机循环列表中选择下一个主机。例如,在包含三节点的群集中,依次迭代节点 1、节点 2 和节点 3,然后返回到节点 1。群集中的每个主机都在循环链表中维护自己的指向下一个主机的指针,而不存在一个群集范围内的状态。

  • RANDOM:从群集中所有处于启动的主机中随机选择一个主机。

您可以使用 SET_LOAD_BALANCE_POLICY 函数设置本机连接负载均衡方案。有关说明,请参阅启用和禁用本机连接负载均衡

驱动程序注意事项

  • 本机连接负载均衡与 ADO.NET 驱动程序的连接池结合使用。客户端建立的到初始主机的连接以及到负载均衡主机的最终连接会使用池化连接(如果它们可用)。

  • 如果客户端连接将 JDBC 和 ODBC 驱动程序与第三方连接池解决方案结合使用,初始连接不会被池化,因为它不是一个完整的客户端连接。最终连接会被池化,因为它是一个标准的客户端连接。

连接故障转移

客户端库包含故障转移功能,如果连接属性中指定的主机无法到达,则通过此功能,可以连接备份主机。使用本机连接负载均衡时,故障转移功能只能用于数据库的初始连接。如果客户端重定向到的主机没有对客户端的连接请求进行响应,客户端不会尝试连接备份主机,而是向用户返回连接错误。

客户端仅重定向到已知正常运行的主机。因此,只有当目标主机在客户端被重定向到它的那一刻发生故障时,才会发生这种连接失败。有关详细信息,请参阅 ADO.NET 连接故障转移JDBC 连接故障转移连接故障转移

1 - 启用和禁用经典连接负载均衡

只有数据库 超级用户才能启用或禁用群集范围的经典连接负载均衡。要启用或禁用负载均衡,请使用 SET_LOAD_BALANCE_POLICY 函数设置负载均衡策略。将负载均衡策略设置为“NONE”以外的任何其他值可在服务器中启用负载均衡。以下示例通过将负载均衡策略设置为 ROUNDROBIN 来启用本机连接负载均衡。

=> SELECT SET_LOAD_BALANCE_POLICY('ROUNDROBIN');
                  SET_LOAD_BALANCE_POLICY
--------------------------------------------------------------------------------
Successfully changed the client initiator load balancing policy to: roundrobin
(1 row)

要禁用本机连接负载均衡,请使用 SET_LOAD_BALANCE_POLICY 将此策略设置为“NONE”:

=> SELECT SET_LOAD_BALANCE_POLICY('NONE');
SET_LOAD_BALANCE_POLICY
--------------------------------------------------------------------------
Successfully changed the client initiator load balancing policy to: none
(1 row)

默认情况下,客户端连接不会进行负载均衡,即使服务器启用了连接负载均衡也是如此。客户端必须通过设置连接参数来指明其愿意对自己的连接请求进行负载均衡。 有关在客户端启用负载均衡的信息,请参阅 ADO.NET 中的负载均衡JDBC 中的负载均衡负载均衡。对于 vsql,使用 -C 命令行选项来启用负载均衡。

重置负载均衡状态

当负载均衡策略为 ROUNDROBIN 时,Vertica 群集中的每个主机都保持其自己的状态,即它选择哪个主机来处理下一个客户端连接。可使用 RESET_LOAD_BALANCE_POLICY 函数将此状态重置为其初始值(通常为具有最低节点 ID 的主机):

=> SELECT RESET_LOAD_BALANCE_POLICY();
RESET_LOAD_BALANCE_POLICY
-------------------------------------------------------------------------
Successfully reset stateful client load balance policies: "roundrobin".
(1 row)

另请参阅

2 - 监控传统连接负载均衡

查询 V_CATALOG.DATABASES 的 LOAD_BALANCE_POLICY 列可确定服务器上本机连接负载均衡的状态:

=> SELECT LOAD_BALANCE_POLICY FROM V_CATALOG.DATABASES;
LOAD_BALANCE_POLICY
---------------------
roundrobin
(1 row)

确定客户端已连接到哪个节点

客户端可以通过查询 V_MONITOR.CURRENT_SESSION 表的 NODE_NAME 列来确定它已连接到哪个节点:

=> SELECT NODE_NAME FROM V_MONITOR.CURRENT_SESSION;
NODE_NAME
------------------
v_vmart_node0002
(1 row)