Mysql-Cluster是一个集群工具,并不能实现负载均衡,这一点和oracle的rac是有所区别的。不过mysql-cluster可以实现多台数据库之间的同步,虽然主从复制也能实现数据同步,主主复制也能实现2台数据库之间的同时读写要求,但是对于访问量比较大的系统通过配置cluster+负载均衡的方式就比较合适了。
一般来说,一个Mysql Cluster 的环境结构主要如下:
今天来找了份文档测试安装一下mysql-cluster:
环境说明:
mysql版本:5.7.21
mysql-cluster版本:7.5.6
整个框架应该包括:管理节点、数据节点以及mysql节点,分别的作用:
管理节点,mysql-cluster管理节点负责管理、配置、监控整个集群。
数据节点,使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其他数据节点。
mysql节点,也叫数据库节点,和我们平时使用的mysql相同,作为数据库使用。被数据节点访问。
下面一段截自百度百科:
各节点IPv如下:
管理节点:172.17.61.131
数据节点以及mysql节点:172.17.61.132,172.17.61.133
1.安装前的准备:
下载mysql-cluster工具:
http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/
我下载的是mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
由于这些机器上之前都安装过Mysql,所以需要先stop掉mysql的服务,将相关mysql的数据文件以及原文件都删除干净,确保3306端口没有被占用,三台机器IP可以互通。
2.安装配置管理节点
将下载后的包上传至服务器/usr/local下
解压
# tar xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
将需要的文件取出
# cd mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64
# cp bin/ndb_mgm* /usr/local/bin
# cd /usr/local/bin
# chmod +x ndb_mgm*
新建配置文件并且初始化管理节点
# mkdir /var/lib/mysql-cluster
# ln -s /usr/local/mysql /home/mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64
# vi /var/lib/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2
DataMemory=80M #此参数不能太大,否则会导致由于内存空间不足,节点会强制关闭
IndexMemory=18M
[ndb_mgmd]
HostName=172.17.61.131
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=172.17.61.132
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=172.17.61.133
DataDir=/var/lib/mysql-cluster
[mysqld]
[mysqld]
使用配置文件初始化管理节点
# /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
出现MySQL Cluster Management Server mysql-5.7.21 ndb-7.5.6
然后就能使用ndbd进去管理了(如果ndbd命令不行,就使用在/usr/local/bin目录下使用ndb_mgm命令)
# ndbd
ndb_mgm>show(使用show命令查看管理情况,当数据节点配置完毕之后,我们再用这个命令查看和管理)
到此为止管理节点配置完毕,接下去配置数据和sql节点
3.安装和配置数据和mysql节点
下面的操作需要在所有节点进行
新增用户组mysql和用户msyql
# groupadd mysql
# useradd -g mysql -s /bin/false mysql
新建文件夹并赋予权限
# mkdir /var/lib/mysql-cluster
# mkdir /u01/mysql
# chown root:mysql /var/lib/mysql-cluster
#chown mysql:mysql /u01/mysql
将下载后的包上传至服务器/usr/local下
解压
# tar xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
创建链接方便访问
# ln -s /usr/local/mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64 /usr/local/mysql
初始化数据库
/usr/loca/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/u01/mysql
/usr/loca/mysql/bin/mysql_ssl_rsa_setup --datadir=/u01/mysql
配置自动启动
# cp support-files/mysql.server /etc/rc.d/init.d/mysql
修改etc/rc.d/init.d/mysql的datadir以及basedir
# chmod +x /etc/rc.d/init.d/mysql# chkconfig --add mysql
配置数据节点
# vi /etc/my.cnf
加上下面部分:
[mysqld]
ndbcluster
ndb-connectstring=172.17.61.131
[mysql_cluster]
ndb-connectstring=172.17.61.131
启动数据库:
service mysql start
初次登入需要修改密码,这个和普通安装mysql一样
启动ndbd#
/etc/init.d/ndbd --initial
如果上述不行使用绝对路径的这个:# /usr/local/mysql/bin/ndbd --initial如果出现下述现象就成功了
2018-05-09 14:14:24 [ndbd] INFO -- Angel connected to '172.17.61.131:1186'2018-05-09 14:14:24 [ndbd] INFO -- Angel allocated nodeid: 2
4.最后当所有的节点配置完成,回到管理节点,使用上述说过的show查看,如下的类似显示,证明已经连接完成ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @172.17.61.132 (mysql-5.7.18 ndb-7.5.6, Nodegroup: 0, *)
id=3 @172.17.61.133 (mysql-5.7.18 ndb-7.5.6, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @172.17.61.131 (mysql-5.7.18 ndb-7.5.6)
[mysqld(API)] 2 node(s)
id=4 @172.17.61.132 (mysql-5.7.18 ndb-7.5.6)
id=5 @172.17.61.133 (mysql-5.7.18 ndb-7.5.6)
5.测试是否能够同步数据 :
创建表时必须使用ndbcluster引擎,否则无法同步数据
- 表必须用ENGINE=NDB或ENGINE=NDBCLUSTER选项创建,或用ALTER TABLE选项更改,以使用NDB Cluster存储引擎在 Cluster内复制它们。如果使用mysqldump的输出从已有数据库导入表,可在文本编辑器中打开SQL脚本,并将该选项添加到任何表创建语句,或 用这类选项之一替换任何已有的ENGINE(或TYPE)选项。
- 另外还请记住,每个NDB表必须有一个主键。如果在创建表时用户未定义主键,NDB Cluster存储引擎将自动生成隐含的主键。(注释:该隐含 键也将占用空间,就像任何其他的表索引一样。由于没有足够的内存来容纳这些自动创建的键,出现问题并不罕见)。
node1:
mysql> use l5m
Database changed
mysql> create table student(age int) engine=ndbcluster;
Query OK, 0 rows affected (0.51 sec)
mysql> insert into student values(11);
Query OK, 1 row affected (0.07 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
node2:
mysql> select * from student;
+------+
| age |
+------+
| 11 |
+------+
1 row in set (0.00 sec)
6.启动和关闭顺序
启动mysql集群。启动顺序为:管理节点→数据节点→SQL节点。
启动的命令上面都有,删去--initial即可
关闭时只需要关闭管理节点,后面的数据节点会同时被关闭,mysql就和原来一样即可
管理节点关闭命令:ndb_mgm -e shutdown
(执行完成之后管理节点会关闭,数据节点也会关闭,但SQL节点不会,也就是数据库服务需要手动到每一台服务器上停止以保证数据同步)
参考:
http://www.cnblogs.com/linkstar/p/6510713.html