最后还是通过三台机器实现了linux下的mysql集群,这边首先要感谢众多网络上提供帮助教程,虽然有些没有经过实践无法真正达到效果,但是这次给MGM项目的这个开头还是不错。
书归正传,这边用的是vmware workstation来实现的,先装三台linux centos的服务器,最好参考百度知道里面的安装普通database的服务器方法,当中自己来实现交换分区和boot分区还有主分区的划分,这样更好的学习linux的命令和一些常用的操作。接下来和网上的做法差不多,这边关键是my.cnf的配置方法,最后我才发觉这个是我的问题,而且权限表的配置也很重要chown最好对mysql组下的mysql对这个安装路径(/usr/local/mysql/)路径的所有权限进行赋值。
操作系统:
Centos6.0 release 64位
软件包:
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz
数据库管理节点: 10.10.10.201
数据库数据节点: 10.10.10.202,10.10.10.203
数据库sql节点: 10.10.10.202,10.10.10.203
数据库数据节点: 10.10.10.202,10.10.10.203
数据库sql节点: 10.10.10.202,10.10.10.203
我这里数据节点和sql节点用相同的2台机器承担.
1.管理节点的安装
#groupadd mysql
#useradd mysql -g mysql
#mv
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz /usr/local/
#cd /usr/local/
#tar zxvf
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz
#rm -f
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz
#mv
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64 mysql
#chown -R mysql:mysql mysql
#cd mysql
#scripts/mysql_install_db --user=mysql
2.管理节点的配置
#mkdir /var/lib/mysql-cluster
#cd /var/lib/mysql-cluster
#vi config.ini
//这里需要手动添加如下内容
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M //这里有很多参数,大家可以自己找下相关资料
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M //这里有很多参数,大家可以自己找下相关资料
[ndb_mgmd]
Id=1
Hostname=10.10.10.201 //管理节点IP
datadir=/usr/local/mysql/logs
Id=1
Hostname=10.10.10.201 //管理节点IP
datadir=/usr/local/mysql/logs
[ndbd]
Id=2
Hostname=10.10.10.202 //数据节点IP
datadir=/usr/local/mysql/data/ //数据节点的数据目录,这里要与数据节点的配置文件my.cnf(其实这边要但是my。cnf里面不用指定也行)
Id=2
Hostname=10.10.10.202 //数据节点IP
datadir=/usr/local/mysql/data/ //数据节点的数据目录,这里要与数据节点的配置文件my.cnf(其实这边要但是my。cnf里面不用指定也行)
的数据指定相同
[ndbd]
Id=3
Hostname=10.10.10.203 //数据节点IP
datadir=/usr/local/mysql/data/
Id=3
Hostname=10.10.10.203 //数据节点IP
datadir=/usr/local/mysql/data/
[MYSQLD]
[MYSQLD]
[MYSQLD]
3.安装和配置数据节点
这里2台机器数据节点安装是相同的.
#groupadd mysql
[client]
port =3307
[mysqld]
port = 3307
ndbcluster
ndb-connectstring=10.10.10.201
bind-address = 10.10.10.202
[mysql_cluster]
ndb-connectstring=10.10.10.201
#useradd mysql -g mysql
#mv
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz /usr/local/
#cd /usr/local/
#tar zxvf
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz
#rm -f
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64.tar.gz
#mv
mysql-cluster-advanced-7.4.6-linux-glibc2.5-x86_64 mysql
#chown -R mysql:mysql mysql
#cd mysql
#scripts/mysql_install_db --user=mysql
#cp support-files/my-medium.cnf /etc/my.cnf
#cp support-files/mysql.server /etc/init.d/mysqld
#vi /etc/my.cnf
//这里需要手动添加如下的内容
[client]
port =3307
[mysqld]
port = 3307
ndbcluster
ndb-connectstring=10.10.10.201
bind-address = 10.10.10.202
[mysql_cluster]
ndb-connectstring=10.10.10.201
这边特别要说的额是设置成3307是必须的,我尝试了很多方法,在ndbd开启后3306就被占用了,
可以使用
netstat -anp | grep "3306" 来找到pid,用kill pid号反而会导致ndbd的集群出问题,所以这里只能指定binding-address和port
4.启动相关服务
在管理节点启动相关服务:
#/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
#netstat -lntpu
tcp 0 0 0.0.0.0:1186 0.0.0.0:*
LISTEN 22907/ndb_mgmd
看到1186端口开放了说明启动是正常的.
在数据节点启动相关服务:
#/usr/local/mysql/bin/ndbd --initial
#netstat -lntpu
tcp 0 0 10.10.1.65:32975 0.0.0.0:* LISTEN 1901/ndbd
tcp 0 0 10.10.1.65:32976 0.0.0.0:* LISTEN 1901/ndbd
tcp 0 0 10.10.1.65:32977 0.0.0.0:* LISTEN 1901/ndbd
tcp 0 0 10.10.1.65:32975 0.0.0.0:* LISTEN 1901/ndbd
tcp 0 0 10.10.1.65:32976 0.0.0.0:* LISTEN 1901/ndbd
tcp 0 0 10.10.1.65:32977 0.0.0.0:* LISTEN 1901/ndbd
#service mysqld start
#netstat -lntpu
tcp 0 0 :::3306 :::* LISTEN 2258/mysqld
可以看到相关的ndbd服务以及mysql已经启动ok了.
5.功能测试
到管理节点查看下相关服务状态
# ndb_mgm
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.1.65 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)
id=3 @10.10.1.58 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0)
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.1.65 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)
id=3 @10.10.1.58 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.1.151 (mysql-5.1.37 ndb-7.0.8)
id=1 @10.10.1.151 (mysql-5.1.37 ndb-7.0.8)
[mysqld(API)] 2 node(s)
id=4 @10.10.1.65 (mysql-5.1.37 ndb-7.0.8)
id=5 @10.10.1.58 (mysql-5.1.37 ndb-7.0.8)
id=4 @10.10.1.65 (mysql-5.1.37 ndb-7.0.8)
id=5 @10.10.1.58 (mysql-5.1.37 ndb-7.0.8)
可以看到这里的数据节点、管理节点、sql节点都是正常的.
现在我们在其中一个数据节点上进行相关数据库的创建,然后到另外一个数据节点上看看数据是否同步
# /usr/local/mysql/bin/mysql -u root -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndb_2_fs |
| test |
+--------------------+
mysql> create database aa;
mysql> use aa
mysql> CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndb_2_fs |
| test |
+--------------------+
mysql> create database aa;
mysql> use aa
mysql> CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同
步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
+------+
| i |
+------+
| 1 |
+------+
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
+------+
| i |
+------+
| 1 |
+------+
现在到另外一个数据节点查看下aa数据库是否同步过来了.
#/usr/local/mysql/bin/mysql -u root -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aa |
| bb |
| mysql |
| ndb_3_fs |
| test |
+--------------------+
mysql> use aa
mysql> select * from ctest2;
+------+
| i |
+------+
| 1 |
+------+
+--------------------+
| Database |
+--------------------+
| information_schema |
| aa |
| bb |
| mysql |
| ndb_3_fs |
| test |
+--------------------+
mysql> use aa
mysql> select * from ctest2;
+------+
| i |
+------+
| 1 |
+------+
从上面可以看到数据已经同步了,mysql集群环境已经搭建完成.
这边同样要感谢下面页面的提供帮助:
http://blog.chinaunix.net/uid-23412974-id-2425362.html
http://wenku.baidu.com/link?url=BweBSV3m0ut73gnmRWj5M3w88YTanyxi_K7tvkqpWMdrfaf54xSdVfPolj0HbhdH9hmf85UO_OjXEuWsYlIBRgND0-WgZ9RW1qBE1weoLOq
让我知道不光是chrown来设置权限表来解决问题,还需要绑定其他端口和ip,还有重要问题还需要跑到/usr/local/mysql/data找错误日志来排查。