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

返回本页常规视图.

管理节点

Vertica 能够在正在处理查询的实时群集上添加移除替换节点。此功能使您可在不中断用户的情况下扩展数据库。

此部分内容

1 - 在节点上停止 Vertica

在某些情况下,您需要关闭节点才能执行维护任务或升级硬件。可以通过以下方法之一执行此操作:

管理工具

  1. 运行管理工具 (Administration Tools),选择高级菜单 (Advanced Menu),然后单击确定 (OK)

  2. 选择在主机上停止 Vertica (Stop Vertica on Host),然后单击确定 (OK)

  3. 选择要停止的主机,然后单击确定 (OK)

  4. 返回主菜单,选择查看数据库群集状态 (View Database Cluster State),然后单击确定 (OK)。您之前停止的主机应显示为 DOWN。

  5. 现在可执行维护工作。

有关在节点上重新启动 Vertica 的详细信息,请参阅在节点上重新启动 Vertica

命令行

您可以使用命令行工具 stop_node 停止一个或多个节点上的 Vertica。stop_node 将一个或多个节点 IP 地址作为实参。例如,以下命令在两个节点上停止 Vertica:

$ admintools -t stop_node -s 192.0.2.1,192.0.2.2

2 - 在节点上重新启动 Vertica

停止节点以执行维护任务(如升级硬件)之后,需要重新启动该节点才能重新连接数据库群集。

  1. 运行管理工具。从“主菜单 (Main Menu)”中选择在主机上重新启动 Vertica (Restart Vertica on Host),然后单击确定 (OK)

  2. 选择数据库并单击确定 (OK)

  3. 选择要重新启动的主机并单击确定 (OK)

  4. 返回主菜单,选择查看数据库群集状态 (View Database Cluster State),然后单击确定 (OK)。您重新启动的主机现在显示为 UP,如下图所示。

3 - 设置节点类型

创建节点时,Vertica 会自动将其类型设置为 PERMANENT。这使 Vertica 可以使用此节点来存储数据。您可以使用 ALTER NODE 将节点的类型更改为以下类型之一:

  • PERMANENT:(默认值):存储数据的节点。

  • EPHEMERAL:从一种类型转换到另一种类型的节点——通常是从 PERMANENT 到 STANDBY 或 EXECUTE。

  • STANDBY:保留以在任何节点发生故障时替换该节点的节点。备用节点不存储段或数据,直到它被调用以替换故障节点。当用作替换节点时,Vertica 将其类型更改为 PERMANENT。有关详细信息,请参阅活动备用节点

  • EXECUTE:该节点仅为计算目的而保留。执行节点不包含段或数据。

4 - 活动备用节点

活动备用节点是企业模式数据库中可用于替换任何故障节点的节点。与标准 Vertica 节点不同,备用节点不执行计算或包含数据。如果永久节点出现故障,那么在故障节点超过故障转移时间限制后,活动备用节点可以替换故障节点。替换故障节点后,活动备用节点包含投影并执行它所替换的节点的全部计算。

此部分内容

4.1 - 创建活动备用节点

可在创建数据库期间在企业模式数据库中创建活动备用节点,也可稍后创建此节点。

在新数据库中创建活动备用节点

  1. 创建数据库,包括要用作活动备用节点的节点。

  2. 使用 vsql 连接到一个并非 您希望用作活动备用节点的节点。

  3. 使用 ALTER NODE 将此节点从永久节点转换为活动备用节点。例如:

    => ALTER NODE v_mart_node5 STANDBY;
    

    在发出 ALTER NODE 语句后,受影响的节点会关闭并作为活动备用节点重新启动。

在现有数据库中创建活动备用节点

在创建要用作活动备用节点的节点时,应尽快将新节点更改为暂时状态,以防止群集将数据移动到新节点。

  1. 向数据库中添加节点

  2. 使用 vsql 连接到任何其他节点。

  3. 使用 ALTER NODE 将新节点从永久节点转换为暂时节点。例如:

    => ALTER NODE v_mart_node5 EPHEMERAL;
    
  4. 重新平衡群集,以便移除暂时节点中的所有数据。

  5. 在暂时节点上使用 ALTER NODE 将该节点转换为活动备用节点。例如:

    => ALTER NODE v_mart_node5 STANDBY;
    

4.2 - 使用活动备用节点替换节点

企业模式数据库上的故障节点可以自动或手动替换为活动备用节点。

自动替换

您可以使用参数 FailoverToStandbyAfter 配置故障节点的自动替换。如果启用了此参数,它将指定活动备用节点等待多长时间后替换故障节点。如果可以,Vertica 将从故障节点所在的容错组中选择备用节点。否则,Vertica 将随机选择一个可用的活动备用节点。

手动替换

作为管理员,您可以使用 ALTER NODE 手动替换故障节点:

  1. 使用管理工具vsql 连接到数据库。

  2. 用 ALTER NODE...REPLACE 替换节点。REPLACE 选项可以指定备用节点。如果 REPLACE 未限定,则 Vertica 会从故障节点所在的容错组中选择一个备用节点(如果可用);否则,它会随机选择一个可用的活动备用节点。

4.3 - 恢复活动备用节点

当企业模式数据库中的已关闭节点准备好重新激活时,您可以还原该节点,方法是将其替换节点恢复为备用状态。您可以使用 ALTER NODE 针对单个节点执行此操作,或使用 ALTER DATABASE 针对整个数据库执行此操作:

  1. 使用管理工具或通过 vsql 连接到数据库。

  2. 恢复备用节点。

    • 使用 ALTER NODE 恢复单个节点:

      ALTER NODE node‑name RESET;
      
    • 使用 ALTER DATABASE 恢复整个数据库群集中的节点:

      ALTER DATABASE DEFAULT RESET STANDBY;
      

如果关闭的节点无法恢复操作,Vertica 会忽略重置请求并将备用节点留在原地。

5 - 大型群集

Vertica 使用 Spread 服务在数据库节点之间广播控制消息。此服务可以限制 Vertica 数据库群集的增长。随着群集节点数量的增加,Spread 服务的负载也会随着更多参与者交换消息而增加。负载增加后会降低群集的整体性能。此外,网络寻址将 Spread 服务中参与者的最大数量限制为 120(通常要少得多)。在这种情况下,您可以使用大型群集来克服这些 Spread 限制。

启用大型群集后,名为控制节点的群集节点子集使用 Spread 服务交换消息。群集中的其他节点会分配给这些控制节点之一,并依赖它们进行群集范围的通信。每个控制节点将消息从 Spread 服务传递到它的依赖节点。当依赖节点需要向群集中的其他节点广播消息时,它将消息传递给其控制节点,控制节点又将消息发送到其他依赖节点以及 Spread 服务。

通过设置控制节点和其他节点之间的依赖关系,您可以增加数据库节点的总数,并使节点总数符合 Spread 限制(即 120 个节点)。

大型群集功能的一个缺点是,如果一个控制节点发生故障,它的依赖节点就会与数据库群集的其余部分断开。这些节点无法参与数据库活动,Vertica 也认为它们已关闭。当控制节点恢复时,它会在其依赖节点与数据库之间重新建立通信,因此所有节点都重新加入群集。

大型群集和数据库增长

当您的数据库启用了大型群集时,Vertica 会决定是将新添加的节点设为控制节点还是依赖节点,如下所示:

  • 在企业模式下,如果为数据库群集配置的控制节点数大于其包含的当前节点数,Vertica 会将新节点设为控制节点。在 Eon 模式下,在子群集级别设置控制节点的数量。如果为包含新节点的子群集设置的控制节点数小于此设置,Vertica 会将新节点设为控制节点。

  • 如果企业模式群集或 Eon 模式子群集已达到其控制节点限制,则新节点将成为现有控制节点的依赖节点。

当新添加的节点为依赖节点时,Vertica 会自动将其分配给控制节点。Vertica 选择哪个控制节点由数据库模式引导:

  • 企业模式数据库:Vertica 将新节点分配给具有最少依赖项的控制节点。如果您在数据库中创建了容错组,Vertica 会在与新节点相同的容错组中选择一个控制节点。此功能允许您使用容错组来组织控制节点及其依赖项,以反映底层主机硬件的物理布局。例如,您可能希望依赖节点与其控制节点位于同一机架中。否则,影响整个机架的故障(如电源故障)不仅会导致机架中的节点关闭,而且还会导致其他架构中其控制节点位于受影响机架中的节点关闭。有关详细信息,请参阅容错组

  • Eon 模式数据库:Vertica 始终将新节点添加到子群集。Vertica 将新节点分配给该子群集中具有最少依赖节点的控制节点。启用了大型群集的 Eon 模式数据库中的每个子群集都至少有一个控制节点。将依赖节点与其控制节点保持在同一个子群集中可以保持子群集隔离。

当将子群集添加到 Eon Mode 数据库时,Spread 服务的上限(120 名参与者)可能会导致错误。如果您的数据库群集有 120 个控制节点,则尝试创建子群集会失败并出现错误。每个子群集必须至少有一个控制节点。当您的群集有 120 个控制节点时,Vertica 无法为新的子群集创建控制节点。如果发生此错误,您必须在添加子群集之前减少数据库群集中的控制节点数量。

何时启用大型群集

Vertica 在以下两种情况下自动启用大型群集:

  • 数据库群集包含 120 个或更多节点。对于企业模式和 Eon 模式都是如此。

  • 您创建一个包含 16 个或更多初始节点的 Eon 模式 子群集主要子群集或一个 辅助子群集)。

    如果您通过向现有子群集添加节点来将其扩展到 16 个或更多节点,Vertica 不会自动启用大型群集。

您可以选择在 Vertica 自动启用大型群集之前手动启用大型群集模式。您的最佳做法是在数据库群集大小达到阈值时启用大型群集:

  • 对于基于云的数据库,当群集包含 16 个或更多节点时启用大型群集。在云环境中,您的数据库使用点对点网络通信。在点对点通信模式下,Spread 服务的缩放性很差。当数据库群集达到 16 个节点时启用大型群集有助于限制因 Spread 服务处于点对点模式而造成的影响。

  • 对于内部部署数据库,当群集包含 50 到 80 个节点时启用大型群集。在内部部署环境中,Spread 服务的缩放性较好。但是,当群集达到 50 到 80 个节点时,Spread 服务可能会开始出现性能问题。

在云或内部部署环境中,如果您开始注意到与 Spread 相关的性能问题,请启用大型群集。Spread 性能问题的症状包括:

  • Spread 服务上的负载开始导致性能问题。因为 Vertica 将 Spread 服务用于群集范围的控制消息,所以 Spread 性能问题会对数据库性能产生不利影响。对于基于云的数据库尤其如此,由于云基础架构中网络广播的性质,Spread 性能问题很快成为瓶颈。在内部部署数据库中,广播消息通常不太受关注,因为消息通常保留在本地子网中。即便如此,在群集达到 120 个节点时,在 Vertica 自动启用大型群集之前,Spread 问题通常会成为瓶颈。

  • 群集中地址的压缩列表太大,无法放入最大传输单元 (MTU) 数据包(1478 字节)。MTU 数据包必须包含参与 Spread 服务的节点的所有地址。在理想情况下(当节点的 IP 地址为 1.1.1.1、1.1.1.2 等时),此数据包中可以容纳 120 个地址。这就是为什么当数据库群集达到 120 个节点时,Vertica 会自动启用大型群集。实际上,IP 地址的压缩列表将在 50 到 80 个节点处达到 MTU 数据包大小限制。

5.1 - 计划大型群集

在计划将数据库群集扩展到需要使用大型群集的程度时,您应该考虑两个因素:

  • 数据库群集应该有多少个控制节点?

  • 这些控制节点应该如何分布?

确定控制节点的数量

当您手动启用大型群集或添加足够的节点触发 Vertica 自动启用大型群集时,一部分群集节点将成为控制节点。在少于 16 个节点的子群集中,所有节点都是控制节点。在许多情况下,可以将控制节点数设置为整个企业模式群集中或超过 16 个节点的 Eon 模式子群集中节点总数的平方根。但是,这个计算控制数量的公式不能保证总是能满足您的要求。

在选择数据库群集中控制节点的数量时,您必须平衡两个相互竞争的考虑因素:

  • 如果控制节点发生故障或关闭,所有依赖于它的节点都将从数据库中断开。它们也会一直关闭到控制节点重新加入数据库。您可以通过增加群集中控制节点的数量来减少控制节点故障所带来的影响。

  • 群集中的控制节点越多,spread 服务的负载就越大。在云环境中,网络环境广播越复杂,延迟时间越长。这种延迟可能会导致通过 spread 服务发送的消息需要更长的时间才能到达群集中的所有节点。

在云环境中,经验表明,16 个控制节点可以平衡可靠性和性能的需求。在 Eon 模式数据库中,每个子群集必须至少有一个控制节点。因此,如果您有 16 个以上子群集,则必须有 16 个以上控制节点。

