公司有个项目是测试distributed DB,其中一项是针对MySQL Cluster的测试。
于是花了两天时间装机器和配置MySQL Cluster。整个过程还是比较顺利的,当然如果对MySQL常用命令比较熟悉的话会更顺利。
留下step by step配置方案,以防忘记。
MySQL Cluster是一种share nothing的机制,跟Oracle的RAC需要共享存储方案是不一样的。

他包含三种节点(node):
Data node:用来存放数据的节点,数据类型是NDB Cluster,放在该节点的内存里。
SQL node:mysql服务器/客户端节点。
MGM node:管理节点,纵观全局的一个配置节点。
所谓的节点,其实也就是相应的进程而已,所以我们可以将不同节点放在同一个机器上。所以理论上,我们只需要一台物理机器就可以玩MySQL Cluster了。
稍微了解了一点理论知识,就可以轻松配置好一个Cluster环境,但其他知识需要在以后的运维和测试过程中自己发掘。MySQL也是一个很庞大的知识体系,不逊于Oracle。
接下来Step by Step讲解如何配置MySQL Cluster,即使你只有0基础,相信也能够很轻松的配置。
1. 准备硬件资源
我拿到了四台普通PC机作为测试机,并全部装好RedHat EL5操作系统。
四台机器全部通过DHCP获得4个外部IP地址。但为了节点之间内部稳定,又给每台机器设定了一个子网静态IP地址,节点之间的通信就可以通过这个静态地址联系了。
这四台机器hostname取名为mysql1/2/3/4,静态地址为:
| mysql1 | 192.168.123.1 |
| mysql2 | 192.168.123.2 |
| mysql3 | 192.168.123.3 |
| mysql4 | 192.168.123.4 |
2. 部署节点
我们采用1个MGM node,2个SQL node,2个data node的分布方式。
其中由于资源限制,MGM node和一个SQL node部署在同一台机器上。
部署如下:
| 节点类型 | 所在物理机器 |
| MGM node | mysql4 |
| SQL node 1 | mysql3 |
| SQL node 2 | mysql4 |
| Data node 1 | mysql1 |
| Data node 2 | mysql2 |
3. 安装MySQL软件
在所有节点上安装mysql-5.0.88-linux-i686-icc-glibc23.tar.gz
下载地址:
直接gunzip and tar -xvf解压就可以用了。
我们解压后放在/home/oracle/mysql
4. 建立OS user用来run mysql
在这里我们使用oracle用户(oracle组)。
5. MGM node的配置和启动
登入mysql4 as oracle user。
cd /home/oracle/mysql
mkdir mgmdata
建立全局配置文件mgmd.cnf,内容为:(只需特别注意红色部分的配置)
|
# Options affecting ndbd processes on all data nodes: |
启动MGM node:
ndb_mgmd -f mgmd.cnf
ps -ef|grep mgmd|grep -v grep查看MGM node 进程是否已经起来。
[oracle@mysql4 mysql]$ ps -ef|grep mgmd|grep -v grep
oracle 22939 1 0 Nov27 ? 00:00:00 ndb_mgmd -f mgmd.cnf
再登入MGM控制台(ndb_mgm 192.168.123.4 2001),用show命令查看各个节点的状态。
(以下结果是所有配置完全后的状态,刚配好MGM node后应该看到所有其他节点都是not connected)
[oracle@mysql4 mysql]$ ndb_mgm 192.168.123.4 2001
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.123.4:2001
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.123.1 (Version: 5.0.88, Nodegroup: 0, Master)
id=3 @192.168.123.2 (Version: 5.0.88, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.123.4 (Version: 5.0.88)
[mysqld(API)] 2 node(s)
id=4 @192.168.123.3 (Version: 5.0.88)
id=5 @192.168.123.4 (Version: 5.0.88)
6. Data node的配置和启动。
登入mysql1和mysql2 as oracle user。
cd /home/oracle/mysql
mkdir ndbdata
以下以配置Data node 1为例:
建立ndbd1.cnf文件,内容为:(只需特别注意红色部分的配置)
| [mysqld] DataDir=/home/oracle/mysql/ndbdata skip-locking ndbcluster ndb-connectstring=192.168.123.4:2001 #MGM节点IP地址和端口号 [mysql_cluster] ndb-connectstring=192.168.123.4:2001 #MGM节点IP地址和端口号 |
启动Data node 1:
ndbd --defaults-file=ndbd1.cnf --initial
(注意:--initial只需在第一次启动时加该参数)
查看ndb进程启动了:
[oracle@mysql1 mysql]$ ps -ef|grep ndb|grep -v grep
oracle 5864 1 0 Nov27 ? 00:00:00 ndbd --defaults-file=ndbd1.cnf
oracle 5865 5864 0 Nov27 ? 00:03:51 ndbd --defaults-file=ndbd1.cnf
并且在MGM node的控制台中show命令可以看到Data node不再是not connected状态了
同理配置Data node 2.
7. SQL node的配置和启动。
登入mysql3和mysql4 as oracle user。
以配置SQL node 1为例。
cd /home/oracle/mysql
mkdir data1
建立my.cnf,内容为:
| [client] port = 3001 socket = /home/oracle/mysql/data1/mysql1.sock default-character-set=utf8 [mysqld] port = 3001 #这里我使用3001端口跑MySQL server进程 socket = /home/oracle/mysql/data1/mysql1.sock datadir = /home/oracle/mysql/data1 ndbcluster # run NDB engine ndb-connectstring=192.168.123.4:2001 # MGM node的IP和端口 |
建立一个新库:
scripts/mysql_install_db --datadir=/home/oracle/mysql/data1
启动MySQL Server:
mysqld_safe &
同理配置和启动SQL node 2。
当一切都顺利完工后,登入MGM node,确保所有的节点都连接上:
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.123.1 (Version: 5.0.88, Nodegroup: 0, Master)
id=3 @192.168.123.2 (Version: 5.0.88, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.123.4 (Version: 5.0.88)
[mysqld(API)] 2 node(s)
id=4 @192.168.123.3 (Version: 5.0.88)
id=5 @192.168.123.4 (Version: 5.0.88)
8. 建个表测试一下:
在SQL node 1上建个表:
create table testbyhao(
id mediumint unsigned not null auto_increment primary key,
name varchar(20) not null default ''
) engine = ndbcluster default charset utf8;
insert into testbyhao values(1, '11');
insert into testbyhao values(2, '22');
在SQL node 2上能看到此表即可。
至此,一个简单的MySQL Cluster环境就搭建成功了。
有几点需要记住:
1.启动各个节点的顺序永远是:MGM node,Data Node,SQL node。
2.engine=ndbcluster或者engine=ndb的表才能使用Data node所存储。其他engine即放在SQL node本地,就像单机版一样。
3.多个节点放在一台机器上时,需要给每个节点分配不同端口号以此区分。
(以后奉上其他MySQL Cluster知识点。)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15415488/viewspace-620903/ ,如需转载,请注明出处,否则将追究法律责任。