21.5.7.2 在线添加 NDB 群集数据节点:基本过程

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

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

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

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

  • 对所有 NDB 群集 Management 服务器执行滚动重启。

Important

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

  • 对所有现有的 NDB Cluster 数据节点执行滚动重启。重新启动现有数据节点时,不必(或通常甚至不希望)使用--initial

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

  • 对连接到 NDB 群集的所有 SQL 或 API 节点执行滚动重启。

  • 启动新的数据节点。

新的数据节点可以以任何 Sequences 启动。只要它们在所有现有数据节点的滚动重启完成之后且 continue 进行下一步之前启动,它们也可以同时启动。

  • Exception *:对于使用MAX_ROWS选项创建的 table,该语句不起作用;而是使用ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...重新组织此类 table。您还应该记住,在 NDB 7.5.4 及更高版本中,不建议使用MAX_ROWS以此方式设置分区数,而应改为使用PARTITION_BALANCE。有关更多信息,请参见第 13.1.18.9 节“设置 NDB_TABLE 选项”

Note

仅对于添加新节点组时已经存在的 table 才需要执行此操作。添加新节点组后创建的 table 中的数据将自动分发;但是,在重新组织 table 之前,添加到任何给定 tabletbl的,在添加新节点之前已存在的数据不会使用新节点进行分发。

  • ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE重新组织分区,但不回收“旧”节点上释放的空间。您可以通过在mysqlClient 端中为每个NDBCLUSTERtable 发出OPTIMIZE TABLE语句来完成此操作。

这适用于内存中NDBtable 的可变宽度列所使用的空间。内存 table 中的固定宽度列不支持OPTIMIZE TABLE;磁盘数据 table 也不支持此功能。

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