在 Eon 模式数据库中,无论是内部部署数据库还是云中数据库,都要考虑向主子群集中添加比辅助子群集更多的控制节点。在 Eon 模式数据库中,只有主子群集中的节点才负责维护 K-Safety。因此,与辅助子群集中的控制节点故障相比,主子群集中的控制节点故障对数据库的影响可能更大。

在内部部署企业模式数据库中,在选择控制节点的数量时,请考虑运行数据库的主机的物理布局。如果您的主机分布在多个服务器机架上,则需要有足够的控制节点将它们分发到各个机架上。分发控制节点有助于确保在发生涉及整个机架的故障(如电源或网络交换机故障)时实现可靠性。您可以将数据库配置为没有节点依赖某个单独机架中的控制节点。将依赖性限制在机架内可防止在出现会影响整个机架的故障时,由于控制节点丢失而导致在机架外出现额外的节点丢失。

根据物理布局选择控制节点的数量还可以降低跨交换机的网络流量。通过将依赖节点放在与其控制节点相同的机架上,会使它们之间的通信保留在机架中,而不是通过网络交换机进行通信。

您可能需要增加控制节点的数量以将它们均匀地分布在各个机架上。例如,内部部署企业模式数据库共有 64 个节点,分布在三个机架上。对于此群集,对节点数求平方根将得到 8 个控制节点。但是,八个控制节点无法均匀地分布在三个机架中。相反,您可以有 9 个控制节点,并在每个机架上平均分布三个控制节点。

影响控制节点放置

在确定群集的节点数后,需要确定如何在群集节点之间分布它们。Vertica 选择哪些节点成为控制节点。您可以影响 Vertica 如何选择控制节点以及哪些节点成为其依赖项。您使用的确切过程取决于数据库的模式:

  • 企业模式内部部署数据库:定义容错组以影响控制节点的放置。依赖节点始终与其控制节点位于同一容错组中。您通常定义容错组来反映运行数据库的主机的物理布局。例如,您通常为单机架服务器中的节点定义一个或多个容错组。当容错组反映物理布局时,Vertica 会以可限制机架故障所带来影响的方式放置控制节点及其依赖项。有关详细信息,请参阅容错组

  • Eon 模式数据库:使用子群集对控制节点的放置进行控制。每个子群集必须至少有一个控制节点。依赖节点始终与其控制节点位于同一个子群集中。您可以设置每个子群集的控制节点数。这样做可以让您将更多控制节点分配给主子群集,在这些子群集中,将控制节点发生故障的影响降至最低至关重要。

Vertica 如何选择默认控制节点数

Vertica 可以自动选择整个群集(在企业模式下)或子群集(在 Eon 模式下)的控制节点数。它在以下情况下设置默认值:

  • 当您将 default 关键字传递给 install_vertica 脚本的 --large-cluster 选项时(请参阅安装 Vertica 时启用大型群集)。

  • 当数据库群集增长到 120 个或更多节点时,Vertica 会自动启用大型群集。

  • 如果您创建超过 16 个节点的 Eon 模式子群集,Vertica 会自动启用大型群集。请注意,对于通过扩展超过 16 节点限制的子群集,Vertica 不会启用大型群集。它仅在一开始便超过 16 个节点时启用大型群集。

Vertica 选择的控制节点数取决于触发 Vertica 设置该值的原因。

如果您将 --large-cluster default 选项传递给 install_vertica 脚本,Vertica 会将控制节点数设置为初始群集中节点数的平方根。

如果数据库群集达到 120 个节点,Vertica 会通过将任何新添加的节点设为依赖项来启用大型群集。默认的控制节点数限值为 120。当达到此限制时,任何新添加的节点都将添加为依赖项。例如,假设您有一个包含 115 个节点的企业模式数据库群集,但您没有针对该群集手动启用大型群集。如果您向此群集中添加 10 个节点,Vertica 会添加 5 个节点作为控制节点(使您达到 120 个节点的限制),另外 5 个节点作为依赖项。

在 Eon 模式数据库中,每个子群集都有自己的控制节点数设置。Vertica 仅在您最初创建超过 16 个节点的子群集时自动设置控制节点的数量。在发生这种情况时,Vertica 会将子群集的控制节点数设置为子群集中节点数的平方根。

例如,假设您添加一个包含 25 个节点的新子群集。此子群集的节点数一开始便超过 16 个节点数限制,因此 Vertica 将此子群集的控制节点数设置为 5(即 25 的平方根)。其中五个节点被添加为控制节点,其余 20 个被添加为这五个节点的依赖项。

尽管每个子群集都有自己的控制节点数设置,但 Eon 模式数据库群集的控制节点总数仍然有 120 个节点的限制。

5.2 - 启用大型群集

在以下情况下,Vertica 自动启用大型群集功能:

  • 数据库群集中的节点总数超过 120。

  • 创建的 Eon 模式子群集包含 16 个以上节点。

在大多数情况下,您应该考虑在群集大小达到这些阈值中的任何一个之前手动启用大型群集。有关何时启用大型群集的指南,请参阅计划大型群集

您可以针对新 Vertica 数据库现有数据库启用大型群集。

安装 Vertica 时启用大型群集

您可以在将 Vertica 安装到新数据库群集时启用大型群集。如果您从一开始就知道大型群集会对您的数据库带来好处,则这种选择非常有用。

在安装过程中,install_vertica 脚本的 ‑‑large‑cluster 实参启用大型群集。它采用 1 到 120 之间的单个整数值,该值指定要在新数据库群集中创建的控制节点的数量。或者,此选项可以采用字面量实参 default。在这种情况下,Vertica 启用大型群集模式并将控制节点的数量设置为您在 ‑‑hosts 实参中提供的节点数的平方根。例如,如果 ‑‑hosts 指定 25 个主机并且 ‑‑large‑cluster 设置为 default,则安装脚本会创建一个具有 5 个控制节点的数据库群集.

‑‑large‑cluster 实参的作用略有不同,具体取决于您在创建数据库时选择的数据库模式:

  • 企业模式: ‑‑large‑cluster 设置整个数据库群集的控制节点总数。

  • Eon 模式: ‑‑large‑cluster 设置初始 默认子群集中的控制节点数。此设置对您稍后创建的 子群集不起作用。

安装过程完成后,请使用 管理工具管理控制台创建数据库。有关详细信息,请参阅创建空数据库

对于在企业模式下运行的内部部署数据库,通常需要定义可反映主机物理布局的容错组。它们让您可以定义哪些主机位于相同的服务器机架中,并且依赖于相同的基础架构(例如电源和网络交换机)。掌握了这些情况,Vertica 可以重新对齐控制节点,使您的数据库能够更好地应对硬件故障。有关详细信息,请参阅容错组

创建数据库后,默认情况下,您添加的任何节点都是依赖节点。可以使用元函数 SET_CONTROL_SET_SIZE 更改数据库中的控制节点数

在现有数据库中启用大型群集

您可以在现有数据库中手动启用大型群集。通常,您会选择在数据库达到 Vertica 自动启用大型群集的点之前手动启用大型群集。请参阅何时启用大型群集,了解何时应该考虑启用大型群集。

使用元函数 SET_CONTROL_SET_SIZE 启用大型群集并设置控制节点数。您向此函数传递一个整数值,该值设置整个企业模式群集或 Eon 模式子群集中的控制节点数。

5.3 - 更改控制节点的数量并重新对齐

在企业模式下,可以更改整个数据库群集中控制节点的数量,或者在 Eon 模式下可以更改子群集中控制节点的数量。您可以选择更改群集或子群集中控制节点的数量,以减少控制节点丢失对数据库的影响。请参阅计划大型群集了解有关何时应更改数据库中控制节点数量的详细信息。

可以通过调用元函数 SET_CONTROL_SET_SIZE 来更改控制节点的数量。如果在调用 SET_CONTROL_SET_SIZE 之前未启用大型群集,则该函数会在您的数据库中启用大型群集。有关详细信息,请参阅启用大型群集

在企业模式数据库中调用 SET_CONTROL_SET_SIZE 时,它会设置整个数据库群集中控制节点的数量。在 Eon 模式数据库中,除了提供控制节点的数量之外,还必须为 SET_CONTROL_SET_SIZE 提供一个子群集的名称。该函数设置该子群集的控制节点数。数据库群集中的其他子群集不受此调用的影响。

在更改 Eon 模式子群集中的控制节点数量之前,请验证该子群集是否正在运行。如果在子群集关闭时更改其控制节点的数量,可能会导致配置问题,从而阻止子群集中的节点启动。

重新对齐控制节点并重新加载 spread

调用 SET_CONTROL_SET_SIZE 函数后,必须执行多个其他步骤才能使新设置生效。

  1. 调用 REALIGN_CONTROL_NODES 函数。此函数告诉 Vertica 重新评估群集或子群集中控制节点及其依赖项的分配。在 Eon 模式数据库中调用此函数时,必须提供在其中更改控制节点设置的子群集的名称。

  2. 调用 RELOAD_SPREAD 函数。此函数更新配置文件中的控制节点分配信息,并触发 Spread 重新加载。

  3. 重新启动受控制节点变更影响的节点。在企业模式数据库中,必须重新启动整个数据库,才能确保所有节点都已更新配置信息。在 Eon 模式下,重新启动受变更影响的一个或多个子群集。如果您更改了关键子群集(例如唯一的 主子群集),则必须重新启动整个 Eon 模式数据库。

  4. 在企业模式数据库中,调用 START_REBALANCE_CLUSTER() 来重新平衡群集。此过程会转移伙伴实例投影分配以限制控制节点故障所带来的影响,从而提高数据库的容错能力。在 Eon 模式数据库中无需执行此步骤。

企业模式示例

以下示例将企业模式数据库中 8 个节点中的 4 个节点设置为控制节点。它查询 LARGE_CLUSTER_CONFIGURATION_STATUS 系统表,该表显示数据库中每个节点的控制节点分配情况。一开始,所有节点都是自己的控制节点。有关与大型群集关联的系统表的详细信息,请参阅监控大型群集

=> SELECT * FROM V_CATALOG.LARGE_CLUSTER_CONFIGURATION_STATUS;
    node_name     | spread_host_name | control_node_name
------------------+------------------+-------------------
 v_vmart_node0001 | v_vmart_node0001 | v_vmart_node0001
 v_vmart_node0002 | v_vmart_node0002 | v_vmart_node0002
 v_vmart_node0003 | v_vmart_node0003 | v_vmart_node0003
 v_vmart_node0004 | v_vmart_node0004 | v_vmart_node0004
 v_vmart_node0005 | v_vmart_node0005 | v_vmart_node0005
 v_vmart_node0006 | v_vmart_node0006 | v_vmart_node0006
 v_vmart_node0007 | v_vmart_node0007 | v_vmart_node0007
 v_vmart_node0008 | v_vmart_node0008 | v_vmart_node0008
(8 rows)

=> SELECT SET_CONTROL_SET_SIZE(4);
 SET_CONTROL_SET_SIZE
----------------------
 Control size set
(1 row)

=> SELECT REALIGN_CONTROL_NODES();
                       REALIGN_CONTROL_NODES
---------------------------------------------------------------
 The new control node assignments can be viewed in vs_nodes.
 Check vs_cluster_layout to see the proposed new layout. Reboot
 all the nodes and call rebalance_cluster now

(1 row)

=> SELECT RELOAD_SPREAD(true);
 RELOAD_SPREAD
---------------
 Reloaded
(1 row)

=> SELECT SHUTDOWN();

重新启动数据库后,最后一步是重新平衡群集并查询 LARGE_CLUSTER_CONFIGURATION_STATUS 表以查看当前的控制节点分配情况:

=> SELECT START_REBALANCE_CLUSTER();
 START_REBALANCE_CLUSTER
-------------------------
 REBALANCING
(1 row)

=> SELECT * FROM V_CATALOG.LARGE_CLUSTER_CONFIGURATION_STATUS;
    node_name     | spread_host_name | control_node_name
------------------+------------------+-------------------
 v_vmart_node0001 | v_vmart_node0001 | v_vmart_node0001
 v_vmart_node0002 | v_vmart_node0002 | v_vmart_node0002
 v_vmart_node0003 | v_vmart_node0003 | v_vmart_node0003
 v_vmart_node0004 | v_vmart_node0004 | v_vmart_node0004
 v_vmart_node0005 | v_vmart_node0001 | v_vmart_node0001
 v_vmart_node0006 | v_vmart_node0002 | v_vmart_node0002
 v_vmart_node0007 | v_vmart_node0003 | v_vmart_node0003
 v_vmart_node0008 | v_vmart_node0004 | v_vmart_node0004
(8 rows)

Eon 模式示例

以下示例在名为 analytics 的 8 节点辅助子群集中配置 4 个控制节点。主子群集未发生更改。此示例与前面的企业模式示例的主要区别在于:调用 SET_CONTROL_SET_SIZE 时需要指定子群集,不必重新启动整个数据库,也不必调用 START_REBALANCE_CLUSTER。

