MySQL集群采用无共享架构,核心是将管理、数据、SQL三类节点独立部署,管理节点负责集群配置与状态监控,数据节点存储实际数据,SQL节点对外提供数据库访问服务,三类节点各司其职可以提升整体稳定性与扩展性。

环境准备
准备三台服务器,分别规划为管理节点、数据节点、SQL节点,也可以根据实际需求调整节点数量,本文以单节点部署三类角色为例,系统使用CentOS 7,MySQL集群版本为MySQL Cluster 7.6。
节点角色说明
- 管理节点(ndb_mgmd):负责维护集群配置文件,监控所有节点状态,不存储业务数据
- 数据节点(ndbd/ndbmtd):存储集群的实际数据,执行数据的读写操作,支持多节点冗余
- SQL节点(mysqld):即常规的MySQL服务实例,对外提供SQL接口,接收客户端的查询与写入请求
安装MySQL集群软件
在三台服务器上都安装MySQL集群的二进制包,解压后将相关文件放到/usr/local/mysql目录,执行初始化操作。
# 解压安装包 tar -zxvf mysql-cluster-gpl-7.6.15-linux-glibc2.12-x86_64.tar.gz mv mysql-cluster-gpl-7.6.15-linux-glibc2.12-x86_64 /usr/local/mysql # 创建mysql用户 useradd -s /sbin/nologin mysql chown -R mysql:mysql /usr/local/mysql # 初始化基础目录 cd /usr/local/mysql ./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
配置管理节点
管理节点需要单独的配置文件,定义集群中所有节点的信息,默认配置文件路径为/var/lib/mysql-cluster/config.ini。
# 管理节点配置文件 config.ini [ndbd default] NoOfReplicas=2 # 数据副本数,至少设置为2 DataMemory=80M # 数据节点内存大小 IndexMemory=18M # 索引内存大小 [ndb_mgmd] NodeId=1 hostname=192.168.0.1 # 管理节点IP datadir=/var/lib/mysql-cluster # 管理节点数据目录 [ndbd] NodeId=2 hostname=192.168.0.2 # 数据节点IP datadir=/usr/local/mysql/data # 数据节点数据目录 [mysqld] NodeId=3 hostname=192.168.0.3 # SQL节点IP
创建管理节点的数据目录并启动服务:
mkdir -p /var/lib/mysql-cluster /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
配置数据节点
数据节点需要修改MySQL的配置文件my.cnf,添加ndb集群相关参数。
# 数据节点 my.cnf 配置 [mysqld] ndbcluster # 启用ndb集群引擎 ndb-connectstring=192.168.0.1 # 管理节点IP [mysql_cluster] ndb-connectstring=192.168.0.1 # 管理节点连接地址
启动数据节点服务:
/usr/local/mysql/bin/ndbd --initial
首次启动需要加--initial参数,后续正常启动可以去掉该参数。
配置SQL节点
SQL节点的my.cnf配置需要指定ndb集群连接信息,同时设置MySQL的基础运行参数。
# SQL节点 my.cnf 配置 [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock ndbcluster # 启用ndb集群引擎 ndb-connectstring=192.168.0.1 # 管理节点IP user=mysql [mysql_cluster] ndb-connectstring=192.168.0.1 # 管理节点连接地址
启动SQL节点的MySQL服务:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
验证集群状态
在管理节点执行集群状态查看命令,确认所有节点都正常上线。
/usr/local/mysql/bin/ndb_mgm -e show
正常输出会显示三个节点的状态都为connected,说明集群搭建成功。
测试集群功能
在SQL节点登录MySQL,创建ndb存储引擎的表,插入数据后可以在其他节点验证数据同步情况。
-- 登录SQL节点MySQL
/usr/local/mysql/bin/mysql -u root -p
-- 创建测试数据库
CREATE DATABASE test_cluster;
USE test_cluster;
-- 创建ndb存储引擎的表
CREATE TABLE user_info (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=NDBCLUSTER;
-- 插入测试数据
INSERT INTO user_info VALUES (1, '测试用户');如果数据插入成功,且在管理节点查看数据节点状态正常,说明三种节点分离的MySQL集群已经可以正常提供服务。