21.5.7.1 在线添加 NDB 群集数据节点:一般问题

本节提供有关联机添加 NDB 群集节点的行为和当前限制的一般信息。

数据重新分配. 在线添加新节点的功能包括一种重组NDBCLUSTERtable 数据和索引的方法,以便通过ALTER TABLE ...重新组织分区语句将它们分布在包括新数据的所有数据节点上。支持内存和磁盘数据 table 的 table 重组。该重新分配当前不包括唯一索引(仅重新分配有序索引)。

添加新数据节点之前已经存在的NDBCLUSTERtable 的重新分配不是自动的,但是可以使用mysql或其他 MySQLClient 端应用程序中的简单 SQL 语句来完成。但是,添加到添加新节点组之后创建的 table 中的所有数据和索引都会自动分布在所有群集数据节点之间,包括那些作为新节点组的一部分添加的数据和索引。

部分启动. 可以在不启动所有新数据节点的情况下添加新节点组。也可以将新的节点组添加到降级的群集(即仅部分启动的群集或一个或多个数据节点未运行的群集)。在后一种情况下,群集必须具有足够的运行节点才能变得可行,然后才能添加新的节点组。

对正在进行的操作的影响. 通过创建或添加新节点组或通过 table 重组,不能阻止使用 NDB 群集数据的正常 DML 操作。但是,不可能与 table 重组同时执行 DDL,也就是说,在执行ALTER TABLE ...重新组织分区语句时不能发出其他 DDL 语句。此外,在执行ALTER TABLE ... REORGANIZE PARTITION(或执行任何其他 DDL 语句)期间,无法重新启动群集数据节点。

故障处理. 节点组创建和 table 重组期间数据节点的故障处理如下 table 所示:

table21.279 在节点组创建和 table 重组期间的数据节点故障处理

Failure during“旧”数据节点中的故障“新”数据节点失败System Failure
节点组创建如果主节点以外的节点发生故障: 节点组的创建始终前滚。

如果主机失败:
如果到达内部提交点: 节点组的创建将前滚。
如果尚未到达内部提交点. 回退节点组的创建
如果主节点以外的节点失败: 总是回滚节点组的创建。
如果主机失败:
如果到达内部提交点: 节点组的创建将前滚。
如果尚未到达内部提交点. 回退节点组的创建
如果执行 CREATE NODEGROUP 已到达内部提交点: 重新启动时,群集将包括新的节点组。否则就没有。
如果 CREATE NODEGROUP 的执行尚未到达内部提交点: 重新启动时,集群不包括新的节点组。
table 重组如果主节点以外的节点失败: table 重组总是前滚。
如果主机失败:
如果已达到内部提交点: table 重组将前滚。
如果尚未到达内部提交点. table 重组将回滚。
如果主节点以外的节点失败: table 重组将始终前滚。
如果主机失败:
如果已达到内部提交点: table 重组将前滚。
如果尚未到达内部提交点. table 重组将回滚。
如果执行 ALTER TABLE ... REORGANIZE PARTITION 语句已到达内部提交点: 当集群重新启动后,使用“新”数据节点分配属于* table 的数据和索引。
如果执行 ALTER TABLE ... REORGANIZE PARTITION 语句尚未到达内部提交点: 重新启动集群时,仅使用“旧”数据分发属于
table *的数据和索引节点。

删除节点组. ndb_mgmClient 端支持DROP NODEGROUP命令,但是只有当节点组中没有数据节点包含任何数据时,才可以删除节点组。由于当前无法“清空”特定的数据节点或节点组,因此此命令仅在以下两种情况下有效:

TRUNCATE TABLE不适用于此目的,因为数据节点 continue 存储 table 定义。