=>  SELECT * FROM V_CATALOG.LARGE_CLUSTER_CONFIGURATION_STATUS;
      node_name       |   spread_host_name   |  control_node_name
----------------------+----------------------+----------------------
 v_verticadb_node0001 | v_verticadb_node0001 | v_verticadb_node0001
 v_verticadb_node0002 | v_verticadb_node0002 | v_verticadb_node0002
 v_verticadb_node0003 | v_verticadb_node0003 | v_verticadb_node0003
 v_verticadb_node0004 | v_verticadb_node0004 | v_verticadb_node0004
 v_verticadb_node0005 | v_verticadb_node0005 | v_verticadb_node0005
 v_verticadb_node0006 | v_verticadb_node0006 | v_verticadb_node0006
 v_verticadb_node0007 | v_verticadb_node0007 | v_verticadb_node0007
 v_verticadb_node0008 | v_verticadb_node0008 | v_verticadb_node0008
 v_verticadb_node0009 | v_verticadb_node0009 | v_verticadb_node0009
 v_verticadb_node0010 | v_verticadb_node0010 | v_verticadb_node0010
 v_verticadb_node0011 | v_verticadb_node0011 | v_verticadb_node0011
(11 rows)


=> SELECT subcluster_name,node_name,is_primary,control_set_size FROM
   V_CATALOG.SUBCLUSTERS;
  subcluster_name   |      node_name       | is_primary | control_set_size
--------------------+----------------------+------------+------------------
 default_subcluster | v_verticadb_node0001 | t          |               -1
 default_subcluster | v_verticadb_node0002 | t          |               -1
 default_subcluster | v_verticadb_node0003 | t          |               -1
 analytics          | v_verticadb_node0004 | f          |               -1
 analytics          | v_verticadb_node0005 | f          |               -1
 analytics          | v_verticadb_node0006 | f          |               -1
 analytics          | v_verticadb_node0007 | f          |               -1
 analytics          | v_verticadb_node0008 | f          |               -1
 analytics          | v_verticadb_node0009 | f          |               -1
 analytics          | v_verticadb_node0010 | f          |               -1
 analytics          | v_verticadb_node0011 | f          |               -1
(11 rows)

=> SELECT SET_CONTROL_SET_SIZE('analytics',4);
 SET_CONTROL_SET_SIZE
----------------------
 Control size set
(1 row)

=> SELECT REALIGN_CONTROL_NODES('analytics');
                      REALIGN_CONTROL_NODES
-----------------------------------------------------------------------------
 The new control node assignments can be viewed in vs_nodes. Call
reload_spread(true). If the subcluster is critical, restart the database.
Otherwise, restart the subcluster

(1 row)

=> SELECT RELOAD_SPREAD(true);
 RELOAD_SPREAD
---------------
 Reloaded
(1 row)

此时,需要重新启动 analytics 子群集。可通过几个选项重新启动它。有关详细信息,请参阅启动和停止子群集。以下示例使用 admintools 命令行停止和启动子群集。

$ admintools -t stop_subcluster -d verticadb -c analytics -p password
*** Forcing subcluster shutdown ***
Verifying subcluster 'analytics'
    Node 'v_verticadb_node0004' will shutdown
    Node 'v_verticadb_node0005' will shutdown
    Node 'v_verticadb_node0006' will shutdown
    Node 'v_verticadb_node0007' will shutdown
    Node 'v_verticadb_node0008' will shutdown
    Node 'v_verticadb_node0009' will shutdown
    Node 'v_verticadb_node0010' will shutdown
    Node 'v_verticadb_node0011' will shutdown
Shutdown subcluster command successfully sent to the database

$ admintools -t restart_subcluster -d verticadb -c analytics -p password
*** Restarting subcluster for database verticadb ***
    Restarting host [10.11.12.19] with catalog [v_verticadb_node0004_catalog]
    Restarting host [10.11.12.196] with catalog [v_verticadb_node0005_catalog]
    Restarting host [10.11.12.51] with catalog [v_verticadb_node0006_catalog]
    Restarting host [10.11.12.236] with catalog [v_verticadb_node0007_catalog]
    Restarting host [10.11.12.103] with catalog [v_verticadb_node0008_catalog]
    Restarting host [10.11.12.185] with catalog [v_verticadb_node0009_catalog]
    Restarting host [10.11.12.80] with catalog [v_verticadb_node0010_catalog]
    Restarting host [10.11.12.47] with catalog [v_verticadb_node0011_catalog]
    Issuing multi-node restart
    Starting nodes:
        v_verticadb_node0004 (10.11.12.19) [CONTROL]
        v_verticadb_node0005 (10.11.12.196) [CONTROL]
        v_verticadb_node0006 (10.11.12.51) [CONTROL]
        v_verticadb_node0007 (10.11.12.236) [CONTROL]
        v_verticadb_node0008 (10.11.12.103)
        v_verticadb_node0009 (10.11.12.185)
        v_verticadb_node0010 (10.11.12.80)
        v_verticadb_node0011 (10.11.12.47)
    Starting Vertica on all nodes. Please wait, databases with a large catalog may take a while to initialize.
    Node Status: v_verticadb_node0004: (DOWN) v_verticadb_node0005: (DOWN) v_verticadb_node0006: (DOWN)
                     v_verticadb_node0007: (DOWN) v_verticadb_node0008: (DOWN) v_verticadb_node0009: (DOWN)
                     v_verticadb_node0010: (DOWN) v_verticadb_node0011: (DOWN)
    Node Status: v_verticadb_node0004: (DOWN) v_verticadb_node0005: (DOWN) v_verticadb_node0006: (DOWN)
                     v_verticadb_node0007: (DOWN) v_verticadb_node0008: (DOWN) v_verticadb_node0009: (DOWN)
                     v_verticadb_node0010: (DOWN) v_verticadb_node0011: (DOWN)
    Node Status: v_verticadb_node0004: (INITIALIZING) v_verticadb_node0005: (INITIALIZING) v_verticadb_node0006:
                     (INITIALIZING) v_verticadb_node0007: (INITIALIZING) v_verticadb_node0008: (INITIALIZING)
                     v_verticadb_node0009: (INITIALIZING) v_verticadb_node0010: (INITIALIZING) v_verticadb_node0011: (INITIALIZING)
    Node Status: v_verticadb_node0004: (UP) v_verticadb_node0005: (UP) v_verticadb_node0006: (UP)
                     v_verticadb_node0007: (UP) v_verticadb_node0008: (UP) v_verticadb_node0009: (UP)
                     v_verticadb_node0010: (UP) v_verticadb_node0011: (UP)
Syncing catalog on verticadb with 2000 attempts.

子群集重新启动后,可以查询系统表以查看控制节点配置:

=>  SELECT * FROM V_CATALOG.LARGE_CLUSTER_CONFIGURATION_STATUS;
      node_name       |   spread_host_name   |  control_node_name
----------------------+----------------------+----------------------
 v_verticadb_node0001 | v_verticadb_node0001 | v_verticadb_node0001
 v_verticadb_node0002 | v_verticadb_node0002 | v_verticadb_node0002
 v_verticadb_node0003 | v_verticadb_node0003 | v_verticadb_node0003
 v_verticadb_node0004 | v_verticadb_node0004 | v_verticadb_node0004
 v_verticadb_node0005 | v_verticadb_node0005 | v_verticadb_node0005
 v_verticadb_node0006 | v_verticadb_node0006 | v_verticadb_node0006
 v_verticadb_node0007 | v_verticadb_node0007 | v_verticadb_node0007
 v_verticadb_node0008 | v_verticadb_node0004 | v_verticadb_node0004
 v_verticadb_node0009 | v_verticadb_node0005 | v_verticadb_node0005
 v_verticadb_node0010 | v_verticadb_node0006 | v_verticadb_node0006
 v_verticadb_node0011 | v_verticadb_node0007 | v_verticadb_node0007
(11 rows)

=> SELECT subcluster_name,node_name,is_primary,control_set_size FROM subclusters;
  subcluster_name   |      node_name       | is_primary | control_set_size
--------------------+----------------------+------------+------------------
 default_subcluster | v_verticadb_node0001 | t          |               -1
 default_subcluster | v_verticadb_node0002 | t          |               -1
 default_subcluster | v_verticadb_node0003 | t          |               -1
 analytics          | v_verticadb_node0004 | f          |                4
 analytics          | v_verticadb_node0005 | f          |                4
 analytics          | v_verticadb_node0006 | f          |                4
 analytics          | v_verticadb_node0007 | f          |                4
 analytics          | v_verticadb_node0008 | f          |                4
 analytics          | v_verticadb_node0009 | f          |                4
 analytics          | v_verticadb_node0010 | f          |                4
 analytics          | v_verticadb_node0011 | f          |                4
(11 rows)

禁用大型群集

要禁用大型群集,请调用值为 -1 的 SET_CONTROL_SET_SIZE。该值是非大型群集数据库的默认值。它通知 Vertica 将所有节点设为控制节点。

在 Eon 模式数据库中,为了完全禁用大型群集,必须在每个具有设定控制节点数的子群集中将控制节点数设置为 -1。可以通过查询 V_CATALOG.SUBCLUSTERS 系统表的 CONTROL_SET_SIZE 列来查看哪些子群集具有设定数量的控制节点。

以下示例重置在前面的 Eon 模式示例中设置的控制节点数。

=> SELECT subcluster_name,node_name,is_primary,control_set_size FROM subclusters;
  subcluster_name   |      node_name       | is_primary | control_set_size
--------------------+----------------------+------------+------------------
 default_subcluster | v_verticadb_node0001 | t          |               -1
 default_subcluster | v_verticadb_node0002 | t          |               -1
 default_subcluster | v_verticadb_node0003 | t          |               -1
 analytics          | v_verticadb_node0004 | f          |                4
 analytics          | v_verticadb_node0005 | f          |                4
 analytics          | v_verticadb_node0006 | f          |                4
 analytics          | v_verticadb_node0007 | f          |                4
 analytics          | v_verticadb_node0008 | f          |                4
 analytics          | v_verticadb_node0009 | f          |                4
 analytics          | v_verticadb_node0010 | f          |                4
 analytics          | v_verticadb_node0011 | f          |                4
(11 rows)



=> SELECT SET_CONTROL_SET_SIZE('analytics',-1);
 SET_CONTROL_SET_SIZE
----------------------
 Control size set
(1 row)

=> SELECT REALIGN_CONTROL_NODES('analytics');
                       REALIGN_CONTROL_NODES
---------------------------------------------------------------------------------------
 The new control node assignments can be viewed in vs_nodes. Call reload_spread(true).
 If the subcluster is critical, restart the database. Otherwise, restart the subcluster

(1 row)

=> SELECT RELOAD_SPREAD(true);
 RELOAD_SPREAD
---------------
 Reloaded
(1 row)

-- After restarting the analytics subcluster...

=> SELECT * FROM V_CATALOG.LARGE_CLUSTER_CONFIGURATION_STATUS;
      node_name       |   spread_host_name   |  control_node_name
----------------------+----------------------+----------------------
 v_verticadb_node0001 | v_verticadb_node0001 | v_verticadb_node0001
 v_verticadb_node0002 | v_verticadb_node0002 | v_verticadb_node0002
 v_verticadb_node0003 | v_verticadb_node0003 | v_verticadb_node0003
 v_verticadb_node0004 | v_verticadb_node0004 | v_verticadb_node0004
 v_verticadb_node0005 | v_verticadb_node0005 | v_verticadb_node0005
 v_verticadb_node0006 | v_verticadb_node0006 | v_verticadb_node0006
 v_verticadb_node0007 | v_verticadb_node0007 | v_verticadb_node0007
 v_verticadb_node0008 | v_verticadb_node0008 | v_verticadb_node0008
 v_verticadb_node0009 | v_verticadb_node0009 | v_verticadb_node0009
 v_verticadb_node0010 | v_verticadb_node0010 | v_verticadb_node0010
 v_verticadb_node0011 | v_verticadb_node0011 | v_verticadb_node0011
(11 rows)

=> SELECT subcluster_name,node_name,is_primary,control_set_size FROM subclusters;
  subcluster_name   |      node_name       | is_primary | control_set_size
--------------------+----------------------+------------+------------------
 default_subcluster | v_verticadb_node0001 | t          |               -1
 default_subcluster | v_verticadb_node0002 | t          |               -1
 default_subcluster | v_verticadb_node0003 | t          |               -1
 analytics          | v_verticadb_node0004 | f          |               -1
 analytics          | v_verticadb_node0005 | f          |               -1
 analytics          | v_verticadb_node0006 | f          |               -1
 analytics          | v_verticadb_node0007 | f          |               -1
 analytics          | v_verticadb_node0008 | f          |               -1
 analytics          | v_verticadb_node0009 | f          |               -1
 analytics          | v_verticadb_node0010 | f          |               -1
 analytics          | v_verticadb_node0011 | f          |               -1
