25.6.7.2 在线添加 NDB 集群数据节点:基本步骤
在本节中,我们列出了添加新数据节点到 NDB 集群所需的基本步骤。这一过程适用于使用 ndbd 或 ndbmtd 可执行文件的数据节点进程。对于更详细的示例,请见 第 25.6.7.3 节,“在线添加 NDB 集群数据节点:详细示例”。
假设您已经拥有运行的 NDB 集群,online 添加数据节点需要以下步骤:
-
编辑集群配置文件
config.ini
,添加新的[ndbd]
部分,以便对要添加的节点进行相应的更改。在使用多个管理服务器的集群中,这些更改需要在所有管理服务器使用的config.ini
文件中进行。您必须小心确保新添加的数据节点在
config.ini
文件中的节点 ID 不与现有节点的节点 ID 重叠。在 API 节点使用动态分配的节点 ID 并且这些 ID 与要用于新数据节点的节点 ID 相匹配的情况下,可以强制这些 API 节点进行 “迁移”,如本过程后面所述。 -
对 NDB 集群管理服务器执行滚动重启。
-
对现有NDB集群数据节点进行滚动重启。通常不需要(或不太可能)使用
--initial
选项重新启动现有数据节点。如果您正在使用API节点,并且动态分配的ID与要将新数据节点分配到的任何节点ID匹配,您必须在重启任何数据节点进程之前重新启动所有API节点(包括SQL节点)。这使得任何API节点,以前未明确分配的节点ID释放该ID并获取新的ID。
-
对NDB集群中的任何SQL或API节点进行滚动重启。
-
启动新数据节点。
新数据节点可以在任意顺序启动,也可以同时启动,只要它们是在所有现有数据节点的滚动重启完成后,并且在下一步之前启动。
-
使用NDB集群管理客户端执行一个或多个
CREATE NODEGROUP
命令,以创建新节点组或节点组,其中包含新数据节点。 -
将集群的数据重新分布到所有数据节点上,包括新的节点。通常情况下,这可以通过在 mysql 客户端中执行以下语句来实现:
ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
。对于每个NDBCLUSTER
表,需要执行该语句。注意:使用
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
对分区进行重新组织,但不会回收“old”节点上的释放空间。您可以通过在NDBCLUSTER
表中每个表上执行OPTIMIZE TABLE
语句在mysql客户端来实现。这适用于内存中的
NDB
表的可变宽度列所占用的空间。OPTIMIZE TABLE
不支持固定宽度列的内存表,也不支持磁盘数据表。
您可以添加所有所需的节点,然后依次执行多个CREATE NODEGROUP
命令来将新的节点组添加到集群中。