MySQL Cluster 7.2.7


管理节点:192.168.1.10
数据节点:192.168.1.15192.168.1.16
SQL
节点:192.168.1.20

添加 2 个数据节点:192.168.1.17192.168.1.18
添加 1 SQL节点:192.168.1.21


--------
管理节点
--------
rpm -ivh MySQL-Cluster-server-gpl-7.2.7-1.rhel5.i386.rpm

注意:关闭自动启动 MySQL 服务,因为是管理节点,不是 SQL 节点,只有 SQL 节点才启动 MySQL 服务。
chkconfig mysql off

mkdir -p /home/mysql-cluster

cd /home/mysql-cluster/

vi config.ini

[ndb_mgmd]
id=1
hostname=192.168.1.10
datadir=/home/mysql-cluster

[ndbd default]
NoOfReplicas=2
DataMemory=100M
IndexMemory=100M

[ndbd]
id=15
hostname=192.168.1.15
datadir=/usr/local/mysql/data

[ndbd]
id=16
hostname=192.168.1.16
datadir=/usr/local/mysql/data

[mysqld]
id=20
hostname=192.168.1.20

[mysqld]
id=21

[mysqld]
id=22

[mysqld]
id=23


启动管理节点
ndb_mgmd -f /home/mysql-cluster/config.ini

查看管理节点状态
ndb_mgm> 1 status
Node 1: connected (Version 7.1.23)



--------
数据节点
--------
rpm -ivh MySQL-Cluster-server-gpl-7.2.7-1.rhel5.i386.rpm

mkdir -p /usr/local/mysql/data

# cat /etc/my.cnf
[mysql_cluster]
ndb-connectstring=192.168.1.10:1186

开启数据节点
ndbd --initial
或者
ndbd --initial --ndb-connectstring=192.168.1.10:1186

查看数据节点状态
ndb_mgm> all status
Node 15: started (mysql-5.1.63 ndb-7.1.23)
Node 16: started (mysql-5.1.63 ndb-7.1.23)



--------
SQL
节点
--------
rpm -ivh MySQL-Cluster-client-gpl-7.2.7-1.rhel5.i386.rpm
rpm -ivh MySQL-Cluster-server-gpl-7.2.7-1.rhel5.i386.rpm

lokkit --port=3306:tcp -q

编辑配置文件:vi /etc/my.cnf
[client]
default-character-set=gbk

[mysqld]
character-set-server=gbk
skip-name-resolve
ndbcluster
ndb-connectstring=192.168.1.10

default-storage-engine=ndbcluster

启动 SQL 节点
service mysql start

查看 SQL 节点状态
mysql> show engine ndb status;

创建测试表
登陆 SQL 节点执行如下:
create database cluster_test;
use cluster_test
create table ctest (i int) engine=ndbcluster;
insert into ctest values (1);
select * from ctest;



----------------
在线添加数据节点
----------------
添加 2 个数据节点:192.168.1.17192.168.1.18

1.
修改 config.ini,添加新的数据节点,注意:id 号不能出现重复
[ndbd]
id=17
hostname=192.168.1.17
datadir=/usr/local/mysql/data

[ndbd]
id=18
hostname=192.168.1.18
datadir=/usr/local/mysql/data

mkdir -p /usr/local/mysql/data


2.
停止管理节点,找到管理节点ID
ndb_mgm> 1 stop


3.
重新启动管理节点(使用 reload 选项)
ndb_mgmd -f /home/mysql-cluster/config.ini --reload


4.
查看管理节点状态
ndb_mgm> show
[ndbd(NDB)] 2 node(s)
id=15 @192.168.1.15 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0, Master)
id=16 @192.168.1.16 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0)
id=17 (not connected, accepting connect from 192.168.1.17)
id=18 (not connected, accepting connect from 192.168.1.18)
已经出现新数据节点 id=17id=18


5.
对已经存在的数据节点执行环状重启,就是一个一个重启
ndb_mgm> 15 restart
Node 15: Node shutdown initiated
Node 15: Node shutdown completed, restarting, no start.
Node 15 is being restarted

ndb_mgm> Node 15: Started (version 7.1.23)

注意:一定要等到管理端报告 Node X …,才能重启后面的数据节点。

ndb_mgm> 16 restart


6.
SQL 节点执行环状重启,一个一个重启
service mysql restart


7.
对新数据节点进行初始化启动
ndbd -c 192.168.1.10 --initial

注意:这里不需要一个数据节点启动后在启动另一个,可以同时启动

ndb_mgm> show
id=15 @192.168.1.15 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0, Master)
id=16 @192.168.1.16 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0)
id=17 @192.168.1.17 (mysql-5.5.25 ndb-7.2.7, starting, Nodegroup: 0)
id=18 @192.168.1.18 (mysql-5.5.25 ndb-7.2.7, starting, Nodegroup: 0)


8.
为新数据节点分配新的组
ndb_mgm> create nodegroup 17,18
Nodegroup 1 created


9.
重新分配数据
当新加入数据节点时,已经存在的数据或者索引不会被自动分配到新的节点上,如下所示:
ndb_mgm> all report memory

使用 ndb_desc -p 可以看到分区信息。拿上面的那张表为例,看到它还是在使用 2 个分区:
ndb_desc --ndb-connectstring=192.168.1.10:1186 -d cluster_test ctest -p

-d
:后面是数据库名称,然后紧接着是某个表的名称。

对于新增的数据节点一些访问量较高的数据和比较重要的数据需要从新分配。
现在进行数据的重新分配
SQL 节点上执行对所有的 ndbcluster 引擎的表:
alter online table <
表名称> reorganize partition;

例如:在 SQL 节点执行如下:
use cluster_test
alter online table ctest reorganize partition;
optimize table ctest;



-----------------
在线添加 SQL 节点
-----------------
添加 1 SQL节点:192.168.1.21

1 步、在管理节点上,修改 config.ini,添加如下:
[mysqld]
id=21
hostname=192.168.1.21


2 步、停止管理节点
ndb_mgm> show
ndb_mgm> 1 stop

注意:id 1 就是管理节点的 id
Node 1 has shutdown.
Disconnecting to allow Management Server to shutdown


3 步、启动管理节点
ndb_mgmd -f /home/mysql-cluster/config.ini --reload


4 步、启动新加入的 SQL 节点
service mysql start


5 步、验证是否成功加入新 SQL 节点
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=15 @192.168.1.15 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0, Master)
id=16 @192.168.1.16 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.10 (mysql-5.5.25 ndb-7.2.7)

[mysqld(API)] 4 node(s)
id=20 @192.168.1.20 (mysql-5.5.25 ndb-7.2.7)
id=21 @192.168.1.21 (mysql-5.5.25 ndb-7.2.7)
id=22 (not connected, accepting connect from any host)
id=23 (not connected, accepting connect from any host)