在本节中,我们列出了将新数据节点添加到 NDB Cluster 所需的基本步骤。无论您是将ndbd还是ndbmtd 二进制文件用于数据节点进程,此过程都适用。有关更详细的示例,请参阅 第 21.6.7.3 节,“在线添加 NDB Cluster 数据节点:详细示例”。
假设你已经有一个正在运行的 NDB Cluster,在线添加数据节点需要以下步骤:
编辑集群配置
config.ini
文件,添加[ndbd]
与要添加的节点对应的新部分。在集群使用多个管理服务器的情况下,需要对config.ini
管理服务器使用的所有文件进行这些更改。您必须注意
config.ini
文件中添加的任何新数据节点的节点 ID 都不要与现有节点使用的节点 ID 重叠。如果您的 API 节点使用动态分配的节点 ID,并且这些 ID 与您要用于新数据节点的节点 ID 匹配,则可以强制任何此类 API 节点 “迁移”,如本过程稍后所述。执行所有 NDB Cluster 管理服务器的滚动重启。
执行所有现有 NDB Cluster 数据节点的滚动重启。
--initial
重新启动现有数据节点时 没有必要(或者通常甚至不需要)使用。如果您使用的 API 节点动态分配的 ID 与您希望分配给新数据节点的任何节点 ID 相匹配,则必须先重新启动所有 API 节点(包括 SQL 节点),然后才能在此步骤中重新启动任何数据节点进程。这会导致任何具有先前未明确分配的节点 ID 的 API 节点放弃这些节点 ID 并获取新的节点 ID。
对连接到 NDB Cluster 的任何 SQL 或 API 节点执行滚动重启。
启动新的数据节点。
新的数据节点可以以任何顺序启动。它们也可以并发启动,只要它们是在所有现有数据节点的滚动重启完成之后,在进行下一步之前启动的。
在 NDB Cluster 管理客户端中执行一个或多个
CREATE NODEGROUP
命令来创建新的节点组或新数据节点所属的节点组。在所有数据节点(包括新数据节点)之间重新分配集群的数据。通常这是通过 在mysql客户端中为每个 表 发出一条
ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
语句来完成的。NDBCLUSTER
异常:对于使用该
MAX_ROWS
选项创建的表,此语句不起作用;相反,用于ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...
重组此类表。您还应该记住,MAX_ROWS
在 NDB 7.5.4 及更高版本中不推荐使用以这种方式设置分区数,您应该在其中使用PARTITION_BALANCE
;有关详细信息,请参阅第 13.1.18.9 节,“设置 NDB 注释选项”。笔记只需对添加新节点组时已存在的表执行此操作。新增节点组后创建的表数据自动分布;但是,
tbl
在重新组织该表之前,添加到在添加新节点之前存在的任何给定表的数据不会使用新节点进行分发。ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE
重组分区但不回收“旧”节点上释放的空间。您可以通过 在mysqlNDBCLUSTER
客户端中为每个表发出一条OPTIMIZE TABLE
语句来完成此操作。这适用于内存
NDB
表的可变宽度列使用的空间。OPTIMIZE TABLE
不支持内存表的固定宽度列;磁盘数据表也不支持它。
您可以添加所需的所有节点,然后
CREATE NODEGROUP
连续发出多个命令以将新节点组添加到集群中。