MySQL Cluster是基于NDB(Network Database)存储引擎的分布式数据库解决方案,核心特性包括数据自动分片(Sharding)、多节点冗余(无单点故障)、实时同步(内存级数据复制)和线性扩展(支持横向增加节点)。适用于需要高可用、高并发的OLTP场景(如电商订单、金融交易)。
下载MySQL Cluster二进制包(如mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64.tar.gz),上传至所有节点的/tmp目录。
若已安装普通MySQL,需先卸载避免冲突:
rpm -e --nodeps mysql-server mysql-client mysql-common # CentOS/RHEL
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql
yum install -y wget gcc gcc-c++ make cmake ncurses-devel libaio libaio-devel
tar xzf /tmp/mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64 /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql
编辑/etc/profile,添加以下内容:
export PATH=/usr/local/mysql/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
执行source /etc/profile使配置生效。
管理节点负责集群的元数据管理(如节点状态、配置信息)和故障监控。
mkdir -p /usr/local/mysql/data
config.ini[ndb_mgmd]
hostname=192.168.1.100 # 管理节点IP
datadir=/usr/local/mysql/data # 配置文件存储目录
[ndbd]
hostname=192.168.1.101 # 数据节点1 IP
datadir=/usr/local/mysql/data # 数据存储目录
[ndbd]
hostname=192.168.1.102 # 数据节点2 IP
datadir=/usr/local/mysql/data
[mysqld]
hostname=192.168.1.103 # SQL节点1 IP
[mysqld]
hostname=192.168.1.104 # SQL节点2 IP
/usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/data/config.ini --initial
--initial:首次启动时初始化配置(后续启动无需此参数)。数据节点负责数据存储和分片处理,需安装NDB存储引擎。
/usr/local/mysql/bin/ndbd --initial
--initial(生成数据目录和日志文件);/usr/local/mysql/bin/ndbd(避免清除已有数据)。SQL节点负责SQL解析和客户端连接,需配置NDB存储引擎。
rm -rf /usr/local/mysql/data/* # 清空默认数据目录
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
记录输出的root初始密码(后续登录需使用)。
/usr/local/mysql/bin/mysqld_safe --user=mysql &
编辑/etc/my.cnf,添加以下内容:
[mysqld]
ndbcluster # 启用NDB存储引擎
ndb-connectstring=192.168.1.100 # 管理节点IP
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
[mysql_cluster]
ndb-connectstring=192.168.1.100
systemctl restart mysqld # 或使用 mysqld_safe 重启
/usr/local/mysql/bin/ndb_mgm
ndb_mgm> SHOW
正常输出应包含:
ndb_mgmd)状态为running;ndbd)状态为connected;mysqld)状态为running。mysql -u root -p # 输入初始密码
CREATE DATABASE test_cluster;
USE test_cluster;
CREATE TABLE t_user (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
) ENGINE=NDBCLUSTER; -- 必须指定NDB引擎,否则不同步
在SQL节点1插入数据:
INSERT INTO t_user (name, email) VALUES ('Alice', 'alice@example.com');
在SQL节点2查询数据:
USE test_cluster;
SELECT * FROM t_user;
若能查询到插入的数据,说明数据同步成功。
config.ini配置错误;ndb_mgm),确认config.ini中的IP和端口正确。my.cnf配置错误(如ndb-connectstring指向错误的管理节点IP);my.cnf中的ndb-connectstring参数,确保与管理节点IP一致。SHOW命令中ndbd状态为disconnected);/usr/local/mysql/bin/ndbd),检查网络连通性。DataMemory(数据内存)和DiskData(磁盘数据)参数配置数据存储策略(默认内存+磁盘备份);mysqldump备份数据,避免内存数据丢失。