(11 rows)

5.4 - 监控大型群集

通过查询以下系统表来监控大型群集的特征:

您可能还要查询以下系统表:

6 - 容错组

容错组允许您为物理群集布局配置企业模式数据库。共享您的群集拓扑让您可以使用 Terrace 路由来减少大型查询的缓冲区要求。它还有助于最大限度地降低环境中固有的相关故障所带来的风险,这些故障通常由共享资源引起。

Vertica 将在大型群集排列中的 控制节点(运行 spread 的服务器)周围自动创建容错组,将共享控制节点的节点放在同一容错组中。自动容错组和用户定义的容错组不包括暂时节点,因为类似的节点不容纳数据。

如果要执行以下操作,请考虑定义您自己的特定于群集物理布局的容错组:

  • 使用 Terrace 路由来减少大型查询的缓冲区要求。

  • 降低相关故障的风险。例如,通过定义机架布局,Vertica 对故障的容忍度更高。

  • 影响控制节点在群集中的放置。

Vertica 支持使用具有不同形状和大小的复杂、层次结构容错组。数据库平台提供容错组脚本(DDL 生成器)、SQL 语句、系统表和其他监控工具。

有关包含群集拓扑示例的容错组的概述,请参阅使用容错组的高可用性

6.1 - 关于容错组脚本

为了帮助您定义群集的容错组,Vertica 在 /opt/vertica/scripts 目录中提供了一个名为 fault_group_ddl_generator.py 的脚本。您需要利用此脚本生成的 SQL 语句来创建容错组。

fault_group_ddl_generator.py 脚本不会为您创建容错组,但您可以将输出复制到文件中。然后,当您运行帮助脚本时,可以使用 \ivsql–f 命令来将群集拓扑传递到 Vertica。

容错组脚本采用以下实参:

  • 数据库名称

  • 容错组输入文件名

例如:

$ python /opt/vertica/scripts/fault_group_ddl_generator.py VMartdb fault_grp_input.out

另请参阅

6.2 - 创建容错组输入文件

使用文本编辑器,为目标群集创建容错组输入文件。

以下示例显示如何为具有 8 个机架且每个机架上有 8 个节点的群集创建容错组输入文件,群集中总共有 64 个节点。

  1. 在文件的第一行,列出父(顶级)容错组,以空格分隔。

    rack1 rack2 rack3 rack4 rack5 rack6 rack7 rack8
    
  2. 在随后的行中,列出父容错组,后跟等号 (=)。在等号之后,列出以空格分隔的节点或容错组。

    <parent> = <child_1> <child_2> <child_n...>
    

    如:

    rack1 = v_vmart_node0001 v_vmart_node0002 v_vmart_node0003 v_vmart_node0004
    rack2 = v_vmart_node0005 v_vmart_node0006 v_vmart_node0007 v_vmart_node0008
    rack3 = v_vmart_node0009 v_vmart_node0010 v_vmart_node0011 v_vmart_node0012
    rack4 = v_vmart_node0013 v_vmart_node0014 v_vmart_node0015 v_vmart_node0016
    rack5 = v_vmart_node0017 v_vmart_node0018 v_vmart_node0019 v_vmart_node0020
    rack6 = v_vmart_node0021 v_vmart_node0022 v_vmart_node0023 v_vmart_node0024
    rack7 = v_vmart_node0025 v_vmart_node0026 v_vmart_node0027 v_vmart_node0028
    rack8 = v_vmart_node0029 v_vmart_node0030 v_vmart_node0031 v_vmart_node0032
    

    在父容错组的第一行之后,编写容错组描述的顺序并不重要。您在此文件中定义的所有容错组都必须引用父容错组。您可以直接指示父组,也可以通过指定作为父容错组子级的容错组的子级来指示。

    如:

    rack1 rack2 rack3 rack4 rack5 rack6 rack7 rack8
    rack1 = v_vmart_node0001 v_vmart_node0002 v_vmart_node0003 v_vmart_node0004
    rack2 = v_vmart_node0005 v_vmart_node0006 v_vmart_node0007 v_vmart_node0008
    rack3 = v_vmart_node0009 v_vmart_node0010 v_vmart_node0011 v_vmart_node0012
    rack4 = v_vmart_node0013 v_vmart_node0014 v_vmart_node0015 v_vmart_node0016
    rack5 = v_vmart_node0017 v_vmart_node0018 v_vmart_node0019 v_vmart_node0020
    rack6 = v_vmart_node0021 v_vmart_node0022 v_vmart_node0023 v_vmart_node0024
    rack7 = v_vmart_node0025 v_vmart_node0026 v_vmart_node0027 v_vmart_node0028
    rack8 = v_vmart_node0029 v_vmart_node0030 v_vmart_node0031 v_vmart_node0032
    

创建容错组输入文件后,即可运行 fault_group_ddl_generator.py。您需要利用此脚本生成的 DDL 语句来在 Vertica 中创建容错组。

如果您的 Vertica 数据库共置于一个 Hadoop 群集上,并且该群集使用多个机架,您可以使用容错组来提高性能。请参阅配置机架位置

另请参阅

创建容错组

6.3 - 创建容错组

在定义容错组时,Vertica 会将数据段分发到整个群集中。这使得群集能够了解群集拓扑,以便它可以容忍环境中固有的相关故障,例如机架故障。有关概览,请参阅容错组的高可用性

先决条件

要定义容错组,您必须具有:

运行容错组脚本

  1. 以数据库管理员身份运行 fault_group_ddl_generator.py 脚本:

    python /opt/vertica/scripts/fault_group_ddl_generator.py databasename fault-group-inputfile > sql‑filename
    

    例如,以下命令将 Python 脚本输出写入 SQL 文件 fault_group_ddl.sql 中。

    $ python /opt/vertica/scripts/fault_group_ddl_generator.py
        VMart fault_groups_VMart.out > fault_group_ddl.sql
    

    在脚本返回后,可以运行 SQL 文件,而不是单独运行多个 DDL 语句。

  2. 使用 vsql,运行 fault_group_ddl.sql 中的 DDL 语句或使用 vsql 执行该文件中的命令。

    => \i fault_group_ddl.sql
    
  3. 如果启用了大型群集,请使用 REALIGN_CONTROL_NODES 重新对齐控制节点。否则,跳过此步骤。

    => SELECT REALIGN_CONTROL_NODES();
    
  4. 通过调用 RELOAD_SPREAD 将群集更改保存到 Spread 配置文件:

    => SELECT RELOAD_SPREAD(true);
    
  5. 使用 管理工具 (Administration Tools) 重新启动数据库。

  6. 通过调用 REBALANCE_CLUSTER 将更改保存到群集的数据布局:

    => SELECT REBALANCE_CLUSTER();
    

另请参阅

6.4 - 监控容错组

您可以通过查询 Vertica 系统表或登录到管理控制台界面监控容错组。

使用系统表监控容错组

使用以下系统表查看与容错组和群集缺陷有关的信息,例如在不关闭数据库的情况下群集无法丢失的节点:

  • V_CATALOG.FAULT_GROUPS:查看群集中所有容错组的层次结构。

  • V_CATALOG.CLUSTER_LAYOUT:观察参与数据业务的节点的排列以及影响这些节点的容错组。临时节点不显示在群集布局环中,因为它们没有任何数据。

使用管理控制台监控容错组

MC 管理员可以通过以下步骤监控和突出显示感兴趣的容错组:

  1. 单击要监控的正在运行的数据库,然后在任务栏中单击管理 (Manage)

  2. 打开容错组视图 (Fault Group View) 菜单,然后选择要查看的容错组。

  3. (可选)隐藏不在选定容错组中的节点以关注感兴趣的容错组。

分配给容错组的节点每个都在节点图标左上角有一个彩色气泡。每个容错组都有一个独特的颜色。如果容错组的数量超过可用的颜色数量,MC 将循环使用先前使用的颜色。

由于 Vertica 支持不同形状和大小的复杂分层容错组,因此 MC 将多个容错组的参与显示为一堆不同颜色的气泡。气泡越高,代表容错组的层次越低,这意味着气泡更接近父容错组(而不是子容错组或孙容错组)。

有关容错组层次结构的详细信息,请参阅容错组的高可用性

6.5 - 删除容错组

从群集中移除容错组时,请注意删除操作会移除指定的容错组及其子容错组。Vertica 将所有节点都放在删除的容错组的父代下面。要查看群集中的当前容错组层次结构,请查询 FAULT_GROUPS 系统表。

删除容错组

使用 DROP FAULT GROUP 语句从群集中移除容错组。以下示例显示了如何删除 group2 容错组:

=> DROP FAULT GROUP group2;
DROP FAULT GROUP

删除所有的容错组

使用 ALTER DATABASE 语句从指定数据库群集中删除所有容错组以及任何子容错组。

以下命令将从当前数据库中删除所有容错组。

=> ALTER DATABASE DEFAULT DROP ALL FAULT GROUP;
ALTER DATABASE

将节点重新添加到容错组中

要将节点重新添加到容错组中,必须手动将其重新分配到新容错组或现有容错组。要执行此操作,请使用 CREATE FAULT GROUPALTER FAULT GROUP..ADD NODE 语句。

另请参阅

7 - Terrace 路由

Terrace 路由可以显著减少大型群集数据库上的消息缓冲。以下几部分介绍 Vertica 如何在企业模式数据库和 Eon 模式数据库上实现 Terrace 路由。

企业模式下的 Terrace 路由

企业模式数据库上的 Terrace 路由是通过用来定义基于机架的拓扑的容错组实现的。在禁用 Terrace 路由的大型群集中,Vertica 群集中的节点形成一个完全互连的网络,其中每个非依赖(控制)节点通过与所有其他非依赖节点(无论是在其自己的机架/容错组内部还是外部)的连接在数据库群集中发送消息:

在这种情况下,大型 Vertica 群集可能需要每个节点上有许多连接,其中每个连接都会产生自己的网络缓冲要求。每个节点所需的缓冲区总数按如下公式计算:

(numRacks * numRackNodes) - 1

在如上所示每个机架 4 个节点的双机架群集中,求解结果为每个节点 7 个缓冲区。

启用 Terrace 路由后,可以显著减少大型群集网络缓冲。机架/容错组中的每第 n 个节点与所有其他容错组的相应第 n 个节点配对。例如,在启用 Terrace 路由时,同一个双机架群集中的消息传递现在按如下方式实现:

因此,来自机架 A (A2) 上节点 2 的消息将发送到机架 A 上的所有其他节点;然后,每个机架 A 节点将消息传送到机架 B 上的相应节点 — A1 到 B1,A2 到 B2,依此类推。

在启用 Terrace 路由时,给定机架的每个节点都避免了为所有其他节点维护消息缓冲区的开销。相反,每个节点只负责维护与以下节点的连接:

  • 同一机架的所有其他节点 ( numRackNodes - 1)

  • 每个其他机架上的一个节点 ( numRacks - 1)

因此,每个节点所需的消息缓冲区总数按如下公式计算:

(numRackNodes-1) + (numRacks-1)

在如上所示具有 4 个节点的双机架群集中,求解结果为每个节点 4 个缓冲区。

Terrace 路由以时间(机架内跃点数)换取空间(网络消息缓冲区数)。通过向群集中添加额外的机架和节点来扩展群集时,支持这种权衡的论点变得越来越有说服力:

在这个每个机架 4 个节点的三机架群集中,如果没有 Terrace 路由,每个节点所需的缓冲区数量为 11。如果有 Terrace 路由,每个节点的缓冲区数量为 5。通过向群集中添加机架和向每个机架中添加节点来扩展群集时,缓冲区要求之间的差异也会扩大。例如,给定一个每个机架 16 个节点的六机架群集,如果没有 Terrace 路由,每个节点所需的缓冲区数量为 95;如果有 Terrace 路由,则为 20。

启用 Terrace 路由

Terrace 路由取决于容错组定义,这些定义描述围绕机架及其成员节点组织的群集网络拓扑。如前所述,启用 Terrace 路由时,Vertica 首先在机架/容错组内分发数据;然后使用第 n 个节点到第n 个节点的映射将此数据转发到数据库群集中的所有其他机架。

您可以通过 TerraceRoutingFactor 配置参数为任何实现基于机架的容错组的企业模式大型群集启用(或禁用)Terrace 路由。要启用 Terrace 路由,请按如下方式设置此参数:

其中:

  • numRackNodes:机架中的节点数

  • numRacks:群集中的机架数

例如:

默认情况下,TerraceRoutingFactor 设置为 2,这通常可以确保为任何实现基于机架的容错组的企业模式大型群集启用 Terrace 路由。当群集包含 64 个或更多节点时,或者如果查询需要过多的缓冲空间,Vertica 建议启用 Terrace 路由。

