千家信息网

MySQL Cluster搭建与测试

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,1、服务器准备1) MySQL节点1 10.41.1.852) MySQL节点2 10.41.1.843) ndb节点1 10.41.1.834) ndb节点2 10.41.1.825) 管理节点 1
千家信息网最后更新 2026年11月02日MySQL Cluster搭建与测试

1、服务器准备
1) MySQL节点1 10.41.1.85
2) MySQL节点2 10.41.1.84
3) ndb节点1 10.41.1.83
4) ndb节点2 10.41.1.82
5) 管理节点 10.41.1.81
2、测试环境
5台服务器均一样,不是必须的,所以服务器均已关闭iptables和selinux,生产环境请根据实际情况自行决定
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #永久关闭防火墙
setenforce 0 #临时关闭selinux
sed -i 's#SELINUX=enforcing#SELINUX=disable#g' /etc/selinux/config #永久关闭selinux
getenforce #查看当前状态
3、软件准备
mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz
4、管理节点安装配置
建立目录:
mkdir /usr/local/mysql/bin -p
mkdir /data/mysql-cluster -p
准备文件
cp ./mysql-cluster-gpl-7.2.4-linux2.6-x86_64/bin/ndb_mgm /usr/local/mysql/bin/
cp ./mysql-cluster-gpl-7.2.4-linux2.6-x86_64/bin/ndb_mgmd /usr/local/mysql/bin/
环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
source /etc/profile
配置
cd /data/mysql-cluster/
touch config.ini
cat /data/mysql-cluster/config.ini
[NDBD DEFAULT]
NoOfReplicas=1
DataMemory=64M
IndexMemory=16M
#管理节点
[NDB_MGMD]
nodeid=1
hostname=10.41.1.81
datadir=/data/mysql-cluster
#第一个 ndbd 节点:
[NDBD]
nodeid=2
hostname=10.41.1.83
datadir=/data/mysql-cluster/data
#第二个 ndbd 节点:
[NDBD]
nodeid=3
hostname=10.41.1.82
datadir=/data/mysql-cluster/data

SQL节点:

[MySQLD]
nodeid=4
hostname=10.41.1.85
[MySQLD]
nodeid=5
hostname=10.41.1.84
[MySQLD]

6、NDB节点安装(数据节点)
数据节点1: 10.41.1.83
数据节点2: 10.41.1.82
建立用户
useradd mysql
解压mysql cluster
tar zxf mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz
mv mysql-cluster-gpl-7.2.4-linux2.6-x86_64/ /usr/local/mysql/
授权
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
建立数据目录,并授权(用来在没使用NDB时存放的数据)
mkdir /data/mysql -p
chown -R mysql.mysql /data/mysql/
初始化
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql
授权root
chown -R root .
配置
\cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
source /etc/profile
建立目录(存放NDB节点的数据)
mkdir /data/mysql-cluster/data -p
修改/etc/my.cnf文件
cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
basedir= /usr/local/mysql
ndbcluster
ndb-connectstring=10.41.1.81
[MYSQL_CLUSTER]
ndb-connectstring=10.41.1.81
说明:
如果希望尽可能的各环境保持一致,建议在NDB节点也和SQL节点一样安装整个带有 NDB Cluster 存储引擎的MySQL Server。(NDB节点可以不用初始化数据,自己已经测试,但是我依然会初始化)安装细节和上面的SQL节点完全一样。
7、安装 MySQL 节点
sql节点1: 10.41.1.85
sql节点2: 10.41.1.84
建立用户
useradd mysql
解压mysql cluster
tar zxf mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz
mv mysql-cluster-gpl-7.2.4-linux2.6-x86_64/ /usr/local/mysql/
授权
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
建立数据目录,并授权(用来在没使用NDB时存放的数据)
mkdir /data/mysql -p
chown -R mysql.mysql /data/mysql/
初始化
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql
授权root
chown -R root .
配置
\cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
source /etc/profile
建立目录(存放NDB节点的数据)
mkdir /data/mysql-cluster/data -p
修改/etc/my.cnf文件
cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
basedir= /usr/local/mysql
ndbcluster
ndb-connectstring=10.41.1.81
[MYSQL_CLUSTER]
ndb-connectstring=10.41.1.81

