在本节中,我们列出了将新数据节点添加到 NDB 集群所需的基本步骤,无论您是使用 ndbd 或 ndbmtd 二进制文件来处理数据节点进程。有关详细示例,请参阅 第 25.6.7.3 节,“在线添加 NDB 集群数据节点:详细示例”。
假设您已经拥有一个正在运行的 NDB 集群,添加数据节点在线需要以下步骤:
-
编辑集群配置
config.ini
文件,添加新的[ndbd]
部分,相应于要添加的节点。在使用多个管理服务器的情况下,这些更改需要应用于所有管理服务器使用的config.ini
文件。您必须小心,不要让新添加的数据节点的节点 ID 与现有节点的节点 ID 重叠。在事件中,您拥有使用动态分配的节点 ID 的 API 节点,并且这些 ID 与您想要用于新数据节点的 ID 相匹配时,可以强制这些 API 节点“迁移”,如本过程后面所述。
-
执行所有 NDB 集群管理服务器的滚动重新启动。
-
执行所有现有 NDB 集群数据节点的滚动重新启动。不需要(或通常不需要)使用
--initial
选项来重新启动现有数据节点。如果您使用的是具有动态分配 ID 的 API 节点,并且这些 ID 与您想要分配给新数据节点的 ID 相匹配,那么您必须在重新启动任何数据节点进程之前重新启动所有 API 节点(包括 SQL 节点)。这将导致任何具有未明确分配的节点 ID 的 API 节点释放这些 ID 并获取新的 ID。
-
执行所有连接到 NDB 集群的 SQL 或 API 节点的滚动重新启动。
-
启动新数据节点。
可以以任何顺序启动新数据节点。它们也可以同时启动,只要在完成所有现有数据节点的滚动重新启动后,并在继续下一步之前。
-
在 NDB 集群管理客户端中执行一个或多个
CREATE NODEGROUP
命令,以创建新节点组或新数据节点所属的节点组。 -
在所有数据节点(包括新节点)之间重新分布集群的数据。通常,这是通过在 mysql 客户端中为每个
NDBCLUSTER
表格发出ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
语句来实现的。例外:对于使用
MAX_ROWS
选项创建的表格,这个语句不起作用;相反,使用ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...
语句来重新组织这些表格。您还应该注意,使用MAX_ROWS
选项来设置分区数目现在已弃用,而应使用PARTITION_BALANCE
;请参阅 第 15.1.20.12 节,“设置 NDB 注释选项”,以获取更多信息。Note这只需要对在添加新节点组时已经存在的表格执行一次;在添加新节点组后创建的表格的数据将自动分布;然而,在添加新节点组之前已经存在的表格
tbl
的数据不会使用新节点分布,直到该表格被重新组织。 -
ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE
重新组织分区,但不回收““旧””节点上释放的空间。您可以通过对每个NDBCLUSTER
表格发出一个OPTIMIZE TABLE
语句,在 mysql 客户端中。这适用于内存中
NDB
表格的可变宽度列所使用的空间。OPTIMIZE TABLE
不支持内存表格的固定宽度列,也不支持磁盘数据表格。
您可以添加所有所需的节点,然后连续发出多个 CREATE NODEGROUP
命令,以将新节点组添加到集群中。