Documentation Home
MySQL 8.0 参考手册  / 第 23 章 MySQL NDB Cluster 8.0  / 23.6 NDB Cluster的管理  / 23.6.7 在线添加 NDB Cluster 数据节点  /  23.6.7.2 在线添加 NDB Cluster 数据节点:基本过程

23.6.7.2 在线添加 NDB Cluster 数据节点:基本过程

在本节中,我们列出了将新数据节点添加到 NDB Cluster 所需的基本步骤。无论您是将ndbd还是ndbmtd 二进制文件用于数据节点进程,此过程都适用。有关更详细的示例,请参阅 第 23.6.7.3 节,“在线添加 NDB Cluster 数据节点:详细示例”

假设你已经有一个正在运行的 NDB Cluster,在线添加数据节点需要以下步骤:

  1. 编辑集群配置 config.ini文件,添加 [ndbd]与要添加的节点对应的新部分。在集群使用多个管理服务器的情况下,需要对config.ini管理服务器使用的所有文件进行这些更改。

    您必须注意config.ini文件中添加的任何新数据节点的节点 ID 都不要与现有节点使用的节点 ID 重叠。如果您的 API 节点使用动态分配的节点 ID,并且这些 ID 与您要用于新数据节点的节点 ID 匹配,则可以强制任何此类 API 节点 迁移,如本过程稍后所述。

  2. 执行所有 NDB Cluster 管理服务器的滚动重启。

    重要的

    必须使用 --reload--initial选项重新启动所有管理服务器以强制读取新配置。

  3. 执行所有现有 NDB Cluster 数据节点的滚动重启。--initial重新启动现有数据节点时 没有必要(或者通常甚至不需要)使用。

    如果您使用的 API 节点动态分配的 ID 与您希望分配给新数据节点的任何节点 ID 相匹配,则必须先重新启动所有 API 节点(包括 SQL 节点),然后才能在此步骤中重新启动任何数据节点进程。这会导致任何具有先前未明确分配的节点 ID 的 API 节点放弃这些节点 ID 并获取新的节点 ID。

  4. 对连接到 NDB Cluster 的任何 SQL 或 API 节点执行滚动重启。

  5. 启动新的数据节点。

    新的数据节点可以以任何顺序启动。它们也可以并发启动,只要它们是在所有现有数据节点的滚动重启完成之后,在进行下一步之前启动的。

  6. 在 NDB Cluster 管理客户端中执行一个或多个CREATE NODEGROUP命令来创建新的节点组或新数据节点所属的节点组。

  7. 在所有数据节点(包括新数据节点)之间重新分配集群的数据。通常这是通过 在mysql客户端中为每个 表 发出一条ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION语句来完成的。NDBCLUSTER

    异常:对于使用该 MAX_ROWS选项创建的表,此语句不起作用;相反,用于ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...重组此类表。您还应该记住, MAX_ROWS以这种方式使用来设置分区数已被弃用,您应该 PARTITION_BALANCE改用;有关详细信息,请参阅 第 13.1.20.12 节,“设置 NDB 注释选项”

    笔记

    只需对添加新节点组时已存在的表执行此操作。新增节点组后创建的表数据自动分布;但是, tbl在重新组织该表之前,添加到在添加新节点之前存在的任何给定表的数据不会使用新节点进行分发。

  8. ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE重组分区但不回收节点上释放的空间。您可以通过 在mysqlNDBCLUSTER客户端中为每个表发出一条 OPTIMIZE TABLE语句来完成此操作。

    这适用于内存NDB表的可变宽度列使用的空间。OPTIMIZE TABLE不支持内存表的固定宽度列;磁盘数据表也不支持它。

您可以添加所需的所有节点,然后 CREATE NODEGROUP连续发出多个命令以将新节点组添加到集群中。