添加新数据节点

添加新数据节点之前已经存在的表 的重新分配不是自动的,但是可以使用MySQL或另一个MySQL客户端应用程序中的简单SQL语句来完成。但是,添加到添加新节点组之后创建的表中的所有数据和索引将自动分布在所有群集数据节点之间,包括那些作为新节点组的一部分添加的数据和索引。

  1. 修改mysql-cluster.conf文件,将待添加的节点信息加入配置文件中,如果有多台管理节点,则每台管理节点都需要做此项工作。

  2. 对所有NDB群集管理服务器执行滚动重启。必须使用--reload--initial选项重新启动所有管理服务器, 以强制读取新配置。

  3. 对所有现有的NDB群集数据节点执行滚动重启。不需要使用--initial选项

  4. 对所有SQL节点执行滚动重启。

  5. 启动新的数据节点

  6. 在管理节点上,执行CREATE NODEGROUP NodeID[,NodeID,...]。创建新的节点组,并将新节点加入节点组中。需要注意的是,不同节点组中的主机数量要一致。如果当前节点组中有两个节点,则添加新节点时,需要2*N个节点。

  7. SQL节点上执行ALTER TABLE TableName ALGORITHM=INPLACE, REORGANIZE PARTITION重新分配集群的数据。

  8. SQL节点上执行ALTER TABLE TableName REORGANIZE PARTITION ALGORITHM=INPLACE重新分配分区数据。

    7/8步在添加新节点之前的表需要执行(但不是必须),添加新节点后创建的表不需要

  9. 验证: 历史表在执行7/8步之后,同未执行的表比较,会发现多出分区。多出的分区就是添加的节点数.

1
2
3
4
5
6
7
SELECT
  partition_name part,  
  partition_expression expr,  
  partition_description descr,  
  table_rows  
FROM information_schema.partitions 
  WHERE table_schema = schema() AND table_name='test'; 

添加新API/SQL节点

  1. 修改mysql-cluster.conf文件,将待添加的节点信息加入配置文件中,如果有多台管理节点,则每台管理节点都需要做此项工作。

  2. 对所有NDB群集管理服务器执行滚动重启。必须使用--reload--initial选项重新启动所有管理服务器,以强制读取新配置。

  3. 对所有现有的NDB群集数据节点执行滚动重启。不需要使用--initial选项。

  4. 启动新的API/SQL节点即可

新节点启动后,会自动同步其他API/SQL节点中的数据库与相关数据,建议新节点的初始数据库用户名与密码与之前保护一致。