前言
Mysql Cluster是两项技术的结合:NDB数据库,以及作为SQL前端的MySQL存储引擎。NDB是一个分布式,具备兼容性、非共享的数据库,提供同步复制以及节点间的数据自动分片。(《高性能MySQL》)。
MySQL Cluster基本架构
管理节点(ndb_mgmd)
负责管理其他各节点IP地址、内存分配以及保存数据路径;
数据节点(ndbd)
负责存储数据;
SQL节点(mysqld)
提供SQL 的API调用功能,简单地讲就是mysqld服务器
其中管理节点最好单独部署,数据节点和SQL节点可以部署在一起;
准备工作
安装包下载
链接: MySQL :: Download MySQL Cluster.
集群规划
节点 | IP |
管理节点 | 10.16.1.90 |
数据节点 | 10.16.1.91 |
数据节点 | 10.16.1.92 |
SQL节点 | 10.16.1.91 |
SQL节点 | 10.16.1.92 |
彻底卸载以前安装的mysql
需要将以上各IP中msyql服务彻底卸载,包括关闭mysql相关服务、卸载软件以及删除与mysql相关的文件;
端口开放
集群中个节点需要开放相应端口,MySQL Cluster所用端口为1186、2202,mysql端口为3306。
集群搭建
管理节点
MySQL Cluster 软件安装
解压缩安装包后,复制到指定位置。
[root@10 ~]# cd /home [root@10 home]# tar -xvf mysql-cluster-gpl-7.5.31-linux-glibc2.12-x86_64.tar.gz
[root@10 home]# mkdir /usr/local/mysql [root@10 home]# mv mysql-cluster-gpl-7.5.31-linux-glibc2.12-x86_64/* /usr/local/mysql
添加用户权限
添加安装需要相关用户权限
[root@10 home]# groupadd mysql
[root@10 home]# useradd mysql -g mysql
[root@10 home]# cd /usr/local/mysql/
[root@10 mysql]# chown -R root .
管理程序拷贝
[root@10 mysql]# cp bin/ndb_mgm* /usr/local/bin
[root@10 mysql]# cd /usr/local/bin
[root@10 mysql]# chmod +x ndb_mgm*
配置文件
新建管理节点的配置文件config.ini
[root@10 mysql-cluster]# cd /var/lib/mysql/
[root@10 mysql-cluster]# touch config.ini
[root@10 mysql-cluster]# vim config.ini
config.ini配置内容为:
[NDBD DEFAULT]
NoOfReplicas =2
DataMemory = 512M
IndexMemory = 64M
[NDB_MGMD]
NodeId=1
hostname =10.16.1.90
datadir =/var/lib/mysql-cluster
[NDBD]
NodeId =2
hostname =10.16.1.91
datadir =/usr/local/mysql/data
[NDBD] NodeId =3
hostname =10.16.1.92
datadir =/usr/local/mysql/data
[mysqld]
NodeId =4
hostname =10.16.1.91
[mysqld]
NodeId =5
hostname =10.16.1.92
其中:
[NDBD DEFAULT]
代表每个ndbd节点的默认设置,包括:
- NoOfReplicas :每份数据在不同节点上的存储份数,根据实际情况确定
- DataMemory :数据存储占用内存
- IndexMemory : 索引存储占用内存
[NDB_MGMD]
代表管理节点的设置,包括:
- NodeId:节点ID
- hostname:管理节点IP地址,推荐采用内网IP
- datadir:管理节点数据存储位置
[NDBD]
代表ndb数据节点的配置,包括:
- NodeId:节点ID
- hostname:数据节点IP地址,推荐采用内网IP
- datadir:数据节点数据存储位置
[msyqld]
代表SQL节点的设置,包括:
- NodeId:节点ID
- hostname:SQL节点IP地址,推荐采用内网IP
管理节点启动
[root@10 mysql]# /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial --ndb-nodeid=1
MySQL Cluster Management Server mysql-5.7.43 ndb-7.5.31
显示MySQL Cluster Management Server mysql-5.7.43 ndb-7.5.31则代表安装正确
查看管理节点运行情况:
[root@10 ~]# /usr/local/bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration -
--------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 10.16.1.91)
id=3 (not connected, accepting connect from 10.16.1.92)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.16.1.90 (mysql-5.7.43 ndb-7.5.31)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.16.1.91)
id=5 (not connected, accepting connect from 10.16.1.92)
由于数据节点和sql节点尚未启动,所以看不到节点信息。
管理节点初始化之后,再启动就不需要–initial后缀,管理节点的关闭命令为:
/usr/local/bin/ndb_mgm -e shutdown
常见问题
- 找不到相关目录:新建相关目录
- hostname无法连接:请确认IP地址是否可用,并且能够网卡配置与host配置支持使用该IP地址。
数据节点
MySQL Cluster 软件安装
解压缩安装包后,复制到指定位置,与管理节点一致。
[root@10 ~]# cd /home
[root@10 home]# tar -xvf mysql-cluster-gpl-7.5.31-linux-glibc2.12-x86_64.tar.gz
[root@10 home]# mkdir /usr/local/mysql
[root@10 home]# mv mysql-cluster-gpl-7.5.31-linux-glibc2.12-x86_64/* /usr/local/mysql
添加用户权限
[root@10 home]# groupadd mysql [root@10 home]# useradd mysql -g mysql
配置文件
由于本文中数据节点与SQL节点共用一台机器,所以配置文件my.cnf中既有数据节点配置也有SQL节点配置。
[root@10 home]# vim /etc/my.cnf
my.cnf内容:
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
symbolic-links=0
ndbcluster
ndb-connectstring=10.16.1.90
port=3306
#设置数据库缺省引擎为NDBCLUSTER,否则数据表不会进行同步
default-storage-engine=NDBCLUSTER
[mysql_cluster]
ndb-connectstring=10.16.1.90
[ndbd]
ndb-connectstring=10.16.1.90
[mysqld_safe]
log-error=/usr/local/mysql/logs/error.log
pid-file=/usr/local/mysql/logs/mysql.pid
[mysql]
socket=/usr/local/mysql/sock/mysql.sock
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
其中,需要注意的配置为:
datadir:需要与管理节点config.ini中的数据节点datadir保持一致,且datadir必须设置为/usr/local/mysql/data,basedir必须设置为/usr/local/mysql,否则运行会报错!
ndb-connectstring:配置文件中都设置为管理节点IP地址。
数据节点启动
[root@10 mysql]# ./bin/ndbd --initial
2021-01-08 15:38:44 [ndbd] INFO -- Angel connected to '10.16.1.90:1186'
2021-01-08 15:38:44 [ndbd] INFO -- Angel allocated nodeid: 3
数据节点初始化后,之后再次启动就不需要–initial后缀。
回到管理节点,查看集群状态,发现数据节点已经连接。
[root@mysqladminnode mysql-cluster]# /usr/local/bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 10.16.1.91)
id=3 @10.16.1.92 (mysql-5.7.43 ndb-7.5.31, starting, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.16.1.90 (mysql-5.7.43 ndb-7.5.31)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.16.1.91)
id=5 (not connected, accepting connect from 10.16.1.92)
常见问题
- 找不到相关文件和文件夹:新建相关文件和文件夹。
- IP地址无法连接:查看管理节点和数据节点本身网卡设置与端口开放情况。
SQL节点
由于本文中数据节点与SQL节点部署在同一台机器上,所以不需要再进行软件安装,配置文件也已经配置完成。
添加用户权限
[root@10 home]# cd /usr/local/mysql
[root@10 mysql]# mkdir logs
[root@10 mysql]# mkdir data
[root@10 mysql]# mkdir sock
[root@10 mysql]# chown -R mysql:mysql ./
根据配置文件创建相关文件夹,本文为了方便直接将log和data文件都建立在安装目录下,建议实际使用时修改位置,但是各文件夹都需要增加mysql用户权限。
mysqld 服务初始化
需要对mysqld服务进行初始化操作。
[root@10 mysql-cluster]# ./bin/mysqld --initialize --user=mysql
初始化操作需要一定时间执行,执行完成后末尾会有初始密码,改密码为需要记录。
初始化完成后,将mysql程序复制到启动目录下,方便mysqld服务启动。
[root@10 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@10 mysql]# chmod +x /etc/init.d/mysqld
[root@10 mysql]# chkconfig -add mysqld
[root@10 mysql]# service mysqld start
Starting MySQL.... SUCCESS!
回到管理节点,查看集群状态,发现数据节点已经连接。
[root@mysqladminnode mysql-cluster]# /usr/local/bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.16.1.91 (mysql-5.7.43 ndb-7.5.31, Nodegroup: 0, *)
id=3 @10.16.1.92 (mysql-5.7.43 ndb-7.5.31, starting, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.16.1.90 (mysql-5.7.43 ndb-7.5.31)
[mysqld(API)] 2 node(s)
id=4 @10.16.1.91 (mysql-5.7.43 ndb-7.5.31)
id=5 (not connected, accepting connect from 10.16.1.92)
常见问题
- 必须启动全部数据节点才能启动SQL节点,否则连接不上
- mysqld初始化时需要data目录为空
- 出现缺少文件、目录错误时建议新建相关文件、文件夹
集群启停
启动顺序为:1.管理节点;2.数据节点(全部);3.SQL节点。
测试
在SQL节点通过mysqld服务修改密码并开启远程访问权限,通过navicat工具测试集群是否正常工作。
注意:创建数据表时,必须指定数据库引擎为NDBCLUSTER,否则SQL节点和数据节点间无法同步数据表。
参考
本文基于《MySQL Cluster集群搭建_mysql集群业务代码是连接管理节点还是连接sql节点_我会大跳的博客-CSDN博客》补充完善。