开始使用Cluster:
8、启动
启动顺序为:管理节点->数据节点->SQL节点(非常重要)
a)启动管理节点:
ndb_mgmd -f /data/mysql-cluster/config.ini
检查:
netstat -ntlp | grep 1186
ps -ef | grep ndb_mgmd | grep -v grep
b)启动NDB(数据节点)
注意:
只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加-initial参数!
ndbd --initial
检查:
ps -ef | grep ndbd | grep -v grep
c)启动SQL节点(启动mysql服务)
/etc/init.d/mysqld start
9、ndb_mgm工具
a)show命令查看集群状态
ndb_mgm> show
Cluster Configuration

[ndbd(NDB)] 2 node(s)
id=2 @10.41.1.83 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0, Master)
id=3 @10.41.1.82 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.41.1.81 (mysql-5.5.19 ndb-7.2.4)

[mysqld(API)] 3 node(s)
id=4 @10.41.1.85 (mysql-5.5.19 ndb-7.2.4)
id=5 @10.41.1.84 (mysql-5.5.19 ndb-7.2.4)
id=6 (not connected, accepting connect from any host)
10、测试1-NDB存储引擎测试
(1)在任意一个SQL节点(我这里选择10.41.1.85)的test_cluster库中创建测试表test_table01(不指定引擎)和test_table02(NDB存储引擎),设置存储引擎为NDB,并插入两条测试数据:
mysql> create table test_table01( id int, name varchar(20) ) engine=ndb;
mysql> create table test_table02( id int, name varchar(20) ) ;
mysql> show tables;
+------------------------+
Tables_in_test_cluster
+------------------------+
test_table01
test_table02
+------------------------+
2 rows in set (0.01 sec)
另一sql节点:
mysql> show tables;
+------------------------+
Tables_in_test_cluster
+------------------------+
test_table02
+------------------------+
1 row in set (0.02 sec)
说明只有ndb引擎才同步。
(2)在test_table02中插入两条测试数据
mysql> insert into t1 select 1,'yayun';
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> insert into t1 select 1,'atlas';
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
两个sql节点都能查到数据。
mysql> select * from test_table02;
+------+-----------+
id | name
+------+-----------+
1 | cluster01
2 | cluster02
+------+-----------+
2 rows in set (0.00 sec)
显然,两个SQL节点查询的数据是一致。
(3)在SQL节点10.41.1.85上把测试表test_table02引擎改为MyISAM,再次插入测试数据:
mysql> alter table test_table02 engine=myisam;
Query OK, 2 rows affected (0.90 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into test_table02 value(3,'cluster03');#10.41.1.84
ERROR 1412 (HY000): Table definition has changed, please retry transaction
插入数据直接报错。

11、单点故障测试
管理节点,不需要特殊的配置,只需要将管理工具和配置文件放置多台服务器上即可。
SQL节点
10.41.1.84上的MySQL服务停止
管理节点:
[mysqld(API)] 3 node(s)
id=4 @10.41.1.85 (mysql-5.5.19 ndb-7.2.4)
id=5 (not connected, accepting connect from 10.41.1.84)
id=6 (not connected, accepting connect from any host)
10.41.1.85:
mysql> insert into test_table02 value(4,'cluster04');
Query OK, 1 row affected (0.00 sec)
mysql> select from test_table02;
+------+-----------+
id | name
+------+-----------+
2 | cluster02
3 | cluster03
4 | cluster04
1 | cluster01
+------+-----------+
4 rows in set (0.00 sec)
10.41.1.85服务开启:
mysql> select
from test_table02;
+------+-----------+
id | name
+------+-----------+
3 | cluster03
4 | cluster04
1 | cluster01
2 | cluster02
+------+-----------+
4 rows in set (0.01 sec)
数据又同步过来了

NDB(数据节点)
数据节点10.41.1.82上的NDB进程停止
[root@node3 mysql]# ps -ef | grep ndbd
root 15969 1 0 14:37 ? 00:00:04 ndbd --initial
root 15970 15969 1 14:37 ? 00:00:47 ndbd --initial
root 16029 15801 0 15:36 pts/3 00:00:00 grep --color=auto ndbd
killall ndbd
任意sql节点查询:
mysql> select from test_table02;
ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER
无法查询
10.41.1.81:
grep 'NoOfReplicas' /data/mysql-cluster/config.ini
NoOfReplicas=1 #每个数据节点的镜像数量
将配置文件中的NoOfReplicas改为2,按照前面的步骤重新启动集群,无法启动,NoOfReplicas参数无法临时更改,我们开始就需要设置好,不要到后面才想到更改,那时就悲剧了。如果重新ndbd --initial,将会丢失所有数据。
NoOfReplicas=2:
管理节点需要--initial参数启动
ndb_mgmd --initial -f /data/mysql-cluster/config.ini
数据节点(NDB)启动还要用ndbd --initial,数据丢失
mysql> select
from test_table02;
ERROR 1146 (42S02): Table 'test_cluster.test_table02' doesn't exist
mysql> create table test(
-> id int,
-> name varchar(20)
-> ) engine=ndb;
Query OK, 0 rows affected (0.85 sec)

mysql> show tables;
+------------------------+
Tables_in_test_cluster
+------------------------+
test
+------------------------+
1 row in set (0.01 sec)

mysql> insert into test value(1,'one');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test value(2,'two');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+------+
id | name
+------+------+
1 | one
2 | two
+------+------+
2 rows in set (0.00 sec)
再次停掉数据节点10.41.1.82:
两节点都可以正常数据查询
12、MySQL Cluster集群的关闭
关闭顺序:SQL节点->数据节点->管理节点(在MySQL Cluster环境中,NDB节点和管理节点的关闭都可以在管理节点的管理程序中完成,也可以分节点关闭,但是SQL节点却没办法。所以,在关闭整个MySQL Cluster环境或者关闭某个SQL节点的时候,首先必须到SQL节点主机上来关闭SQL节点程序。关闭方法和MySQL Server的关闭一样。)
(1)SQL节点关闭
/etc/init.d/mysqld stop
(2)(NDB)数据节点关闭
ndbd stop
(3)管理节点关闭
ndb_mgm> shutdown或者命令行:ndb_mgm -e shutdown
总结:
参数NoOfReplicas无法临时更改。
selinux,iptables等相关问题。
注:参考大量网络数据。

节点 数据 管理 测试 环境 配置 引擎 服务 文件 目录 参数 服务器 存储 查询 变量 集群 准备 一致 两个 再次 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州找大状互联网科技有限公司 互联网科技行业发展 科技互联网项目 港股互联网科技股 互联网科技的英文 睿民互联网科技 互联网金融 科技创新 互联网金融科技委员会 银川新华互联网科技职业技术培训学校图片 互联网企业和科技型企业 金融科技与互联网金融相同和不同 互联网科技教育视频 华夏互联网科技业 佛山市翊博互联网络科技有限公司 长沙茂晟互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 区块链结合互联网科技 互联网公司高科技产品 伍佰万互联网科技怎么赚钱 互联网企业和网络科技有限公司 上海睿民互联网科技有限公司 深圳科技互联网 深圳互联网络科技有限公司 苏州互联网科技贷款公司 美国互联网前沿科技 银川新华互联网科技学校地址 昊天互联网科技有限公司 四川慕妮娅互联网科技有限公司 图游互联网科技 亚光科技低轨卫星互联网
0