要禁用 Terrace 路由,请将 TerraceRoutingFactor 设置为一个大整数,例如 1000:

=> ALTER DATABASE DEFAULT SET TerraceRoutingFactor = 1000;

Eon 模式下的 Terrace 路由

与企业模式一样,Terrace 路由在 Eon 模式数据库上默认处于启用状态,并通过容错组实现。但是,您不会为 Eon 模式数据库创建容错组。相反,Vertica 会自动在大型群集数据库上创建容错组;这些容错组围绕每个子群集的控制节点及其依赖项进行配置。这些容错组由 Vertica 内部管理,无法供用户访问。

8 - 弹性群集

您可以根据数据库需要,扩大或缩减群集。最常见的情况是向数据库群集添加节点以容纳更多数据,并提供更好的查询性能。但是,如果发现群集过度配置或需要将硬件用于其他用途,您也可以缩减群集。

您可以通过添加或移除节点来对群集进行扩展或缩减。添加或移除节点时无需关闭或重新启动数据库。添加节点后或移除节点前,Vertica 会开始重新平衡过程,即在群集中移动数据,以填充新节点或将数据从要从数据库移除的节点中移出。在此过程中,数据也可能在未在添加或移除的节点之间交换,以此来维持强大的智能 K-safety。如果 Vertica 确定由于磁盘空间不足,数据不能在一次迭代中重新平衡,则会在多次迭代中完成重新平衡。

为确保在扩展或缩减群集时更高效地实现数据重新平衡,Vertica 会在每个节点本地对数据存储进行分段,以便它能够轻松移动到群集中的其他节点。将新节点添加到群集时,群集中的现有节点会放弃某些数据段以填充新节点并交换数据段,从而将任何一个节点所依赖的节点数量保持为最低。此策略会将节点出现故障时成为关键节点的节点数量保持为最低(请参阅 关键节点/企业模式数据库中的 K-safety)。从群集中移除节点时,该节点的所有存储容器都会移动到群集中的其他节点(这时也会重新迁移数据段来最大限度减少节点出现故障时成为关键节点的节点数量)。这种将数据拆分为便于迁移的数据段的方式称为弹性群集,因为它有利于轻松扩展或缩减群集。

弹性群集的替代方案是对投影中的所有数据进行重新分段,并在添加或移除节点时将这些数据均匀分布到数据库中的所有节点。此方法需要处理的工作量更多,占用的磁盘空间也更多,因为它实质上需要转储并重新加载所有投影中的所有数据。

弹性群集伸缩系数

在新安装中,每个节点都有一个指定本地数据段数量的伸缩系数(请参阅伸缩系数)。重新平衡可以通过重新迁移本地数据段来高效地重新分布数据,前提是在添加或移除节点后,群集中具有足够的本地数据段来均匀地重新分布数据(由 MAXIMUM_SKEW_PERCENT 确定)。例如,如果伸缩系数 = 8,并且最初有 5 个节点,那么整个群集中总共有 40 个本地数据段。

如果添加两个额外的节点(7 个节点),Vertica 会在 2 个节点上重新定位 5 个本地分段,在 5 个节点上重新定位 6 个此类分段,从而导致大约 16.7% 的偏差。只有当得到的偏差率低于允许的阈值(这由 MAXIMUM_SKEW_PERCENT 确定)时,重新平衡机制才重新定位本地分段。否则,重新平衡机制会在这 7 个节点上均匀分布分段空间(进而均匀分布数据,如果数据在此空间中均匀分布的话),并为每个节点划定新的本地数据段边界,确保每个节点再次拥有 8 个本地数据段。

启用弹性群集

使用 ENABLE_ELASTIC_CLUSTER 启用弹性群集。查询 ELASTIC_CLUSTER 系统表来验证弹性群集是否已启用:

=> SELECT is_enabled FROM ELASTIC_CLUSTER;
 is_enabled
------------
 t
(1 row)

8.1 - 伸缩系数

为避免 ROS 容器数量增加,请不要启用局部分段,也不要更改伸缩系数。

8.2 - 查看伸缩系数设置

要查看伸缩系数,请查询 ELASTIC_CLUSTER 表:

=> SELECT scaling_factor FROM ELASTIC_CLUSTER;
scaling_factor
---------------
            4
(1 row)

=> SELECT SET_SCALING_FACTOR(6);
 SET_SCALING_FACTOR
--------------------
 SET
(1 row)

=> SELECT scaling_factor FROM ELASTIC_CLUSTER;
 scaling_factor
---------------
             6
(1 row)

8.3 - 设置伸缩系数

比例因子决定了在启用局部分段时,Vertica 在重新平衡期间用于跨数据库存储每个投影的存储容器的数量。在设置比例因子时,请遵循以下准则:

  • 存储容器的数量应大于或等于分区数量与本地分段数量的积:

    num‑storage‑containers >= ( num‑partitions * num‑local‑segments )

  • 若将比例因子设置得足够高,以便重新平衡可以传输本地分段以满足偏移阈值,但将值设置得很小,以便存储容器数量将不会产生过多的 ROS 容器,并导致 ROS 推回)。ROS 容器的最大数量(默认为 1024)由配置参数 ContainersPerProjectionLimit 设置。

使用 SET_SCALING_FACTOR 函数可以更改数据库的伸缩系数。伸缩系数可以为 1 到 32 之间的整数。

=> SELECT SET_SCALING_FACTOR(12);
SET_SCALING_FACTOR
--------------------
 SET
(1 row)

8.4 - 局部数据分段

默认情况下,只有当 Vertica 重新平衡数据库时,伸缩系数才会发挥作用。在重新平衡期间,节点会将其包含的投影分段分解到多个存储容器中,以便它们能够快速移动到其他节点。

与对整个投影进行重新分段相比,此过程更加高效(特别是,它需要更少的可用磁盘空间),但是仍然需要较大开销,因为必须将存储容器分离到多个局部分段中,然后将其中一些局部分段传输到其他节点。如果您很少从数据库中添加或移除节点,此开销并不算是一个问题。

但是,如果您的数据库增长快速并且持续处于繁忙状态,则可能会发现添加节点的过程将变得具有破坏性。这种情况下,您可以启用局部分段,这会告诉 Vertica 始终根据伸缩系数对其数据进行分段,因此始终将数据分解到多个易于移动的容器中。通过这种方式对数据进行分段会显著提高添加或删除节点的速度,因为数据始终处于一种可以快速重新定位到另一个节点的状态。Vertica 在添加或移除节点后执行的重新平衡过程只需要决定要重新定位的存储容器即可,无须首先将数据分解到存储容器中。

局部数据分段会增加存储在每个节点上的存储容器数量。除非表包含许多分区,否则这算不上一个问题。(例如,如果表按天进行分区并包含一个或多个年份。)如果启用局部数据分段,则会将其中每个表分区分解到多个局部存储分段中,这可能会生成大量文件,进而可能导致 ROS“推回”。请先考虑表分区以及启用局部数据分段可能造成的影响,然后再启用此功能。

8.4.1 - 启用和禁用局部分段

要启用局部分段,请使用 ENABLE_LOCAL_SEGMENTS 函数。要禁用局部分段,请使用 DISABLE_LOCAL_SEGMENTATION 函数:

=> SELECT ENABLE_LOCAL_SEGMENTS();
ENABLE_LOCAL_SEGMENTS
-----------------------
 ENABLED
(1 row)


=> SELECT is_local_segment_enabled FROM elastic_cluster;
 is_enabled
------------
 t
(1 row)

=> SELECT DISABLE_LOCAL_SEGMENTS();
 DISABLE_LOCAL_SEGMENTS
------------------------
 DISABLED
(1 row)

=> SELECT is_local_segment_enabled FROM ELASTIC_CLUSTER;
 is_enabled
------------
 f
(1 row)

8.5 - 弹性群集最佳实践

下面是一些关于局部分段的最佳实践。

何时启用局部数据分段

局部数据分段 可以显著加快调整群集大小的过程。在以下情况下,应当启用局部数据分段:

  • 数据库不包含具有数百个分区的表。

  • 数据库群集中的节点数为 2 的幂次方。

  • 计划扩大或缩小群集大小。

局部分段可能会导致具有数百个分区的表或节点数不是 2 的幂次方的群集的存储容器数量过多。如果您的数据库具有这两个特征,在启用局部分段时请小心。

9 - 添加节点

在 Vertica 安装中添加一个或多个节点的原因有许多:

  • **提高系统性能。**在查询负载很高或加载延迟时添加额外的节点,或者在不向现有节点添加存储位置的情况下增加磁盘空间。
  • 将数据库设置为 K-safe ( K-safety=1) 或将 K-safety 增加至 2。有关详细信息,请参阅故障恢复

  • **交换节点进行维护。**使用备用计算机临时接管需要维护的现有节点的活动。需要维护的节点是事先已知的,因此将此节点从服务中暂时删除时,群集并不会轻易受到其他节点故障的影响。

  • **替换节点。**永久性添加节点,以移除过时或有故障的硬件。

添加节点时,包括以下常规任务:

  1. 备份数据库

    Vertica 强烈建议在执行这项重大操作前先备份数据库,因为在操作过程中需要创建新投影,刷新投影,然后删除旧投影。有关详细信息,请参阅备份和还原数据库

    迁移投影设计以包括其他节点的过程可能需要一些时间;但在此期间,数据库上的所有用户活动都可以使用旧投影正常进行。

  2. 配置要添加至群集的主机。

    请参阅在安装 Vertica 之前。此外,还需要编辑群集中所有现有节点上的主机配置文件,以确保这些节点可以解析新的主机。

  3. 向群集添加一个或多个主机

  4. 将已添加至群集的主机添加到数据库中(第 3 步)。

向数据库中添加节点之后,Vertica 会自动将更新后的配置文件分布到群集中的其余节点,并启动在群集中重新平衡数据的过程。有关详细信息,请参阅在节点之间重新平衡数据

9.1 - 向群集中添加主机

备份数据库并配置要添加到群集的主机后,此时可以使用 update_vertica 脚本将主机添加到群集。

您不能使用 MC 向内部部署环境中的群集中添加主机。但是,在向群集中添加主机后,MC 确实允许您将主机作为节点添加到数据库中。

先决条件和限制

如果将 Vertica 安装在一个节点上,但没有指定 IP 地址或主机名(使用了 localhost),则无法扩展群集。您必须重新安装 Vertica,并指定 IP 地址或主机名。

添加主机的步骤

在一个现有群集主机中,运行至少带有 \--add-hosts host(s) 参数(其中 host(s) 是要添加到群集的系统的主机名或 IP 地址)和 --rpm--deb 参数的 update_vertica 脚本。

# /opt/vertica/sbin/update_vertica --add-hosts host(s) --rpm package

update_vertica* * 脚本使用与 install_vertica 相同的所有选项,并执行以下操作:

  • 在新主机中,安装 Vertica RPM。

  • 执行安装后检查,包括 RPM 版本和 N 向网络连接检查。

  • 将 spread 更改为包含更大的群集。

  • 配置管理工具以处理更大的群集。

重要提示:

  • 节点达到或超过 50 个时,请考虑使用 --large-cluster

  • 使用要添加到群集的系统的主机名或 IP 地址可以指定主机。但是,在内部,Vertica 将所有主机地址都存储为 IP 地址。

  • 如果指定了一个以上的主机,请勿在随 --add-hosts 提供的主机名/IP 地址列表中使用空格。

  • 如果使用 --rpm/--deb 指定包,并且此包比当前在现有群集中安装的包要新,则 Vertica 会在安装新添加的主机之前,首先将新包安装在现有群集主机中。

  • 参照最初安装群集时使用的参数,为数据库管理员用户名、密码和目录路径使用相同的命令行参数。或者,您可以创建一个属性文件保存安装期间的参数,然后在后续安装和更新时重复使用该属性文件。请参阅静默安装 Vertica

  • 如果使用 sudo 安装,数据库管理员用户 (dbadmin) 必须已存在于要添加的主机中,并且必须配置与现有主机相同的密码和主目录路径。如有必要,Vertica 会从现有主机建立与新主机的免密码 SSH。

  • 如果最初使用 --point-to-point 选项将 spread 配置为在子网中节点之间使用直接点对点通信,则无论何时运行 install_verticaupdate_vertica,均应使用 --point-to-point 选项。否则,群集的配置将恢复为默认设置 (broadcast),这会影响将来的数据库。

  • 点对点通信和广播流量支持的 spread 守护程序的最大数量为 80 个。使用大型群集模式时,节点数量可能会超过 80 个,这时将无法在每个节点上安装一个 spread 守护程序。

示例

--add-hosts host01 --rpm
--add-hosts 192.168.233.101
--add-hosts host02,host03

9.2 - 向数据库中添加节点

向群集中添加一个或多个主机后,可以使用以下选项之一将它们作为节点添加到数据库:

  • admintools 命令行,以确保按特定顺序添加节点

  • 管理工具

  • 管理控制台

