MySQL Cluster使用的安装包是mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64.tar.gz
上传mysql安装包至服务器 /home/ 目录下
拓扑结构图如下:
系统环境
服务器 | 角色 | 系统 |
192.168.2.150 | 管理节点(NDB_MGMD) | Center OS 7 64位 |
192.168.2.151 | 数据节点&SQL节点(MYSQLD&NBDB) | Center OS 7 64位 |
192.168.2.152 | 数据节点&SQL节点(MYSQLD&NBDB) | Center OS 7 64位 |
配置管理节点,进入192.168.2.150 ssh root@192.168.2.150
一、准备工作
1、创建mysql用户组和用户
~]# groupadd mysql
~]# useradd mysql -g mysql
二、安装mysql-cluster
解压
~]# tar -xzvf /home/mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64.tar.gz
移动到 /usr/local/mysql
~]# mv /home/mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64.tar.gz /usr/local/mysql
~]# chown -R mysql:mysql /usr/local/mysql
~]# mkdir -p /data/mysql/var/data
~]# chown -R mysql:mysql /data/mysql/var/data
切换mysql用户
~]# su - mysql
安装mysql
~]# /usr/local/mysql/bin/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/var/data --user=mysql
三、修改mysql 主配置文件 /etc/my.cnf (管理节点)
~]# vi /etc/my.cnf
[MYSQLD]
user = mysql
socket = /tmp/mysql.sock
basedir = /usr/local/mysql #安装目录
datadir = /data/mysql/var/data #数据库数据存放目录
character-set-server=UTF8
ndbcluster #运行NDB存储引擎
ndb-connectstring=192.168.2.150
lower_case_table_names=1 #表名是否区分大小写1为不区分,不然linux下表名是区分大小写的
[MYSQL_CLUSTER]
ndb-connectstring=192.168.2.150 #Mysql Cluster管理节点IP
四、修改mysql集群配置文件(管理节点)
~]# vi /var/lib/mysql-cluster/config.ini
[NDBD DEFAULT]
NoOfReplicas=2
[NDB_MGMD]
#设置管理节点服务器
Nodeid=1
HostName=192.168.2.150
DataDir=/var/lib/mysql-cluster #存放的是管理节点产生的日志和pid文件
[NDBD]
Nodeid=2
HostName=192.168.2.151
DataDir=/data/mysql/var/data/3306
[NDBD]
Nodeid=3
HostName=192.168.2.152
DataDir=/data/mysql/var/data/3306
[MYSQLD]
Nodeid=4
HostName=192.168.2.151
[MYSQLD]
Nodeid=5
HostName=192.168.2.152
#必须有空的mysqld节点,不然数据节点断开后启动有报错
[MYSQLD]
Nodeid=6
[mysqld]
Nodeid=7
~]# chown mysql:mysql /var/lib/mysql-cluster/config.ini
切换用户
~]# su - mysql
启动管理节点
~]# /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
- 备注:命令行中的ndb_mgmd是mysql cluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时。
五、配置数据节点和SQL节点
由于测试环境下数据节点和SQL节点在同一台服务器即192.168.2.151即是数据节点也是SQL节点(192.168.2.152 相同)。因此下面配置适用于两台服务器
进入192.168.2.151服务器 ssh root@192.168.2.151
mysql-cluster安装过程同管理节点相同,下面主要说配置
1、修改mysql 主配置文件 /etc/my.cnf (数据节点 & SQL节点)
~]# vi /etc/my.cnf
[MYSQLD]
user=mysql
character_set_server=utf8
ndbcluster
ndb-connectstring=192.168.2.150
default-storage-engine=ndbcluster #设置默认是NDB存储引擎
datadir=/data/mysql/var/data/3306
basedir=/usr/local/mysql
[MYSQL_CLUSTER]
ndb-connectstring=192.168.2.150 #mysql cluster 管理节点IP
2、使用systemctl创建mysqld的启动文件
~]# vi /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
oroup=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -uroot stop
LimitNOFILE = 5000
将mysql加入开机启动
~]# systemctl enable mysqld.service
192.168.2.152的配置同上
六、测试(如果不对iptables进行配置则先关闭iptables, ~]# systemctl stop iptables.service)
启动数据节点
~]# /usr/local/mysql/bin/nbd --initial
- 备注:命令行中的nbd是mysql cluster的数据服务器,--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时。
启动SQL节点
~]# systemctl start mysqld.service
查看集群状态
~]# /usr/local/mysql/bin/ndb_mgm -e show #显示管理节点和数据节点则配置成功
Connected to Management Server at: 192.168.2.150:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.2.151 (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0, *)
id=3 @192.168.2.152 (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.2.150 (mysql-5.7.22 ndb-7.6.6)
[mysqld(API)] 4 node(s)
id=4 @192.168.2.151 (mysql-5.7.22 ndb-7.6.6)
id=5 @192.168.2.152 (mysql-5.7.22 ndb-7.6.6)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
可以看到管理服务器为192.168.2.150
Connected to Management Server at: 192.168.2.150:1186
管理节点(ndb_mgmd)为192.168.2.150
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.2.150 (mysql-5.7.22 ndb-7.6.6)
数据节点(ndbd)为192.168.2.151、192.168.2.152
[ndbd(NDB)] 2 node(s)
id=2 @192.168.2.151 (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0, *)
id=3 @192.168.2.152 (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0)
SQL节点(mysqld)为192.168.2.151、192.168.2.152
[mysqld(API)] 4 node(s)
id=4 @192.168.2.151 (mysql-5.7.22 ndb-7.6.6)
id=5 @192.168.2.152 (mysql-5.7.22 ndb-7.6.6)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
在SQL节点192.168.2.151上创建数据库并插入数据验证是否自动同步至192.168.2.152
~]# mysql -uroot -proot
mysql> create database cluster_test;
mysql> use cluster_test;
mysql> create table test(id int) engine=ndbcluster;#指定数据库表的引擎为NDB,否则同步失败
mysql> insert into test(id) values(1);
mysql> insert into test(id) values(2);
mysql> insert into test(id) values(3);
mysql> select * from test;
进入192.168.2.152
~]# mysql -uroot -proot
mysql> use cluster_test;#成功则说明数据库已经同步过来了
mysql> select * from test;
+------+
| id |
+------+
| 1 |
| 3 |
| 2 |
+------+
3 rows in set (0.00 sec)
从上述结果可以看到,数据一致说明集群搭建成功
注意事项:
1.在建表的时候一定要用ENGINE=NDB或ENGINE=NDBCLUSTER指定使用NDB集群存储引擎,或用ALTER TABLE选项更改表的存储引擎。
2.NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动生成隐含的主键。
3.Sql节点的用户权限表仍然采用MYISAM存储引擎保存的,所以在一个Sql节点创建的MySql用户只能访问这个节点,如果要用同样的用户访问别的Sql节点,需要在对应的Sql节点追加用户。
七、管理和维护命令
关闭mysql集群:/usr/local/mysql/bin/ndb_mgm -e shutdown
重启mysql集群:/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
重启数据节点:/usr/local/mysql/bin/ndbd
启动SQL节点:/usr/local/mysql/bin/mysqld_safe --user=mysql & 或 systemctl start mysqld.service|service mysqld restart
查看mysql状态:/usr/local/mysql/bin/ndb_mgm -e show
启动顺序:
管理节点 -> 数据节点 -> SQL节点
关闭顺序:
SQL节点 -> 数据节点 -> 管理节点
参考
https://blog.csdn.net/u012974916/article/details/53318000
https://cloud.tencent.com/developer/article/1005764