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 服务器执行滚动重启。
- 对所有现有的 NDB Cluster 数据节点执行滚动重启。重新启动现有数据节点时,不必(或通常甚至不希望)使用--initial。
如果您使用的 API 节点具有动态分配的 ID,这些 ID 与您希望分配给新数据节点的任何节点 ID 匹配,则必须重新启动所有 API 节点(包括 SQL 节点),然后重新启动此步骤中的任何数据节点进程。这将导致具有先前未显式分配的节点 ID 的所有 API 节点放弃这些节点 ID 并获取新的节点 ID。
-
对连接到 NDB 群集的所有 SQL 或 API 节点执行滚动重启。
-
启动新的数据节点。
新的数据节点可以以任何 Sequences 启动。只要它们在所有现有数据节点的滚动重启完成之后且 continue 进行下一步之前启动,它们也可以同时启动。
-
在 NDB 群集 ManagementClient 端中执行一个或多个CREATE NODEGROUP命令,以创建新数据节点所属的一个或多个新节点组。
-
在所有数据节点(包括新数据节点)之间重新分配集群的数据。通常,这是通过在mysqlClient 端中为每个NDBCLUSTERtable 发出ALTER TABLE ... ALGORITHM =插入,重新组织分区语句来完成的。
- 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语句来完成此操作。
这适用于内存中NDB
table 的可变宽度列所使用的空间。内存 table 中的固定宽度列不支持OPTIMIZE TABLE
;磁盘数据 table 也不支持此功能。
您可以添加所需的所有节点,然后连续发出多个CREATE NODEGROUP命令以将新的节点组添加到群集。