命令行

使用 admintools db_add_node 工具,可以控制将节点添加到数据库群集的顺序。它使用 ‑s‑‑hosts 选项指定新节点的主机,这些选项采用逗号分隔的实参列表。Vertica 按列表指定的顺序添加新节点。例如,以下命令添加三个节点:

$ admintools ‑t db_add_node \
      -d VMart \
      -p 'password' \
      -s 192.0.2.1,192.0.2.2,192.0.2.3

管理工具

您可以按如下方式,使用管理工具向数据库中添加节点:

  1. 打开管理工具。

  2. 主菜单 (Main Menu) 上,选择查看数据库群集状态 (View Database Cluster State) 以验证数据库是否正在运行。如果未运行,请将其启动。

  3. 主菜单 (Main Menu) 中,选择高级菜单 (Advanced Menu),然后单击确定 (OK)

  4. 高级菜单 (Advanced Menu) 中,选择群集管理 (Cluster Management),然后单击确定 (OK)

  5. 群集管理 (Cluster Management) 菜单中,选择添加主机 (Add Host(s)),然后单击 确定 (OK)

  6. 选择要将一个或多个主机添加到的数据库,然后选择确定 (OK)

    此时会显示未使用主机列表。

  7. 选择要添加到数据库的主机,然后单击确定 (OK)

  8. 显示提示时,单击是 (Yes) 以确认要添加的主机。

  9. 显示提示时,输入数据库的密码,然后选择确定 (OK)

  10. 显示主机已成功添加的提示时,选择确定 (OK)

  11. 此时,Vertica 自动启动重新平衡过程,以便为新节点填充数据。显示提示时,输入 Database Designer 可用于重新平衡数据库中数据的临时目录的路径,然后选择确定 (OK)

  12. 按 Enter 接受默认的 K-Safety 值,或为数据库输入更大的值,然后选择确定 (OK)

  13. 选择是立即重新平衡数据库还是稍后重新平衡。在这两种情况下,Vertica 都会创建一个脚本,您可以随时使用它来重新平衡。

    查看重新平衡过程的摘要,并选择继续 (Proceed)

    如果选择自动重新平衡,则会运行重新平衡过程。如果选择创建脚本,则会生成和保存脚本。无论哪种情况,您都会看到一个成功屏幕。

  14. 选择确定 (OK) 以完成“添加节点”过程。

管理控制台

要使用 MC 向 Eon 模式数据库中添加节点,请参阅将节点添加到云上正在运行的群集

要使用 MC 向企业模式数据库中添加节点,请参阅 向群集中添加主机

10 - 移除节点

永久删除节点虽然不像添加节点那样常见,但如果主机系统过时或过度配置,它将非常有用。

10.1 - 自动逐出运行状况不佳的节点

为了管理群集中节点的运行状况,Vertica 通过发送和接收检测信号来定期执行运行状况检查。在运行状况检查期间,群集中的每个节点都会验证对其编录、编录磁盘和本地存储位置('TEMP、DATA'、TEMP、DATA 和 DEPOT)的读写访问权限。验证后,节点发送检测信号。如果一个节点在五个间隔后未能发送检测信号(五次运行状况检查失败),则会将该节点从群集中逐出。

您可以使用 DatabaseHeartBeatInterval 参数控制相邻两次运行状况检查之间的时间。默认情况下,DatabaseHeartBeatInterval 设置为 120,即允许在无检测信号的情况下经过五个 120 秒的间隔。

逐出前允许的时间长度为:

TOT = DHBI * 5

其中,TOT 是在逐出之前所允许的无检测信号总时间(以秒为单位),DHBI 等于 DatabaseHeartBeatInterval 的值。

如果您设置的 DatabaseHeartBeatInterval 值过低,则可能导致节点在出现短暂的运行状况问题时被逐出。有时,此类过早逐出会降低 Vertica 数据库的可用性和性能。

另请参阅

常规参数中的 DatabaseHeartbeatInterval 常规参数

10.2 - 降低 K‑Safety 以启用节点移除

K-safety 级别为 1 的数据库至少需要三个节点才能运行,K-safety 级别为 2 的数据库至少需要 5 个节点才能运行。您可以按照如下方式检查群集的当前 K-safety 级别:

=> SELECT current_fault_tolerance FROM system;
 current_fault_tolerance
-------------------------
                       1
(1 row)

要从具有 K-safety 所要求的最少节点数的群集中移除节点,请首先使用 MARK_DESIGN_KSAFE 降低 K-safety 级别。

  1. 使用管理工具vsql 连接到数据库。

  2. 调用 MARK_DESIGN_KSAFE 函数:

    SELECT MARK_DESIGN_KSAFE(n);
    

    其中 n 是数据库的新 K-safety 级别。

10.3 - 从数据库中移除节点

只要有足够的剩余节点来满足 K-Safety 要求,便可以从数据库中移除节点。不能删除对 K-safety 至关重要的节点。请参阅降低 K‑Safety 以启用节点移除

可使用以下方法之一从数据库中移除节点:

  • 管理控制台界面

  • 管理工具

先决条件
在从数据库中移除节点之前,请验证数据库是否符合以下要求:

  • 它正在运行。

  • 它已备份

  • 该数据库具有符合 K-safety 所需的最少节点数。如有必要,请暂时降低数据库的 K‑safety 级别

  • 数据库中的所有节点都必须处于正常运行状态或处于活动备用状态。如果您在数据库节点关闭时尝试移除节点,Vertica 会报告错误“所有节点都必须处于 UP 或 STANDBY 才能删除节点 (All nodes must be UP or STANDBY before dropping a node)”。即使尝试移除处于关闭状态的节点,也会收到此错误。

管理控制台

使用管理控制台将节点从其管理页面中移除:

按照如下方式移除数据库节点:

  1. 选择要移除的节点。

  2. 在节点列表中单击移除节点 (Remove node)

存在以下限制:

  • 只能移除属于数据库群集的节点。

  • 不能移除处于 DOWN 状态的节点。

移除节点时,它的状态会更改为 STANDBY。可稍后将处于 STANDBY 状态的节点添加回数据库。

管理工具

要使用管理工具从数据库中移除未使用的主机:

  1. 打开管理工具。有关访问管理工具的信息,请参阅使用管理工具

  2. 在“主菜单 (Main Menu)”上,选择“查看数据库群集状态 (View Database Cluster State)”以验证数据库是否正在运行。如果数据库未在运行,请启动该数据库。

  3. 从“主菜单 (Main Menu)”中,选择“高级菜单 (Advanced Menu)”,然后选择“确定 (OK)”。

  4. 在“高级菜单 (Advanced Menu)”中,选择“群集管理 (Cluster Management)”,然后选择“确定 (OK)”。

  5. 在“群集管理 (Cluster Management)”菜单中,选择“从数据库中移除主机 (Remove Host(s) from Database)”,然后选择“确定 (OK)”。

  6. 当出现警告,提示您必须重新设计数据库并创建不包括待删除主机的投影时,选择“是 (Yes)”。

  7. 选择要从中移除主机的数据库,然后选择“确定 (OK)”。

    此时将出现当前处于活动状态的主机列表。

  8. 选择要从数据库中移除的主机,然后选择“确定 (OK)”。

  9. 出现提示时,选择“确定 (OK)”以确认您希望移除这些主机。

  10. 收到主机已成功移除的通知时,选择“确定 (OK)”。

  11. 如果从大型群集 (Large Cluster) 配置中移除了某个主机,则打开 vsql 会话并运行 realign_control_nodes:

    SELECT realign_control_nodes();
    

    有关更多详细信息,请参阅 REALIGN_CONTROL_NODES

  12. 如果该主机未被群集中的任何其他数据库使用,您可以从群集中移除该主机。请参阅从群集中移除主机

10.4 - 从群集中移除主机

如果从数据库中移除的某个主机未被任何其他数据库使用,您可以使用 update_vertica 将该主机从群集中移除。在此操作期间,可让数据库一直运行。

当您使用 update_vertica 减小群集的大小时,它还会执行以下任务:

  • 将 spread 修改为匹配小型群集。

  • 管理工具配置为处理小型群集。

在其中一台 Vertica 群集主机上,运行带 –-remove-hosts 开关的 update_vertica。此开关采用要从群集中移除的主机的逗号分隔列表。您可以按名称或 IP 地址引用主机。例如,可以按如下方式移除主机 host01host02host03

 # /opt/vertica/sbin/update_vertica --remove-hosts host01,host02,host03 \
            --rpm /tmp/vertica-10.1.1-0.x86_64.RHEL6.rpm \
            --dba-user mydba

如果 --rpm 指定新的 RPM,则 Vertica 会先将其安装在现有群集主机上,然后再继续。

update_vertica 使用与 install_vertica.相同的选项。有关所有选项,请参阅使用安装脚本安装 Vertica

要求

  • 如果 -remove-hosts 指定了包含多个主机的列表,则在该列表中的主机之间不能嵌入任何空格。

  • 使用与原始安装相同的命令行选项。如果您针对数据库管理员用户名、密码或目录路径使用非默认值,请在移除主机时提供相同的信息;否则,此过程将失败。考虑将原始安装选项保存在属性文件中,以便在后续安装和更新操作中重新使用这些选项。请参阅静默安装 Vertica

11 - 替换节点

如果您具有 K-safe 数据库,则可根据需要替换节点,而且不会降低系统性能。例如,您可以希望在以下情况下替换现有节点:

  • 需要修复不再正常运行的现有主机系统并将其恢复为群集

  • 要将现有主机系统换成更加强大的另一系统

用于替换节点的过程取决于您是否正在将节点替换为:

  • 使用相同名称和 IP 地址的主机

  • 使用不同名称和 IP 地址的主机

  • 活动的备用节点

先决条件

  • 配置 Vertica 的替换主机。请参阅在安装 Vertica 之前

  • 请仔细阅读向群集中添加主机从群集中移除主机下的重要提示****部分。

  • 确保新主机上存在数据库管理员用户且其配置方式与现有主机相同。Vertica 将根据需要设置免密码 ssh。

  • 确保将编录路径、数据路径和任何存储位置的目录在创建数据库时已添加到数据库中,并且/或者这些目录已正确安装到新主机上,而且数据库管理员用户具有读写访问权限。另请确保有足够的磁盘空间。

  • 按照下面的最佳实践步骤将故障硬件重新引入群集中,从而避免虚假完整节点重建。

按照下述过程进行操作可防止 Vertica 将磁盘缺失或挂载错误的情况错误地诊断为数据损坏,进而避免发生耗时的全节点恢复。

如果服务器因硬件问题(例如磁盘错误或控制器故障)而发生故障,请在修复硬件时:

  1. 将计算机重启至运行级别 1,这是仅适用于控制台的 root 模式。

    运行级别 1 可禁止网络连接并阻止 Vertica 尝试重新连接到群集。

  2. 在运行级别 1 中,验证硬件是否已得到修复,控制器是否处于联机状态,以及是否可以继续执行任何 RAID 恢复操作。

  3. 只有在确认硬件一致之后才能重启至运行级别 3 或更高级别。

此时将激活网络,同时 Vertica 会重新加入群集并自动恢复任何缺失的数据。请注意,在单节点数据库中,如果与投影关联的任何文件被删除或损坏,Vertica 将删除与该投影关联的所有文件,这可能会导致数据丢失。

11.1 - 使用相同的名称和 IP 地址替换主机

如果已移除现有 Vertica 数据库的主机,您可以在该数据库正在运行时替换此主机。

您可以将此主机替换为与旧主机具有以下相同特征的新主机:

  • 名称

  • IP 地址

  • 操作系统

  • 操作系统管理员用户

  • 目录位置

在数据库正在运行时替换主机可防止系统停机。在替换主机之前,请首先备份您的数据库。有关详细信息,请参阅备份和还原数据库

按照如下方式替换为具有以下相同特征的主机:

  1. 使用 --rpm 或 --deb 参数从正常运行的主机运行 install_vertica:

    $ /opt/vertica/sbin/install_vertica --rpm rpm_package
    

    有关详细信息,请参阅使用命令行安装

  2. 使用现有节点中的管理工具重新启动新主机。请参阅在节点上重新启动 Vertica

节点即会自动加入数据库,并通过查询数据库中的其他节点恢复其数据。随后它会过渡为 UP 状态。

11.2 - 使用具有不同 IP 地址的节点替换故障节点

