在Vertica群集中添加或删除一个或多个节点后,必须调整现有节点和新节点上的数据。为了获得最佳性能,应在所有节点之间平衡数据。Vertica称此过程为平衡过程。
重新平衡群集后,群集中所有节点之间的数据存储和工作负载将达到平衡。重新平衡是复杂的:CPU,磁盘和网络密集型。由于重新平衡需要大量的数据移动,因此该过程可能需要很长时间。
这是关于再平衡的两部分系列文章的第1部分。第1部分介绍了重新平衡过程中发生的情况。
了解再平衡,第2部分:优化再平衡描述了重新平衡之前,之中和之后要采取的步骤
在以下情况下,您可能需要向Vertica群集中添加一个或多个节点:
删除节点要比添加节点少。如果群集超额配置或需要将硬件用于其他目的,则可以删除节点。
重要
如果删除节点违反系统K安全性,则Vertica不允许您从群集中删除节点。
以下主题描述了在添加或删除节点后重新平衡群集时发生的情况:
在群集之间重新平衡数据很复杂。Vertica在将适当的线段传送到其各自的目标节点之前,先对分段的投影进行分割。重新平衡完成后,在目标节点上,Tuple Mover在下一次执行合并时会合并数据段。
为了有效地进行重新平衡,现有节点需要具有可用空间。如果现有节点的可用空间很少,则重新平衡仍然可以进行。但是,Vertica必须分多个阶段执行重新平衡,这可能需要更长的时间:
例如,考虑一个具有N个节点的集群。将节点添加到群集时,Vertica尝试减少需要在所有节点上平均分配数据的数据移动量。为此,Vertica会在现有节点之间分配新节点。有关此的说明,请参阅本节后面的图形。
Vertica在重新平衡期间移动的数据量取决于:
下图显示了此过程对主投影和好友投影的工作方式。蓝色矩形代表现有节点,红色矩形代表新节点:
例如,图形的第一行显示将一个节点添加到四节点群集中。Vertica将新节点分布在最小化数据移动的位置。
在四节点群集中,每个节点包含1/4的数据。对于具有五个节点的群集,每个节点必须包含1/5的数据。当群集从4个节点加倍到8个节点时,将应用相同的概念。

重新平衡始终使用内置的REFRESH资源池运行。在此池中,您可以使用PLANNEDCONCURRENCY参数指定Vertica可以随时重新平衡的投影伙伴组的数量。MAXCONCURRENCY池参数对REFRESH资源池无效。
将默认设置用于REFRESH资源池。
由于大量数据移动,为节省磁盘空间,Vertica一次重新平衡了表组和投影组。组的数量取决于PLANNEDCONCURRENCY配置参数的值。
重新平衡的阶段包括:

在重新平衡过程中,不会发生合并数据的最后阶段。元组移动器下次执行合并时将合并数据。
有关详细信息,请参阅以下主题:
为了最大程度地减少在群集节点之间移动数据所需的时间,Vertica将新节点插入群集中的位置,以最大程度地减少数据移动。新节点的位置会影响重新平衡的性能。对于大型集群尤其如此。
将一个节点添加到三节点群集时,它的外观如下:

Vertica从所有节点读取现有数据,并查看每个表和投影。
对于非分段的投影,Vertica:
对于分段投影,Vertica:
对数据进行分段需要一个暂存区域,因此重新平衡将使用临时存储。为了有效地使用该存储,Vertica一次只能重新平衡一些表和投影。
将节点添加到三节点群集后,重新分段可能如下所示:

为了平衡新大小的群集,Vertica使用哈希函数来确定如何在新节点和现有节点之间分配数据。传输数据时,Vertica会使用S锁并复制未分段和分段的数据。
由于未分段的投影是彼此的副本,因此源节点读取数据,而目标节点写入数据。如果您有多个新节点,Vertica可以将未分段的投影从多个源节点并行传输到多个目标节点。此过程几乎不占用CPU成本。
对于分段投影,这些步骤更加复杂。在源节点上,Vertica读取,拆分和写入分段的投影。Vertica需要时间和磁盘空间才能执行这些操作。
重新平衡完成后,最终在目标节点上,元组移动器将数据段合并。
在三节点示例中,您可以看到Vertica使用来自相邻节点的数据填充新节点,以最大程度地减少数据传输量。传输后,数据在所有四个节点之间保持平衡。
在此示例中:
结果是,所有节点拥有Vertica数据库中总数据的1/4 。

重新平衡完成后,在目标节点上,Tuple Mover将在下一个合并操作期间合并数据段。
下图说明了添加第四个节点后的三节点群集的这种情况。

元组移动器合并数据后,它将刷新所有投影。如果要删除节点,则在临时节点上,Vertica会丢弃不需要的未分段的投影。
重新平衡群集可能需要很长时间。以下任何因素都可能影响重新平衡完成所需的时间:
重新分割分段的投影并分离ROS容器可能要花费总重新平衡时间的80%。
在群集中添加或删除节点之前,请执行以下步骤以优化重新平衡的性能并最大程度地减少数据丢失的风险:
vioperf:测量硬盘驱动器的速度和一致性。vnetperf:测量节点之间的网络延迟和吞吐量。如果可用空间不足,Vertica必须分多个阶段执行重新平衡,这可能需要更长的时间。
检查以下系统表中的可用磁盘空间:
要查看Linux文件系统上的可用和已用磁盘空间,请使用Linux 命令: df
$ df -h
要获取每个节点的快照,请查看HOST_RESOURCES系统表中的以下字段:
=>从host_resources中选择host_name,disk_space_used_mb,disk_space_total_mb;
有关Vertica产品文档中的重新平衡的信息,请参阅《跨节点重新平衡数据》。
原文作者:;如有侵权,请联系管理员删除。