概述
本章,你将学习如何在实际生产环境下部署最小化的 MySQL Cluster。
通过 前文 可知 —— 您至少需要 4 台计算机才能组建一个最小化的集群环境:
- 管理节点(mgmd)
- SQL 节点(mysqld)
- 数据节点 A (ndbd)
- 数据节点 B (ndbd)
基础信息
参阅下表:
| 操作系统 | 操作系统环境 | IP 地址 | 硬件信息 | NDB Cluster 版本 | 节点类型 |
|---|---|---|---|---|---|
| RL 8.10 | 纯命令行 | 192.168.100.10/24 | 1 core;4GB 内存;50GB 存储 | 8.4.8 LTS | 管理节点 |
| RL 8.10 | 纯命令行 | 192.168.100.12/24 | 1 core;4GB 内存;50GB 存储 | 8.4.8 LTS | 数据节点 A |
| RL 8.10 | 纯命令行 | 192.168.100.14/24 | 1 core;4GB 内存;50GB 存储 | 8.4.8 LTS | 数据节点 B |
| RL 8.10 | 纯命令行 | 192.168.100.16/24 | 1 core;4GB 内存;50GB 存储 | 8.4.8 LTS | SQL 节点 |
管理节点(192.168.100.10/24)
安装
步骤如下:
# 下载
Shell > wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.4/mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz
# 解压归档文件,并从归档文件中提取出文件
Shell > tar -xvf mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz -C /usr/local/src/
## 管理节点只需要 ndb_mgm 和 ndb_mgmd 这两个二进制可执行文件,将这两个文件移动到 /usr/local/bin/ 目录中
Shell > cd /usr/local/src/mysql-cluster-8.4.8-linux-glibc2.28-x86_64/bin/ && cp ndb_mgm* /usr/local/bin/
# 添加执行权限
Shell > chmod a+x /usr/local/bin/*
Shell > ls -l /usr/local/bin/
总用量 41484
-rwxr-xr-x 1 root root 15128728 3月 7 11:47 ndb_mgm
-rwxr-xr-x 1 root root 27345768 3月 7 11:47 ndb_mgmd
配置文件
管理节点的配置文件为 config.ini,主要告知管理节点需要:
- 维护多少数量的片段副本
- 为每个数据节点上的数据与索引分配多少内存
- 在哪里找到数据节点
- 在哪里找到任意的 SQL 节点
- 在哪里将数据保存到每个数据节点的磁盘上
该文件有时也称为 全局配置文件,仅由管理节点进行读取,然后将其中包含的信息分发给参与集群的所有进程。有关该文件的详细说明,参阅这里 —— https://dev.mysql.com/doc/refman/8.4/en/mysql-cluster-config-example.html#mysql-cluster-config-ini-sections
您可以将该文件存放在任意的位置,稍后启动进程时指定该文件即可。
先创建管理节点需要的目录:
Shell > mkdir /etc/mysql-cluster/
Shell > mkdir /var/log/mysql-cluster/
示例配置(ini 文件的注释以行开头的 "#" 为标准,实际的文件内容应该将这些非标准的注释行删除,在这里只是为了方便读者阅读):
Shell > vim /etc/mysql-cluster/config.ini
[ndbd default]
# 影响所有数据节点上 ndbd 进程的选项(键值对):
NoOfReplicas=2 # 段副本的数量。数据节点的数量除以该值得到的必须是整数。当前数据节点的数量是2,2/2=1
DataMemory=98M # 要为数据存储分配多少内存,分配多少内存取决于物理内存的多少。值范围 1M~16T
[ndb_mgmd]
# 管理节点的选项(键值对):
HostName=192.168.100.10 # 管理节点的主机名或 IP 地址
DataDir=/var/log/mysql-cluster # 管理节点存放日志文件的目录
[ndbd]
# 每个数据节点都有一个 [ndbd]
HostName=192.168.100.12 # 主机名 或 IP地址
NodeId=2 # 节点 ID 号,值范围 1~144,必须是唯一的
DataDir=/usr/local/mysql/data # 该数据节点存放数据文件的目录
[ndbd]
HostName=192.168.100.14
NodeId=3
DataDir=/usr/local/mysql/data # 该数据节点存放数据文件的目录
[mysqld]
# SQL节点 选项:
HostName=192.168.100.16 # 主机名 或 IP 地址
管理节点的配置文件可使用 6 个不同的标题(如下所示),标题的下面则是具体的键值对。而对于其他的标题,则需要将其书写在最上面(例如上面示例的 [ndbd default] 标题)。
| 标题 | 说明 |
|---|---|
| computer | 定义集群主机。对于一个可行的 NDB Cluster 而言不是必须的,但有时在大型集群可以作为使用的方便。键值对请参阅 https://dev.mysql.com/doc/refman/8.4/en/mysql-cluster-computer-definition.html |
| ndbd | 定义集群的数据节点(ndbd 进程),可书写多个。键值对请参阅 https://dev.mysql.com/doc/refman/8.4/en/mysql-cluster-ndbd-definition.html |
| mysqld | 定义集群的 SQL 节点(也称 API 节点)。键值对请参阅 https://dev.mysql.com/doc/refman/8.4/en/mysql-cluster-api-definition.html |
| mgm 或 ndb_mgmd | 定义管理节点。键值对请参阅 https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-mgm-definition.html |
| tcp | 定义集群节点之间的 TCP/IP 连接。TCP/IP 是默认的传续协议,通常来说,此处不需要具体设置 |
| shm | 定义节点之间的共享内存连接。该功能属于实验性质,在 MySQL NDB Cluster 8.x 中默认开启 |
| sci | 定义集群节点之间的 "可扩展一致性接口(Scalable Coherent Interface)" 连接。 在 NDB Cluster 8.4 中不支持 |
数据节点 A(192.168.100.12/24)
安装
# 下载
Shell > wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.4/mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz
# 解压归档文件,并从归档文件中提取出文件
Shell > tar -xvf mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz -C /usr/local/src/
# 数据节点仅需要 ndbd 和 ndbmtd 这两个可执行文件
## 将这两个文件复制到 /usr/local/bin/ 目录中
Shell > cd /usr/local/src/mysql-cluster-8.4.8-linux-glibc2.28-x86_64/bin/ && cp -p ndbd /usr/local/bin/ && cp -p ndbmtd /usr/local/bin/
# 赋予执行权限
Shell > chmod a+x /usr/local/bin/*
配置文件
数据节点的配置文件为 /etc/my.cnf,示例配置如下:
Shell > vim /etc/my.cnf
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.100.10
数据节点 B(192.168.100.14/24)
安装
# 下载
Shell > wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.4/mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz
# 解压归档文件,并从归档文件中提取出文件
Shell > tar -xvf mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz -C /usr/local/src/
# 数据节点仅需要 ndbd 和 ndbmtd 这两个可执行文件
## 将这两个文件复制到 /usr/local/bin/ 目录中
Shell > cd /usr/local/src/mysql-cluster-8.4.8-linux-glibc2.28-x86_64/bin/ && cp -p ndbd /usr/local/bin/ && cp -p ndbmtd /usr/local/bin/
# 赋予执行权限
Shell > chmod a+x /usr/local/bin/*
配置文件
数据节点的配置文件为 /etc/my.cnf,示例配置如下:
Shell > vim /etc/my.cnf
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.100.10
SQL 节点(192.168.100.16/24)
安装
操作如下:
# 添加无任何用户成员的组
Shell > groupadd -r mysql
# 添加用户,并指定一些用户的属性
Shell > useradd -r -g mysql -s /sbin/nologin mysql
# 下载
Shell > wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.4/mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz
# 解压归档文件,并从归档文件中提取出文件
Shell > tar -vxf mysql-cluster-8.4.8-linux-glibc2.28-x86_64.tar.xz -C /usr/local/src/
# 创建目录的软链接(符号链接)
Shell > ln -s /usr/local/src/mysql-cluster-8.4.8-linux-glibc2.28-x86_64/ /usr/local/mysql
# 查阅
Shell > ls -l /usr/local/mysql
lrwxrwxrwx 1 root root 58 3月 7 12:50 /usr/local/mysql -> /usr/local/src/mysql-cluster-8.4.8-linux-glibc2.28-x86_64/
# 初始化,这将随机生成 root 的用户密码
## 若提示错误,请安装 libaio 软件包
Shell > cd /usr/local/mysql/bin/ && ./mysqld --initialize
2026-03-07T04:52:32.825102Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2026-03-07T04:52:32.826354Z 0 [System] [MY-013169] [Server] /usr/local/src/mysql-cluster-8.4.8-linux-glibc2.28-x86_64/bin/mysqld (mysqld 8.4.8-cluster) initializing of server in progress as process 1612
2026-03-07T04:52:32.832797Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-03-07T04:52:33.389430Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-03-07T04:52:34.779988Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jp5pC(-,t40!
2026-03-07T04:52:37.072045Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
# 递归变更链接目录下所有文件的所有者和所属组,递归变更数据目录的所有者
Shell > chown -R root:mysql /usr/local/mysql/
Shell > chown -R mysql /usr/local/mysql/data/
配置文件
SQL 节点的配置文件为 /etc/my.cnf,示例配置如下:
Shell > vim /etc/my.cnf
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.100.10
有关 SQL 节点可调整的选项,参阅这里 https://dev.mysql.com/doc/refman/8.4/en/mysql-cluster-options-variables.html#mysql-cluster-program-options-mysqld
初始化启动
每个节点类型必须单独启动,首先是管理节点,然后是数据节点,最后是任意的 SQL 节点。
第一步启动管理节点:
Shell(192.168.100.10)> ndb_mgmd --initial --configdir=/etc/mysql-cluster/ -f /etc/mysql-cluster/config.ini
MySQL Cluster Management Server mysql-8.4.8 ndb-8.4.8
Shell(192.168.100.10)> ss -tulnp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=766,fd=5))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=766,fd=6))
tcp LISTEN 0 64 0.0.0.0:1186 0.0.0.0:* users:(("ndb_mgmd",pid=5552,fd=8))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=783,fd=3))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=783,fd=4))
若提示以下错误,请启用 epel 存储库(dnf -y install epel-release)并安装 openssl3-libs 软件包(dnf -y install openssl3-libs):
ndb_mgmd: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
第二步启动数据节点:
# 在数据节点 A 上创建数据的存放目录
Shell(192.168.100.12)> mkdir -p /usr/local/mysql/data
Shell(192.168.100.12)> ndbd
2026-03-07 13:44:09 [ndbd] INFO -- Angel connected to '192.168.100.10:1186'
2026-03-07 13:44:09 [ndbd] INFO -- Angel allocated nodeid: 2
# 在数据节点 B 上创建数据的存放目录
Shell(192.168.100.14)> mkdir -p /usr/local/mysql/data
Shell(192.168.100.14)> ndbd
2026-03-07 13:45:38 [ndbd] INFO -- Angel connected to '192.168.100.10:1186'
2026-03-07 13:45:38 [ndbd] INFO -- Angel allocated nodeid: 3
若提示以下错误,请启用 epel 存储库(dnf -y install epel-release)并安装 openssl3-libs 软件包(dnf -y install openssl3-libs):
ndbd: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
第三步启动 SQL 节点:
Shell(192.168.100.16) > /usr/local/mysql/support-files/mysql.server start
Starting MySQL.Logging to '/usr/local/mysql/data/SQL-Node.err'.
..... SUCCESS!
在管理节点上查询集群的各种信息:
Shell(192.168.100.10) > ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to management server at localhost port 1186 (using cleartext)
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.100.12 (mysql-8.4.8 ndb-8.4.8, Nodegroup: 0, *)
id=3 @192.168.100.14 (mysql-8.4.8 ndb-8.4.8, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.100.10 (mysql-8.4.8 ndb-8.4.8)
[mysqld(API)] 1 node(s)
id=4 @192.168.100.16 (mysql-8.4.8 ndb-8.4.8)
ndb_mgm> quit
此时最小化的集群环境已经部署成功。