使用 IP 地址与原始地址不同的主机系统替换故障节点包含以下步骤:

  1. 备份数据库

    Vertica 建议您在执行这项重大操作前先备份数据库,因为在操作过程中需要执行创建新投影、删除旧投影和重新加载数据的操作。

  2. 将新主机添加到群集中。请参阅向群集中添加主机

  3. 如果 Vertica 仍在将被替换节点中运行,请使用管理工具在将被替换的主机上停止主机上的 Vertica

  4. 使用管理工具将原始主机替换为新主机。如果使用多个数据库,请替换使用原始主机的所有数据库中的原始主机。请参阅替换主机

  5. 使用向新主机分发配置文件将元数据传输到新主机。

  6. 从群集中删除主机

  7. 使用管理工具在主机上重新启动 Vertica。在主菜单 (Main Menu) 上,选择在主机上重新启动 Vertica (Restart Vertica on Host),然后单击确定 (OK)。有关详细信息,请参阅启动数据库

完成此过程后,替换节点将查询数据库内的其他节点,从而自动恢复存储在原始节点中的数据。

11.3 - 使用不同的名称和 IP 地址替换正常运行的节点

使用 IP 地址和主机名与原始值不同的主机系统替换节点包含以下常规步骤:

  1. 备份数据库

    Vertica 建议您在执行这项重大操作前先备份数据库,因为在操作过程中需要执行创建新投影、删除旧投影和重新加载数据的操作。

  2. 将替换主机添加到群集中

    此时,您要删除的原始主机和新替换主机均为群集成员。

  3. 使用管理工具在将被替换的主机上停止主机上的 Vertica

  4. 使用管理工具将原始主机替换为新主机。如果使用多个数据库,请替换使用原始主机的所有数据库中的原始主机。请参阅替换主机

  5. 从群集中删除主机

  6. 重新启动主机上的 Vertica。

完成此过程后,替换节点将查询数据库内的其他节点,从而自动恢复存储在原始节点中的数据。随后它会过渡为 UP 状态。

11.4 - 使用管理工具替换节点

如果要将一个节点替换为一个具有不同名称和 IP 地址的节点,可使用管理工具将原始主机替换为新主机。或者,也可以使用管理控制台替换节点

使用管理工具将原始主机替换为新主机

要使用管理工具将原始主机替换为新主机:

  1. 备份数据库。请参阅备份和还原数据库

  2. 在一个正常运行且不会被替换的节点上打开 管理工具

  3. 主菜单 (Main Menu) 上,选择查看数据库群集状态 (View Database Cluster State) 以验证数据库是否正在运行。如果数据库未在运行,请使用“主菜单 (Main Menu)”上的“启动数据库 (Start Database)”命令重新启动数据库。

  4. 主菜单 (Main Menu) 上,选择高级菜单 (Advanced Menu)

  5. 高级菜单 (Advanced Menu) 上,选择在主机上停止 Vertica (Stop Vertica on Host)

  6. 选择要替换的主机,然后单击确定 (OK) 停止该节点。

  7. 当系统提示您是否要停止主机时,选择是 (Yes)

  8. 高级菜单 (Advanced Menu) 上,选择群集管理 (Cluster Management),然后单击确定 (OK)

  9. 群集管理 (Cluster Management) 菜单上,选择替换主机 (Replace Host),然后单击确定 (OK)

  10. 选择包含要替换的主机的数据库,然后单击确定 (OK)

    随即将显示当前正在使用的所有主机的列表。

  11. 选择要替换的主机,然后单击确定 (OK)

  12. 选择要作为替换主机的主机,然后单击确定 (OK)

  13. 出现提示时,输入数据库的密码,然后单击确定 (OK)

  14. 出现提示时,单击是 (Yes) 确认您想要替换主机。

  15. 当系统提示主机已成功替换时,单击确定 (OK)

  16. 主菜单 (Main Menu) 上,选择查看数据库群集状态 (View Database Cluster State) 验证是否所有主机都在运行。您可能需要在刚刚替换的主机上启动 Vertica。使用在主机上重新启动 Vertica (Restart Vertica on Host)

    节点进入“正在恢复 (RECOVERING)”状态。

12 - 在节点之间重新平衡数据

当您添加或移除节点时,Vertica 可以重新平衡您的数据库。作为超级用户,您可以使用管理工具 (Administration Tools)SQL 函数管理控制台手动触发重新平衡。

重新平衡操作可能需要一些时间,具体取决于群集大小、投影数量以及投影中包含的数据量。您不得中断此过程,而是允许其正常完成。如果必须取消此操作,请调用 CANCEL_REBALANCE_CLUSTER 函数。

为什么要重新平衡?

在执行以下操作之一后,重新平衡很有用甚至是必要的:

  • 通过添加或移除节点来更改群集的大小。

  • 在准备从群集移除一个或多个节点时,将其标记为临时节点。

  • 更改弹性群集的比例因子,该比例因子可确定用于跨数据库存储投影的存储容器的数目。

  • 设置控制节点大小或重新对齐大型群集布局上的控制节点。

  • 在初始 Vertica 群集配置中指定 120 个以上的节点。

  • 通过添加或移除节点来修改容错组

常规重新平衡任务

当您重新平衡数据库群集时,Vertica 对所有投影(无论是分段的还是未分段的)执行以下任务:

  • 基于下列内容分配数据:

  • 忽略投影定义中特定于节点的分布规范。在重新平衡节点时始终会将数据分布在所有节点上。

  • 重新平衡完成后,将 Ancient History Mark 设置为允许的最大时期(现在)。

Vertica 对于分段和未分段的投影采用不同的重新平衡方式,如下所述。

重新平衡分段投影

对于每个分段投影,Vertica 执行以下任务:

  1. 复制和重命名投影同伴并将它们均匀地分布在所有节点上。重命名的投影共享同一投影基本名。

  2. 刷新为新的投影。

  3. 删除原始投影。

重新平衡未分段的投影

对于每个未分段的投影,Vertica 执行以下任务:

如果添加节点:

  • 会在节点上创建投影同伴。

  • 会将新投影映射到它们在数据库编录中的共享名称。

如果删除节点:会从节点中删除其投影同伴。

K-safety 和重新平衡

在重新平衡完成之前,Vertica 会使用现有 K-safe 值进行操作。重新平衡完成后,Vertica 将使用在重新平衡操作期间指定的 K-safe 值进行操作。新的 K-safe 值必须等于或高于当前的 K-safety。Vertica 不支持 K-safety 降级,如果您尝试减小其当前值,则会返回一条警告。有关详细信息,请参阅降低 K‑Safety 以启用节点移除

重新平衡故障和投影

如果在重新平衡数据库时发生故障,您可以再次执行重新平衡操作。解决故障原因后,重新平衡操作会从发生故障之处继续进行。但是,数据重新平衡故障会导致投影变为过时。

要查找过期的投影,请查询系统表 PROJECTIONS,如下所示:

=> SELECT projection_name, anchor_table_name, is_up_to_date FROM projections
   WHERE is_up_to_date = false;

要移除过时的投影,请使用 DROP PROJECTION

临时表

节点重新平衡对临时表的投影没有影响。

有关重新平衡的详细信息

请参阅知识库文章:

12.1 - 使用管理工具 UI 重新平衡数据

要重新平衡数据库中的数据:

  1. 打开管理工具。(请参阅使用管理工具。)

  2. 主菜单 (Main Menu) 上,选择查看数据库群集状态 (View Database Cluster State) 以验证数据库是否正在运行。如果未运行,请将其启动。

  3. 主菜单 (Main Menu) 中,选择高级菜单 (Advanced Menu),然后单击确定 (OK)

  4. 高级菜单 (Advanced Menu) 中,选择群集管理 (Cluster Management),然后单击确定 (OK)

  5. 群集管理 (Cluster Management) 菜单中,选择重新平衡数据 (Re-balance Data),然后单击确定 (OK)

  6. 选择要重新平衡的数据库,然后选择确定 (OK)

  7. 输入 Database Designer 输出目录(例如 /tmp)),然后单击确定 (OK)

  8. 接受建议的 K-safety 值或提供新值。有效值为 0 到 2。

  9. 查看消息,然后单击继续 (Proceed) 开始重新平衡数据。

    Database Designer 将修改现有投影,以在具有您提供的 K-safety 的所有数据库节点之间重新平衡数据。此外,还会生成一个用于重新平衡数据的脚本,该脚本位于指定的路径中(例如 /tmp/extend_catalog_rebalance.sql),您可在以后手动运行它。

    当重新平衡操作完成时,终端窗口会通知您。

  10. Enter 返回管理工具。

12.2 - 使用 SQL 函数重新平衡数据

Vertica 具有三个用于启动和停止群集重新平衡的 SQL 函数。您可以从在非高峰时段运行的脚本调用这些函数,而不是通过管理工具手动触发重新平衡。

13 - 向节点重新分发配置文件

添加和移除节点过程会自动重新分发 Vertica 配置文件。您很少需要重新分发配置文件来帮助解决配置问题。

要向主机分发配置文件:

  1. 登录到包含这些文件的主机,然后启动管理工具

  2. 在“管理工具 (Administration Tools)”的主菜单 (Main Menu) 中,单击配置菜单 (Configuration Menu),然后单击确定 (OK)

  3. 配置菜单 (Configuration Menu) 上,选择分发配置文件 (Distribute Config Files),然后单击确定 (OK)

  4. 选择数据库配置 (Database Configuration)

  5. 选择要分发文件的数据库,然后单击确定 (OK)

    Vertica 配置文件会分发到所有其他数据库主机上。如果这些文件已经存在于某个主机上,则会被覆盖。

  6. 配置菜单 (Configuration Menu) 上,选择分发配置文件 (Distribute Config Files),然后单击确定 (OK)

  7. 选择 SSL 密钥 (SSL Keys)

    配置和密钥会分发到所有其他数据库主机上。如果它们已经存在于某个主机上,则会被覆盖。

  8. 配置菜单 (Configuration Menu) 上,选择分发配置文件 (Distribute Config Files),然后单击确定 (OK)

    选择 AdminTools 元数据 (AdminTools Meta-Data)

    管理工具元数据会分发到群集中的每个主机上。

  9. 重新启动数据库

14 - 在 MC 上停止和启动节点

您可以在管理 (Manage) 页面单击特定节点以选择它,然后单击“节点列表 (Node List)”中的“启动 (Start)”或“停止 (Stop)”按钮,以此来启动或停止一个或多个数据库节点。

数据库和群集 (Databases and Clusters) 页面,您必须首先单击选择数据库。要在该数据库中停止或启动节点,请单击查看 (View) 按钮。您将转到“概览 (Overview)”页面。单击页面底部小程序面板中的管理 (Manage),随后您将转到数据库节点视图。

“启动 (Start)”和“停止 (Stop)”数据库按钮始终处于活动状态,但是只有当选择的一个或多个节点处于相同状态时,节点“启动 (Start)”或“停止 (Stop)”按钮才会处于活动状态;例如,所有节点都是 UP 或 DOWN。

单击“启动 (Start)”或“停止 (Stop)”按钮后,管理控制台会为您正在启动或停止的节点或数据库更新状态和消息图标。

15 - 映射新 IP 地址

有时,运行的现有 Vertica 数据库群集的节点需要采用新 IP 地址。群集节点可能还需要基于不同的 IP 协议运行,例如,将协议从广播更改为点对点时。

要更改数据库群集中主机的 IP 地址,请使用 re_ip 函数更改 IP 地址并将旧地址映射到新地址:

$ admintools -t re_ip -f mapfile

mapfile 引用您创建的文件,其中包含新旧 IP 地址。

在下列任一情况下,可以使用此函数更改 IP 地址:

  • 如果您的 Vertica 数据库群集具有相同的数据和控制消息地址,请执行以下操作之一:

    • 更改所有数据库群集节点的 IP 地址。

    • 仅更改一个或部分数据库群集节点的 IP 地址。

    $ admintools -t re_ip -f mapfile
    
  • 将 Vertica 数据库群集的 IP 地址从广播模式更改为点对点(单播)模式:

    $ admintools -t re_ip -d dbname -T
    
  • 将 Vertica 数据库群集的 IP 地址从点对点(单播)模式更改为广播模式:

    $ admintools -t re_ip -d dbname -U
    
  • 更改数据库群集的控制 IP 地址。在这种情况下,映射文件必须包含控制消息 IP 地址和相关的广播地址。

    $ admintools -t re_ip -f mapfile
    
  • 仅更改一个数据库的 IP 地址,而不更改 admintools 配置。请参阅仅映射数据库上的 IP 地址

有关上述命令中所用选项的详细信息,请参阅Re-IP 命令行选项

更改 IP 地址和导出 IP 地址

默认情况下,节点 IP 地址和导出 IP 地址配置为相同的 IP 地址。导出地址是网络上可以访问其他 DBMS 系统的节点的 IP 地址。使用导出地址可以从 DBMS 系统导入和导出数据。您可以使用此处的说明手动更改导出地址。

如果更改导出地址并运行 re-ip 命令,则导出地址保持不变。

示例

运行以下命令:

=> SELECT node_name, node_address, export_address FROM nodes;
    node_name      | node_address    | export_address
