mysql集群在WIN32下的配置
折腾了好几个晚上,终于把MYSQL在WINDOWS下的集群配置起来了,挺高兴的,在这里与大家分享一下。
准备工作:可以在http://www.mysql.com/downloads/cluster/上下载MYSQL cluster的安装版,安装之后即可开始配置,或者直接编它的源码,在经过编译之后再找到编译好的执行码来配置,不过直接从网上下载下来的源码还需要修改一些地方才能编译通过并且运行起来,这需要注意一下了。本人是用源码来编译配置的。
下载的MYSQL版本最好是7.2.5的,本人之前下载了一个版本为7.2.4的,看了源码之后发现配置很复杂,好像它的配置文件是打包成二进制形式的,而不是文本形式的,一直配置不成功,下载了新版本之后就可以了,经过对比文件MgmtSrvr.cpp发现,这个文件修改非常大,配置方式完全不同。所以就直接用7.2.5版本了。
集群配置一般情况都是将不同的节点放在不同的机器上,主要是用来预防故障问题,一台机器故障后,它的冗余版本还可以继续运行,这两台必须在不同机器上才可以进行切换,但本人主要是用来学习的,所以将多个服务器都配置在一台笔记本电脑上。IP地址为192.168.0.102。
这次配置的集群系统为1个管理节点(ndb_mgmd.exe)、两个数据节点(ndbd.exe)、两个SQL节点(mysqld.exe),另外,在配置过程中用于观察配置情况的一个进行ndb_mgm.exe。
首先编辑一个用于描述上面配置系统的配置文件config.ini,用来启动ndb_mgmd.exe,配置文件如下:
----------------------------------------------------------------------------------
[ndb_mgmd]
NodeId = 1 /*指定这个节点的ID号,唯一的*/
hostname = 192.168.0.102 /*指定管理服务器所在的主机*/
datadir = F:\data_mgmd /*指定管理服务器所在的数据库目录*/
PortNumber = 8186 /*指定连接管理服务器的端口号*/
[ndbd default]
NoOfReplicas = 2 /*指明数据冗余版本数*/
[ndbd]
NodeId = 3 /*指定这个节点的ID号,唯一的*/
hostname = 192.168.0.102
datadir = F:\data_slave1
[ndbd]
NodeId = 4
hostname = 192.168.0.102
datadir = F:\data_slave2
[mysqld]
NodeId = 5
hostname = 192.168.0.102
[mysqld]
NodeId = 6
hostname = 192.168.0.102
上面每个节点指定的节点号都不能相同。
下面是SQL节点(MYSQL服务器)的启动参数文件mysql1.ini
[mysqld]
datadir = "F:\data_slave1" /*指定数据库目录*/
ndbcluster /*表示这个服务器是集群系统*/
basedir = "F:\mysql_cluster\\sql" /*这个目录很重要,下面讲 */
[mysql_cluster]
ndb-connectstring=192.168.0.102:8186 /*指定连接管理服务器的主机及端口*/
说明:basedir = "F:\mysql_cluster\\sql",如果是通过源码配置的话,必须要将这个目录配置在源码目录的sql目录下(当然如果是安装版本,直接配置在安装目录的根目录即可),因为它需要找到sql目录下的share目录,从中读取有关语言信息,如果指定错误,服务器起不来,其实basedir指的就是安装目录。同时还在这里还发现一个问题,在指定目录时,sql前面用了两个“\”,而前面“F:\”只用了一个,这是因为MYSQL在解析输入参数时会将“\s”解析为空格的转义字符,所以如果只写一个“\”,解析出来的字符串为“F:\mysql_cluster ql”,这样服务器就又起不来了,所以就用了“\\”来转义。
下面是SQL节点(MYSQL服务器)的启动参数文件mysql2.ini
[mysqld]
datadir = "F:\data_slave2" /*指定数据库目录*/
ndbcluster /*表示这个服务器是集群系统*/
basedir = "F:\mysql_cluster\\sql" /*这个目录很重要,下面讲 */
port = 2345
[mysql_cluster]
ndb-connectstring=192.168.0.102:8186 /*指定连接管理服务器的主机及端口*/
这个文件的内容与上面的mysql1.ini差不多,但有一个问题需要注意的就是如果在同一台机器上启动多个MYSQL服务器的话,必须这几个服务器用不同的端口号,否则第一个服务器启动之后其它的服务器起不来的,所以这里指定了端口号2345,因为mysql1.ini中没有指定的情况下,它的端口号是默认值1186。同时如果在config.ini中的管理服务器ndb_mgmd指定了端口号的话,在连接串ndb-connectstring中必须要指定端口号,否则MYSQL找不到管理服务器的端口号,同样启不来。
上面三个文件的存储路径都是在“C:\Program Files\MySQL\MySQL Cluster 5.5\conf\”目录下。
到这里为止,配置文件的工作就完成了,下面就是正式配置集群系统的时候了:
启动是有顺序的,首先应该启动的是ndb_mgmd:
"F:\MySQL_Cluster\storage\ndb\src\mgmsrv\Debug\ndb_mgmd.exe" --config-file="C:\Program Files\MySQL\MySQL Cluster 5.5\conf\config.ini" --skip-config-cache --ndb-nodeid=1 --bind-address=192.168.0.102
在这里要注意一点,第一次启动都要加--initial参数,以后启动不能再加这个参数。
如果上面的工作都正确的做了,则这个服务器就会成功启动,可以通过工作ndb_mgm来查看启动状态(命令"-c 192.168.0.102:8186 -e show"):
"C:\Program Files\MySQL\MySQL Cluster 5.5\bin\ndb_mgm.exe" -c 192.168.0.102:8186 -e show
Connected to Management Server at: 192.168.0.102:8186 Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 (not connected, accepting connect from 192.168.0.102)
id=4 (not connected, accepting connect from 192.168.0.102)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5)
[mysqld(API)] 2 node(s)
id=5 (not connected, accepting connect from 192.168.0.102)
id=6 (not connected, accepting connect from 192.168.0.102)
可以看出,中间的[ndb_mgmd(MGM)] 1 node(s)已经启动成功。其它的都还是not connected状态。
接下来启动两个数据节点服务器:
"F:\MySQL_Cluster\storage\ndb\src\kernel\Debug\ndbd.exe" -c 192.168.0.102:8186 --ndb-nodeid=3 --bind-address=192.168.0.102
"F:\MySQL_Cluster\storage\ndb\src\kernel\Debug\ndbd.exe" -c 192.168.0.102:8186 --ndb-nodeid=4 --bind-address=192.168.0.102
启动后,再通过ndb_mgm查看启动状态:
Connected to Management Server at: 192.168.0.102:8186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5, starting)
id=4 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5, starting)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5)
[mysqld(API)] 2 node(s)
id=5 (not connected, accepting connect from 192.168.0.102)
id=6 (not connected, accepting connect from 192.168.0.102)
可以看出,[ndbd(NDB)] 两个节点也都已经启动成功了。
最后就到了启动MYSQL服务器的时候了
"F:\MySQL_Cluster\sql\Debug\mysqld.exe" --defaults-file="C:\Program Files\MySQL\MySQL Cluster 5.5\conf\mysql1.ini" --ndb-nodeid=5 --skip-grant-tables
"F:\MySQL_Cluster\sql\Debug\mysqld.exe" --defaults-file="C:\Program Files\MySQL\MySQL Cluster 5.5\conf\mysql2.ini" --ndb-nodeid=6 --skip-grant-tables
成功启动之后,再次查看服务器状态:
Connected to Management Server at: 192.168.0.102:8186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5, Nodegroup: 0, Master)
id=4 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5)
[mysqld(API)] 2 node(s)
id=5 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5)
id=6 @192.168.0.102 (mysql-5.5.20 ndb-7.2.5)
从上面的结果显示看出,五个服务器都已经成功启动,集群服务器配置完成。
关闭服务器就很简单了,顺序是与启动顺序正好相反。
可以简单测试一下服务器是否都正常启动:
mysql> create table myinfo(sno int,name varchar(10)) ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.91 sec)
mysql> insert into myinfo values(1, 'ggg');
Query OK, 1 row affected (0.03 sec)
mysql> insert into myinfo values(2, 'ggg');
Query OK, 1 row affected (0.01 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from myinfo;
+------+------+
| sno | name |
+------+------+
| 1 | ggg |
| 2 | ggg |
+------+------+
2 rows in set (0.02 sec)
完全正确!