前言

此篇博客用以介绍 MySQL Cluster 集群部署方法

一、节点规划

序号    IP地址          节点名称
1      172.16.1.201    mysql-manage
2      172.16.1.202    mysql-sql1
3      172.16.1.203    mysql-sql2

二、系统版本

[root@node1 ~]# cat /etc/redhat-release   
CentOS Linux release 7.6.1810 (Core)

三、关闭防火墙

[root@node1 ~]# systemctl stop firewalld  
[root@node1 ~]# systemctl disable firewalld

四、关闭 selinux

[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  
[root@node1 ~]# setenforce 0

五、配置 hosts

[root@node1 ~]# cat /etc/hosts
 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 
 172.16.1.201 mysql-manage
 172.16.1.202 mysql-sql1
 172.16.1.203 mysql-sql2

六、下载软件包

推荐使用国内镜像,在 windows 选择版本后下载 
http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5 将下载后的包上传至服务器 /usr/local 下

七、安装配置管理节点

解压

cd /usr/local  
tar xf mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64.tar.gz

取出需要命令

cd mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64  
cp bin/ndb_mgm* /usr/local/bin

新建配置文件并且初始化管理节点

mkdir /var/lib/mysql-cluster  
ln -s /usr/local/mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64 /usr/local/mysql  
vi /var/lib/mysql-cluster/config.ini  
[ndbd default]
NoOfReplicas=2
DataMemory=512M
IndexMemory=18M

[ndb_mgmd]
HostName=172.16.1.201
DataDir=/var/lib/mysql-cluster

[ndbd]
HostName=172.16.1.202
DataDir=/var/lib/mysql-cluster

[ndbd]
HostName=172.16.1.203
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.16 ndb-7.5.12证明初始化成功  

使用ndb_mgm命令查看管理状态  
ndb_mgm>show(使用show命令查看管理情况,当数据节点配置完毕之后,我们再用这个命令查看和管理)

八、安装配置数据和 mysql 节点

以下的所有操作需要在另外两台机器进行相同的操作

新增用户组mysql和用户msyql

groupadd mysql  
useradd -g mysql -s /bin/false mysql

新建文件夹并赋予权限

mkdir /var/lib/mysql-cluster  
chown root:mysql /var/lib/mysql-cluster

将包传至服务器/usr/local下

scp /usr/local/mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64.tar.gz root@172.16.1.202:/uar/local  
scp /usr/local/mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64.tar.gz root@172.16.1.203:/uar/local

解压并创建软链接

cd /usr/local
tar xf mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64.tar.gz  
ln -s /usr/local/mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64 /usr/local/mysql

mysql初始化以及启动

cd /usr/local/mysql/bin  

一共需要两次初始化
第一次初始化  
./mysqld --initialize  

修改权限  
cd /usr/local/mysql  
chown -R root .  
chgrp -R mysql .  

复制启动文件并启动mysql  
cp support-files/mysql.server /etc/rc.d/init.d/  
chmod +x /etc/rc.d/init.d/mysql.server  
chkconfig --add mysql.server  
/etc/init.d/mysql.server start  

第一次启动会报错,不要慌,再次初始化  
cd /usr/local/mysql/bin  
./mysqld --initialize  

这时会在上层目录生成data目录  
cd /usr/local/mysql  
chown -R mysql. data  

配置数据节点(ip均填写管理节点)  
vi /etc/my.cnf  
[mysqld]
ndbcluster
ndb-connectstring=172.16.1.201

[mysql_cluster]
ndb-connectstring=172.16.1.201  

配置完成后,再次启动mysql即可  
/etc/init.d/mysql.server start

修改数据库密码并保持两节点相同(密码会在初始化时生成)

mysql -uroot -p密码  
alter user 'root'@'localhost' identified by '密码';  
修改完记得exit后用新密码再次登录尝试

ndb节点初始化

/usr/local/mysql/bin/ndbd --initial  
如果出现下述现象就成功了  

2019-03-28 14:04:07 [ndbd] INFO     -- Angel connected to '172.16.1.201:1186' 
2019-03-28 14:04:07 [ndbd] INFO     -- Angel allocated nodeid: 2

回到管理节点查看

-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 172.16.1.201:1186
Cluster Configuration
---------------------
[ndbd(NDB)]    2 node(s)
id=2    @172.16.1.202  (mysql-5.7.24 ndb-7.5.12, Nodegroup: 0, *)
id=3    @172.16.1.203  (mysql-5.7.24 ndb-7.5.12, Nodegroup: 0)

[ndb_mgmd(MGM)]    1 node(s)
id=1    @172.16.1.201  (mysql-5.7.24 ndb-7.5.12)

[mysqld(API)]    2 node(s)
id=4    @172.16.1.203  (mysql-5.7.24 ndb-7.5.12)
id=5    @172.16.1.202  (mysql-5.7.24 ndb-7.5.12)

九、检查同步状态

在一台上面创建数据库,看另一台是否被同步,然后创建表,然后新增删除等等
唯一需要注意的是,创建表的时候必须选择表的引擎为NDBCLUSTER,否则表不会进行同步
如果使用sql创建表,命令为:
CREATE TABLE tablename (age INT) ENGINE=NDBCLUSTER

十、启动和关闭

启动mysql集群,启动顺序为:管理节点→数据节点→SQL节点
启动命令常用的可以复制到/usr/local
关闭时只需要关闭管理节点,后面的数据节点会同时被关闭,mysql就和原来一样即可
管理节点关闭命令:ndb_mgm -e shutdown
(执行完成之后管理节点会关闭,数据节点也会关闭,但SQL节点不会,也就是数据库服务需要手动到每一台服务器上停止以保证数据同步)