注意
弹性群集是仅限企业模式的功能。要在 Eon 模式下伸缩数据库,请参阅扩展 Eon 模式数据库。您可以根据数据库需要,扩大或缩减群集。最常见的情况是向数据库群集添加节点以容纳更多数据,并提供更好的查询性能。但是,如果发现群集过度配置或需要将硬件用于其他用途,您也可以缩减群集。
您可以通过添加或移除节点来对群集进行扩展或缩减。添加或移除节点时无需关闭或重新启动数据库。添加节点后或移除节点前,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 个本地数据段。
注意
默认情况下,只有当 Vertica 重新平衡数据库时,伸缩系数才会发挥作用。重新平衡时,每个节点都会将它包含的投影分段拆分到存储容器中,然后根据需要将存储容器移动至其他节点。重新平衡后,数据会重新合并到
启用弹性群集
使用 ENABLE_ELASTIC_CLUSTER 启用弹性群集。查询 ELASTIC_CLUSTER 系统表来验证弹性群集是否已启用:
=> SELECT is_enabled FROM ELASTIC_CLUSTER;
is_enabled
------------
t
(1 row)