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命令,但是只有当节点组中没有数据节点包含任何数据时,才可以删除节点组。由于当前无法“清空”特定的数据节点或节点组,因此此命令仅在以下两种情况下有效:
-
在ndb_mgmClient 端中发出CREATE NODEGROUP之后,但在mysqlClient 端中发出任何ALTER TABLE ...重新组织分区语句之前。
-
在使用DROP TABLE删除所有NDBCLUSTER个 table 之后。
TRUNCATE TABLE不适用于此目的,因为数据节点 continue 存储 table 定义。