Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Adding NDB Cluster Data Nodes Online: General Issues

25.6.7.1 在线添加 NDB 集群数据节点:总体问题

本节提供了在线添加 NDB 集群节点的行为和当前限制的总体信息。

数据重新分布. NDBCLUSTER 表数据和索引可以在线添加新节点时重新分布,以便它们在所有数据节点上都可用,包括新的节点,通过使用 ALTER TABLE ... REORGANIZE PARTITION 语句。支持内存表和 Disk Data 表的重新组织。这项重新分布目前不包括唯一索引(只重分布有序索引)。

在添加新数据节点之前已经存在的 NDBCLUSTER 表的重新分布不是自动的,但可以使用简单的 SQL 语句在 mysql 或其他 MySQL 客户端应用程序中实现。然而,在创建了新的节点组后添加到表中的所有数据和索引都将自动分布于所有集群数据节点,包括作为新节点组的一部分添加的节点。

部分启动。 可以在所有新数据节点都没有启动的情况下添加新的节点组,也可以将新的节点组添加到一个已降级的集群中—that is,一个只部分启动或其中一个或多个数据节点未运行的集群。在后一种情况下,集群必须有足够的节点正在运行,以便在添加新节点组之前。

对 ongoing 操作的影响。 使用 NDB 集群数据的正常 DML 操作不会被创建或添加新的节点组所阻止,也不会被表重组织所阻止。然而,在执行 ALTER TABLE ... REORGANIZE PARTITION 语句时,不可能同时执行其他 DDL 语句。在执行 ALTER TABLE ... REORGANIZE PARTITION(或任何其他 DDL 语句)时,也不可能重新启动集群数据节点。

故障处理。 节点组创建和表重组织期间的数据节点故障将被按照以下表格所示进行处理:

表 25.38 数据节点故障处理 durante 节点组创建和表重组织

Failure during Failure in Old data node Failure in New data node System Failure
Node group creation
  • 如果不是主节点失败: 创建节点组总是回滚。

  • 如果主节点失败:

    • 如果内部提交点已经达成: 创建节点组回滚。

    • 如果内部提交点还没有达成: 创建节点组回退

  • 如果不是主节点失败: 节点组的创建总是回滚。

  • 如果主节点失败:

    • 如果已经达到了内部提交点: 节点组的创建将被回滚。

    • 如果还没有达到内部提交点: 节点组的创建将被回退

  • 如果CREATE NODEGROUP执行已经达到了内部提交点: 重启时,集群将包含新的节点组。否则不包括。

  • 如果CREATE NODEGROUP执行还没有达到内部提交点: 重启时,集群不包括新的节点组。

Table reorganization
  • 如果不是主节点失败: 表重新组织总是回滚。

  • 如果主节点失败:

    • 如果内部提交点已经达到了: 表重新组织回滚。

    • 如果内部提交点还没有达到: 表重新组织回退。

  • 如果不是主节点失败:  表重组总是回滚。

  • 如果主节点失败: 

    • 如果内部提交点已经达成:  表重组将被回滚。

    • 如果内部提交点还没有达成:  表重组将被回退。

  • 如果ALTER TABLE ... REORGANIZE PARTITION语句的执行已经达成内部提交点:  当集群重新启动时,table 的数据和索引将使用“新”数据节点分布。

  • 如果ALTER TABLE ... REORGANIZE PARTITION语句的执行还没有达成内部提交点:  当集群重新启动时,table 的数据和索引将使用“老”数据节点分布。


删除节点组.  ndb_mgm 客户端支持DROP NODEGROUP 命令,但是只能在没有数据节点包含任何数据时删除一个节点组。由于当前无法“empty”特定的数据节点或节点组,这个命令只适用于以下两个情况:

  1. CREATE NODEGROUPndb_mgm 客户端中执行,但是在mysql 客户端中执行任何ALTER TABLE ... REORGANIZE PARTITION 语句之前。

  2. 在使用

    TRUNCATE TABLE 语句无法实现此目的,因为数据节点会继续存储表定义。