本节提供了在线添加 NDB 集群节点的常规信息和当前限制。
数据重新分布。 在线添加新节点包括重新组织 NDBCLUSTER
表数据和索引,以便它们分布在所有数据节点上,包括新的节点,通过 ALTER TABLE ... REORGANIZE PARTITION
语句。内存表和磁盘数据表的重新组织都支持。这重新分布不包括唯一索引(只有有序索引被重新分布)。
对于 NDBCLUSTER
表,在添加新数据节点之前已经存在的重新分布不是自动的,但可以使用简单的 SQL 语句在 mysql 或其他 MySQL 客户端应用程序中实现。然而,在添加新节点组后创建的所有数据和索引都将自动分布在所有集群数据节点上,包括新添加的节点组。
部分启动。 可以在没有所有新数据节点启动的情况下添加新节点组。也可以在集群部分启动或某些数据节点未运行的情况下添加新节点组。在后一种情况下,集群必须至少有足够的节点运行以保持可用性,然后才能添加新节点组。
对正在进行的操作的影响。 使用 NDB 集群数据的正常 DML 操作不会被新节点组的创建或添加所阻止。但是,不能在表重新组织期间执行 DDL 语句—也就是说,在执行 ALTER TABLE ... REORGANIZE PARTITION
语句时,不能发出其他 DDL 语句。此外,在执行 ALTER TABLE ... REORGANIZE PARTITION
(或执行其他 DDL 语句)期间,不能重新启动集群数据节点。
故障处理。 在节点组创建和表重新组织期间数据节点的故障处理如下表所示:
表 25.66 节点组创建和表重新组织期间数据节点故障处理
Failure during | Failure in “Old” data node | Failure in “New” data node | System Failure |
---|---|---|---|
Node group creation |
|
|
|
Table reorganization |
|
|
|
删除节点组。 ndb_mgm 客户端支持 DROP NODEGROUP
命令,但只能在节点组中不包含任何数据时删除节点组。由于当前无法“清空”特定的数据节点或节点组,因此该命令仅在以下两种情况下有效:
-
在 ndb_mgm 客户端中发出
CREATE NODEGROUP
之后,但在 mysql 客户端中发出任何ALTER TABLE ... REORGANIZE PARTITION
语句之前。 -
在删除所有
NDBCLUSTER
表使用DROP TABLE
之后。TRUNCATE TABLE
不适用于此目的,因为数据节点继续存储表定义。