在本节中,我们列出了将新的数据节点添加到 NDB 集群所需的步骤。此流程适用于您使用 ndbd 或 ndbmtd 二进制文件作为数据节点进程。有关更详细的示例,请参见 第 25.6.7.3 节,“在线添加 NDB 集群数据节点:详细示例”.
假设您已经有一个正在运行的 NDB 集群,在线添加数据节点需要执行以下步骤:
编辑集群配置
config.ini
文件,添加与要添加的节点相对应的新[ndbd]
部分。在集群使用多个管理服务器的情况下,需要对所有管理服务器使用的config.ini
文件进行这些更改。您必须注意,在
config.ini
文件中添加的任何新的数据节点的节点 ID 不得与现有节点使用的节点 ID 重叠。如果您的 API 节点使用动态分配的节点 ID,并且这些 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 注释选项”.注意这只需要对新节点组添加时已经存在的表执行。在新节点组添加后创建的表中的数据将自动分布;但是,添加到在添加新节点之前存在的任何给定表
tbl
的数据不会使用新节点进行分布,直到该表重新组织为止。ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE
重新组织分区,但不会回收在 “旧” 节点上释放的空间。您可以通过对每个NDBCLUSTER
表发出OPTIMIZE TABLE
语句来实现这一点,该语句可以在 mysql 客户端中使用。这适用于内存中
NDB
表的可变宽度列使用的空间。对于内存中表的固定宽度列,不支持OPTIMIZE TABLE
;它也不支持磁盘数据表。
您可以添加所需的所有节点,然后依次发出几个 CREATE NODEGROUP
命令以将新的节点组添加到集群中。