MySQL Cluster篇03 — 部署最小化的环境

概述

本章,你将学习如何在实际生产环境下部署最小化的 MySQL Cluster。

通过 前文 可知 —— 您至少需要 4 台计算机才能组建一个最小化的集群环境:

  • 管理节点(mgmd)
  • SQL 节点(mysqld)
  • 数据节点 A (ndbd)
  • 数据节点 B (ndbd)
友情提醒
任何集群环境都对时间非常敏感,因此请保证在部署之前让机器的时间同步,在本文档中统一采用 chrony 程序来同步时间。另外,安装 MySQL NDB Cluster 的方式统一采用 "Linux 通用的二进制文件"。

基础信息

参阅下表:

操作系统 操作系统环境 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

此时最小化的集群环境已经部署成功。

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