------------------------------------------------------
v_VMartDB_node0001 | 192.168.100.101 | 192.168.100.101
v_VMartDB_node0002 | 192.168.100.102 | 192.168.100.101
v_VMartDB_node0003 | 192.168.100.103 | 192.168.100.101
v_VMartDB_node0004 | 192.168.100.104 | 192.168.100.101
(4 rows)

在上面的示例中,export_address 是默认值。在这种情况下,当您运行 re-ip 命令时,export_address 会更改为新的 node_address。

如果您手动将导出地址更改为此处描述的地址,可能会出现以下情况:

=> SELECT node_name, node_address, export_address FROM nodes;
    node_name      | node_address    | export_address
------------------------------------------------------
v_VMartDB_node0001 | 192.168.100.101 | 10.10.10.1
v_VMartDB_node0002 | 192.168.100.102 | 10.10.10.2
v_VMartDB_node0003 | 192.168.100.103 | 10.10.10.3
v_VMartDB_node0004 | 192.168.100.104 | 10.10.10.4
(4 rows)

在这种情况下,当您运行 re-ip 命令时,export_address 不会发生更改。

查找 IP 地址

主机和节点的 IP 地址存储在 opt/vertica/config/admintools.conf 中:

[Cluster]
hosts = 203.0.113.111, 203.0.113.112, 203.0.113.113

[Nodes]
node0001 = 203.0.113.111/home/dbadmin,/home/dbadmin
node0002 = 203.0.113.112/home/dbadmin,/home/dbadmin
node0003 = 203.0.113.113/home/dbadmin,/home/dbadmin

还可以使用以下命令显示 IP 地址列表:

$ admintools -t list_allnodes
Node             | Host          | State | Version        | DB
-----------------+---------------+-------+----------------+-----------
v_vmart_node0001 | 203.0.113.111 | UP    | vertica-10.1.1 | VMart
v_vmart_node0002 | 203.0.113.112 | UP    | vertica-10.1.1 | VMart
v_vmart_node0003 | 203.0.113.113 | UP    | vertica-10.1.1 | VMart

15.1 - 使用映射文件更改 IP 地址

映射新 IP 地址包括:

  • 创建将旧 IP 地址映射到新 IP 地址的映射文件。

  • 使用映射文件更新配置文件和数据库编录。

如果使用控制消息在主机之间进行通信,您可能还需要使用新的 controlAddress 和 controlBroadcast IP 地址更新 IP 地址。

创建映射文件

按如下方式创建映射文件:

  1. 获取新 IP 地址并将它们保存在一个文本文件中。

  2. 获取旧 IP 地址,使用 list_allnodes:

    $ admintools -t list_allnodes
    Node             | Host          | State | Version        | DB
    -----------------+---------------+-------+----------------+-----------
    v_vmart_node0001 | 192.0.2.254   | UP    | vertica-10.1.1 | VMart
    v_vmart_node0002 | 192.0.2.255   | UP    | vertica-10.1.1 | VMart
    v_vmart_node0003 | 192.0.2.256   | UP    | vertica-10.1.1 | VMart
    
  3. 按以下格式将 Host 列的内容复制到新 IP 地址所保存到的文本文件中:

    oldIPaddress newIPaddress
    

    例如:

    192.0.2.254 198.51.100.255
    192.0.2.255 198.51.100.256
    192.0.2.256 198.51.100.257
    
  4. 使用该文本文件创建可用于执行下列任务之一的映射文件:

将 IP 地址从旧 IP 地址更改为新 IP 地址

  1. 创建采用如下格式的映射文件:

    oldIPaddress newIPaddress[, controlAddress, controlBroadcast]
    

    例如:

    192.0.2.254 198.51.100.255, 198.51.100.255, 203.0.113.255
    192.0.2.255 198.51.100.256, 198.51.100.256, 203.0.113.255
    192.0.2.256 198.51.100.257, 198.51.100.257, 203.0.113.255
    

    controlAddresscontrolBroadcast 是可选项。如果省略:

    • controlAddress 将默认为 newIPaddress。

    • controlBroadcast 将默认为 newIPaddress 的广播 IP 地址的主机。

  2. 按如下方式运行 re_ip

    $ admintools -t re_ip -f mapfile
    

将 IP 地址从旧 IP 地址更改为新 IP 地址并更改控制消息模式

  1. 创建采用如下格式的映射文件:

    oldIPaddress newIPaddress, controlAddress, controlBroadcast
    

    例如:

    192.0.2.254 198.51.100.255, 203.0.113.255, 203.0.113.258
    192.0.2.255 198.51.100.256, 203.0.113.256, 203.0.113.258
    192.0.2.256 198.51.100.257, 203.0.113.257, 203.0.113.258
    
  2. 运行 re_ip 并按如下方式更改控制消息传递模式:

    • 将控制消息传递模式更改为点对点:

      $ admintools -t re_ip -d db name -T
      
    • 将控制消息传递模式更改为广播:

      $ admintools -t re_ip -d db name -U
      

      当您使用 -U 选项时,嵌入式消息子系统基于 controlAddresscontrolBroadcast IP 运行。

仅更改数据库的节点控制 IP 地址

  1. 创建采用如下格式的映射文件:

    nodeName nodeIPaddress, controlAddress, controlBroadcast
    

    例如:

    v_vmart_node0001 192.0.2.254, 203.0.113.255, 203.0.113.258
    v_vmart_node0002 192.0.2.255, 203.0.113.256, 203.0.113.258
    v_vmart_node0003 192.0.2.256, 203.0.113.257, 203.0.113.258
    
  2. 按如下方式运行 re_ip

    $ admintools -t re_ip -f mapfile -O -d database
    

有关详细信息,请参阅下面的映射数据库上的 IP 地址

更改 IP 地址

创建映射文件后,可以更改新 IP 地址。更改 IP 地址过程会自动备份 admintools.conf,以便在必要时恢复原始设置。

  1. 停止数据库。

  2. 运行 re-ip 以将旧 IP 地址映射到新 IP 地址:

    $ admintools -t re_ip -f mapfile
    

    如果出现以下情况,则会出现警告:

    • 任何 IP 地址的格式不正确

    • 文件中的旧 IP 地址或新 IP 地址重复 — 例如,192.0.2.256 在旧 IP 地址集中出现了两次。

    如果语法正确,则在开始映射时,re_ip 将执行以下任务:

    • 对映射文件中列出的 IP 地址进行重新映射。

    • 除非使用 -i 选项,否则会提示您确认对数据库的更新。

    • 使用新 IP 地址更新要求的本地配置文件。

    • 将更新后的配置文件分发到使用新 IP 地址的主机。

    使用以下提示跟踪这些步骤:

    Parsing mapfile...
    New settings for Host 192.0.2.254 are:
    
    address: 198.51.100.255
    
    New settings for Host 192.0.2.255 are:
    
    address: 198.51.100.256
    
    New settings for Host 192.0.2.254 are:
    
    address: 198.51.100.257
    
    The following databases would be affected by this tool: Vmart
    
    Checking DB status ...
    Enter "yes" to write new settings or "no" to exit > yes
    Backing up local admintools.conf ...
    Writing new settings to local admintools.conf ...
    
    Writing new settings to the catalogs of database Vmart ...
    The change was applied to all nodes.
    Success. Change committed on a quorum of nodes.
    
    Initiating admintools.conf distribution ...
    Success. Local admintools.conf sent to all hosts in the cluster.
    
  3. 重新启动数据库。

映射数据库上的 IP 地址

您只能映射数据库的 IP 地址。此任务涉及将数据库中的节点名称映射到新 IP 地址。这对于错误恢复很有用,因为 admintools.conf 不会更新。Vertica 仅更新 spread.conf 和包含更改的编录。

还可以仅映射数据库上的 IP 地址,以便在单个数据库上设置 controlAddress 和 controlBroadcast。此任务允许同一主机上的节点拥有不同的数据和 controlAddress。

  1. 停止数据库。

  2. 创建具有如下格式的映射文件:

    nodeName IPaddress, controlAddres, controlBroadcast
    

    例如:

    vertica_node001 192.0.2.254, 203.0.113.255, 203.0.113.258
    vertica_node002 192.0.2.255, 203.0.113.256, 203.0.113.258
    vertica_node003 192.0.2.256, 203.0.113.257, 203.0.113.258
    
  3. 运行以下命令以映射新 IP 地址:

    $ admintools -t re_ip -f mapfile -O -d database
    
  4. 重新启动数据库。

15.2 - Re-IP 命令行选项

re_ip 支持以下选项:

-h \--help
显示 re_ip 的联机帮助。
-f mapfile \--file=mapfile
映射文本文件的名称。文件内容取决于 re-IP 操作的类型。请参阅。
-O \--dba-only
用于进行错误恢复,更新和替换数据库群集编录和控制消息传递系统上的数据。如果映射文本文件失败,Vertica 会在您重新运行该命令时自动重新创建映射文本文件。映射文本文件的格式为:
NodeName AssociatedNodeIPAddress, new ControlAddress, new ControlBroadcast

NodeName 和 AssociatedNodeIPAddress 必须与 admintools.conf 中相同。

此选项一次只更新一个数据库,因此它需要使用 -d 选项:

$ admintools -t re_ip -f mapfile -O -d database
-i \--noprompts
指定系统在执行更改 IP 地址操作之前不提示验证新设置。默认情况下,提示功能处于打开状态。
-T \--point-to-point
将控制消息传递设置为点对点(单播)协议。此选项一次只更新一个数据库,因此它需要使用 -d 选项:此选项不需要映射文本文件。
-U \--broadcast
将控制消息传递设置为广播协议。此选项一次只更新一个数据库,因此必须使用 -d 选项:对于此选项,不需要映射文本文件。
-d database name \--database=database name
数据库名称,对于以下 re-IP 选项是必需项:
  • -O

  • -T

  • -U

15.3 - 重新启动具有新主机 IP 的节点

仅限 Kubernetes

Kubernetes 上 Eon 模式数据库的节点 IP 地址偶尔必定会更新 — 例如,pod 失败、添加到群集中或进行重新调度。发生这种情况时,必须使用受影响节点的新 IP 地址更新 Vertica 编录并重新启动节点。

Vertica 的 restart_node 工具通过其 --new-host-ips 选项(该选项允许您更改在 Kubernetes 上运行的 Eon 模式数据库的节点 IP 地址)满足这些要求,并重新启动已更新的节点。与在其他(非 Kubernetes)数据库上重新映射节点 IP 地址不同,您可以在正运行的数据库中的各个节点上执行此任务:

admintools -t restart_node \
  {-d db-name |--database=db-name} [-p password | --password=password] \
  {{-s nodes-list | --hosts=nodes-list} --new-host-ips=ip-address-list}
  • nodes-list 是要重新启动的节点的逗号分隔列表。列表中的所有节点都必须处于关闭状态,否则 admintools 会返回错误。

  • ip-address-list 是分配给指定节点的新 IP 地址或主机名的逗号分隔列表。

以下要求适用于 nodes-listip-address-list

  • 节点主机数和 IP 地址或主机名必须相同。

  • 列表不得包含任何嵌入空格。

例如,可以使用新 IP 地址重新启动节点 v_k8s_node0003

$ admintools -t list_allnodes
  Node           | Host       | State    | Version        | DB
 ----------------+------------+----------+----------------+-----
  v_k8s_node0001 | 172.28.1.4 | UP       | vertica-10.1.1 | K8s
  v_k8s_node0002 | 172.28.1.5 | UP       | vertica-10.1.1 | K8s
  v_k8s_node0003 | 172.28.1.6 | DOWN     | vertica-10.1.1 | K8s

$ admintools -t restart_node -s v_k8s_node0003 --new-host-ips 172.28.1.7 -d K8s
 Info: no password specified, using none
*** Updating IP addresses for nodes of database K8s ***
        Start update IP addresses for nodes
         Updating node IP addresses
         Generating new configuration information and reloading spread
*** Restarting nodes for database K8s ***
         Restarting host [172.28.1.7] with catalog [v_k8s_node0003_catalog]
         Issuing multi-node restart
         Starting nodes:
                 v_k8s_node0003 (172.28.1.7)
         Starting Vertica on all nodes. Please wait, databases with a large catalog may take a while to initialize.
         Node Status: v_k8s_node0003: (DOWN)
         Node Status: v_k8s_node0003: (DOWN)
         Node Status: v_k8s_node0003: (DOWN)
         Node Status: v_k8s_node0003: (DOWN)
         Node Status: v_k8s_node0003: (RECOVERING)
         Node Status: v_k8s_node0003: (UP)
$ admintools -t list_allnodes
  Node           | Host       | State | Version        | DB
 ----------------+------------+-------+----------------+-----
  v_k8s_node0001 | 172.28.1.4 | UP    | vertica-10.1.1 | K8s
  v_k8s_node0002 | 172.28.1.5 | UP    | vertica-10.1.1 | K8s
  v_k8s_node0003 | 172.28.1.7 | UP    | vertica-10.1.1 | K8s