增加或减少数据节点的数量和NoOfReplicas(即副本数,通过管理节点的config.ini配置文件来设置)有关,一般来说NoOfReplicas是2,那么增加或减少的数量也应该是成对的,否则要设置另外的NoOfReplicas。首先必须确保新加入的数据节点作为新的group加入,默认2个node为1个group,Group数量=Node总数/NoOfReplicas数。

1.修改管理节点的config.ini配置文件 ,添加如下一段:

[NDBD]
 Id=6
 HostName= 10.30.9.208
 Datadir=/opt/mysql-cluster/data
 [NDBD]
 Id=7
 HostName= 10.30.9.211
 Datadir=/opt/mysql-cluster/data

这里的Id不能跟已有的Id重复

2.关闭管理节点,用reload方式启动管理节点

执行ndb_mgm进入管理命令界面

找到管理节点的id,然后执行管理节点id stop,退出



[root@sg204 mysql-cluster]# libexec/ndb_mgmd -f /opt/mysql-cluster/etc/config.ini --reload    #加上reload参数,使得修改过的config.ini生效

启动成功后用show查看,可以 看到新加入的数据节点,并且处于未连接状态。

3.滚动重启旧的数据存储节点服务(滚动重启,不能所有节点同时重启,如果同时停止,数据库前端查询就会出现错误)

ndb_mgm> 2 RESTART

 Node 2: Node shutdown initiated

 Node 2: Node shutdown completed, restarting, no start.

 Node 2 is being restarted

 ndb_mgm> Node 2: Start initiated (version 7.1.19)

 Node 2: Started (version 7.1.19)

 ndb_mgm> 3 RESTART

 Node 3: Node shutdown initiated

 Node 3: Node shutdown completed, restarting, no start.

 Node 3 is being restarted

 ndb_mgm> Node 3: Start initiated (version 7.1.19)

 ndb_mgm> Node 3: Started (version 7.1.19)

4.  滚动重启所有的数据查询节点服务


[root@sg204 mysql-cluster]#bin/ 
mysqladmin -uroot -ppassword shutdown
 
[root@sg204 mysql-cluster]# mysqld_safe --console --ndbcluster --ndb-connectstring=192.168.0.10

5.以初如化方式 启动新增加的数据存储节点

[root@sg204 mysql-cluster]#ndbd -c 10.30.9.204 --initial

启动后在管理节点上用show命令查看可以 看到新加入的节点已经启动并处于未分组状态

id=6 @10.30.9.208 (5.1.56-ndb-7.1.19, no nodegroup)
 id=7 @10.30.9.211 (5.1.56-ndb-7.1.19, no nodegroup)


6.为新节点增加分组,在管理节点上ndb_mgm下输入以下命令:


ndb_mgm> create nodegroup 6,7


这时在管理节点上show,可以看到新节点已经分组。

ndb_mgm> show
 Connected to Management Server at: localhost:1186
 Cluster Configuration
 ---------------------
 [ndbd(NDB)] 4 node(s)
 id=2 @10.30.9.206 (mysql-5.1.56 ndb-7.1.19, Nodegroup: 0, Master)
 id=3 @10.30.9.207 (mysql-5.1.56 ndb-7.1.19, Nodegroup: 0)
 id=6 @10.30.9.208 (mysql-5.1.56 ndb-7.1.19, Nodegroup: 1)
 id=7 @10.30.9.211 (mysql-5.1.56 ndb-7.1.19, Nodegroup: 1)

 [ndb_mgmd(MGM)] 1 node(s)
 id=1 @10.30.9.204 (mysql-5.1.56 ndb-7.1.19)

 [mysqld(API)] 4 node(s)
 id=4 @10.30.9.208 (mysql-5.1.56 ndb-7.1.19)
 id=5 @10.30.9.211 (mysql-5.1.56 ndb-7.1.19)
 id=8 @10.30.9.206 (mysql-5.1.56 ndb-7.1.19)
 id=9 @10.30.9.207 (mysql-5.1.56 ndb-7.1.19)


7.重新分配集群数据(数据量表比较大时,会出现很多问题;我当时表里数据量为三千万条,一直报错,报错解决后提示成功,但数据没有迁移过去,最后没有弄,直接把表数据删除了……

现把网上找到的方法贴到下面)

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE = 'NDBCLUSTER';

 ALTER ONLINE TABLE table_name REORGANIZE PARTITION





然后通过show命令或者使用ndb_desc命令查看

ndb_desc -c 192.168.0.10 -d tuge datasource -p

-c后面跟管理节点的ip,-d跟数据库的名字,datasource为表名,-p输出分区的详细信息



迁移之后空间还没有释放出来,需要通过optimize命令优化表,释放迁移走的空间(当optimize一个ndb大表的时候很慢,很容易出问题)

表的数据量很多的时候,最好自己编写脚本,实现数据的重新分区和优化。