Documentation Home
MySQL 8.0 参考手册  / 第 23 章 MySQL NDB Cluster 8.0  / 23.6 NDB Cluster的管理  / 23.6.7 在线添加 NDB Cluster 数据节点  /  23.6.7.1 在线添加 NDB Cluster 数据节点:一般问题

23.6.7.1 在线添加 NDB Cluster 数据节点:一般问题

本节提供有关在线添加 NDB Cluster 节点的行为和当前限制的一般信息。

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

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

部分开始。  可以在没有启动所有新数据节点的情况下添加新节点组。也可以将新节点组添加到降级集群,即仅部分启动的集群,或者一个或多个数据节点未运行的集群。在后一种情况下,在添加新节点组之前,集群必须有足够多的节点在运行才能正常运行。

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

故障处理。  节点组创建和表重组过程中数据节点失败的处理如下表所示:

表23.66 创建节点组和重组表时数据节点故障处理

失败期间 数据节点失败 数据节点失败 系统错误
节点组创建
  • 如果除 master 之外的节点发生故障:  节点组的创建始终前滚。

  • 如果主人失败: 

    • 如果已达到内部提交点:  前滚节点组的创建。

    • 如果尚未达到内部提交点。  节点组的创建被回滚

  • 如果除 master 之外的节点发生故障:  节点组的创建始终前滚。

  • 如果主人失败: 

    • 如果已达到内部提交点:  前滚节点组的创建。

    • 如果尚未达到内部提交点。  节点组的创建被回滚

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

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

表重组
  • 如果主节点以外的节点发生故障:  表重组总是前滚。

  • 如果主人失败: 

    • 如果已达到内部提交点:  前滚表重组。

    • 如果尚未达到内部提交点。  表重组被回滚。

  • 如果主节点以外的节点发生故障:  表重组总是前滚。

  • 如果主人失败: 

    • 如果已达到内部提交点:  前滚表重组。

    • 如果尚未达到内部提交点。  表重组被回滚。

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

  • 如果 ALTER TABLE ... REORGANIZE PARTITION 语句的执行还没有到达内部提交点:  当集群重启时,属于的数据和索引 table只使用数据节点进行分布。


删除节点组。 ndb_mgm客户端支持一个 DROP NODEGROUP命令,但只有当节点组中没有数据节点包含任何数据时,才可以删除节点组 。由于目前没有办法清空一个特定的数据节点或节点组,所以该命令只对以下两种情况有效:

  1. CREATE NODEGROUPndb_mgm客户端中 发出之后,但在mysql客户端中 发出任何 ALTER TABLE ... REORGANIZE PARTITION语句 之前。

  2. 使用删除所有NDBCLUSTER 表后DROP TABLE

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