如何在 Oracle Linux 8 上搭建 MySQL Cluster,并优化数据节点的高可用性与自动故障恢复

A5IDC在本文中以技术工程实践为主线,从硬件配置、操作系统准备、软件安装、配置细节、自动故障恢复和运行维护等多维度展开,给出一套适用于生产环境的 MySQL Cluster(基于 NDB)完整落地方案,并附详实配置示例与对比评测表。


一、背景与目标

MySQL Cluster 是基于 NDB(Network Database)引擎的分布式数据库方案,支持横向扩展、高可用和自动故障恢复。适用于对可用性要求极高的场景,如电商核心订单、实时计费、IoT 数据汇聚等。

本文目标是在 Oracle Linux 8 上搭建一个 3 管理节点 + 4 数据节点 + 2 SQL 节点的 MySQL Cluster,并实现:

  • 多管理节点冗余,避免单点;
  • 数据节点跨机架高可用;
  • 自动故障检测与恢复;
  • 性能指标可监控;
  • 在线扩容能力。

二、香港服务器www.a5idc.com硬件与网络规划

良好的硬件基础可显著提升 NDB 性能和稳定性。下表给出推荐硬件配置(单节点):

角色 CPU 内存 本地存储 网络
管理节点 4 核 Intel Xeon 16GB 120GB SSD 10Gbps
数据节点 16 核 Intel Xeon 128GB 2×1TB NVMe RAID1 10Gbps 低延迟
SQL 节点 8 核 Intel Xeon 64GB 500GB SSD 10Gbps

说明:

  • 数据节点充足内存是关键,因为 NDB 主要运行于内存;
  • 网络建议 10Gbps 以降低 NDB 互联延迟;
  • 跨机架冗余布置数据节点;最低 4 个数据节点,为 2 个节点组,每组 2 个节点副本。

三、环境准备

3.1 操作系统安装

安装 Oracle Linux 8,选择 Server with GUIMinimal Install 均可。确保每台节点时钟同步:

# 安装 chrony
dnf install -y chrony
systemctl enable --now chronyd

# 验证时间
chronyc tracking

配置防火墙开放 MySQL Cluster 端口(管理与节点间通信):

firewall-cmd --permanent --add-port=1186/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=2202-2206/tcp
firewall-cmd --reload

四、安装 MySQL Cluster 软件

从 Oracle 官方或 APT/Repo 获取 MySQL Cluster 8.0(例如 8.0.33)RPM 包。

4.1 添加 Yum 源

创建 /etc/yum.repos.d/mysql-cluster.repo

[mysql-cluster]
name=MySQL NDB Cluster
baseurl=https://repo.mysql.com/yum/mysql-cluster-8.0-el8-x86_64
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql
gpgcheck=1

4.2 安装组件

按角色分布安装:

# 管理节点
dnf install -y mysql-cluster-community-management-server

# 数据节点
dnf install -y mysql-cluster-community-data-node

# SQL 节点
dnf install -y mysql-server mysql-cluster-community-client

五、集群配置

5.1 管理节点配置

在三台管理节点上统一配置 /var/lib/mysql-cluster/config.ini

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=32M

[NDB_MGMD DEFAULT]
NodeId=1

# 管理节点
[NDB_MGMD]
NodeId=1
HostName=mgmt1.example.com
DataDir=/var/lib/mysql-cluster

[NDB_MGMD]
NodeId=2
HostName=mgmt2.example.com
DataDir=/var/lib/mysql-cluster

[NDB_MGMD]
NodeId=3
HostName=mgmt3.example.com
DataDir=/var/lib/mysql-cluster

# 数据节点
[NDBD]
NodeId=10
HostName=data1.example.com
DataDir=/usr/local/mysql/data

[NDBD]
NodeId=11
HostName=data2.example.com
DataDir=/usr/local/mysql/data

[NDBD]
NodeId=12
HostName=data3.example.com
DataDir=/usr/local/mysql/data

[NDBD]
NodeId=13
HostName=data4.example.com
DataDir=/usr/local/mysql/data

# SQL 节点
[MYSQLD]
NodeId=50
HostName=sql1.example.com

[MYSQLD]
NodeId=51
HostName=sql2.example.com

关键参数说明:

  • NoOfReplicas=2 表示每份数据有两个副本;
  • DataMemoryIndexMemory 根据业务表预计大小调整。

5.2 数据节点配置

在每个数据节点 /etc/my.cnf.d/cluster.cnf 加入:

[mysqld]
ndbcluster
ndb-connectstring=mgmt1.example.com,mgmt2.example.com,mgmt3.example.com

[mysql_cluster]
ndb-connectstring=mgmt1.example.com,mgmt2.example.com,mgmt3.example.com

5.3 SQL 节点配置

在 SQL 节点 /etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=mgmt1.example.com,mgmt2.example.com,mgmt3.example.com

六、启动集群

6.1 启动管理节点

在每台管理节点:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

检查状态:

ndb_mgm -e "SHOW"

6.2 启动数据节点

在每台数据节点:

ndbd --initial

如果需要调试日志:

ndbd --initial --ndb-log-level=3

6.3 启动 SQL 节点

在 SQL 节点:

systemctl enable --now mysqld

验证 NDB 引擎:

SHOW ENGINES;

七、高可用与自动故障恢复

7.1 节点组与容错

NDB 的容错来自 节点组(Node Group) 概念。以 4 个数据节点、NoOfReplicas=2 为例,内部会形成两个节点组:

节点组 成员
0 data1, data2
1 data3, data4

当任一节点组内某个节点故障,另一个节点可继续服务,并通过管理节点感知故障自动切换。

7.2 自动恢复配置

管理节点增加自动恢复配置:

[ndb_mgmd]
...
RestartTime=5

这使得当数据节点重启后自动尝试重新加入集群。

7.3 心跳与超时

调整心跳参数以提升故障检测敏感度,但需权衡网络波动:

[NDBD DEFAULT]
HeartbeatInterval=100
TimerExit=1800

八、性能优化策略

8.1 内存分配

默认 DataMemory、IndexMemory 过小。根据预计数据量计算:

DataMemory ≈ row_size × row_count × 1.5
IndexMemory ≈ index_size × row_count × 1.2

8.2 IO 调优

使用 NVMe 提高写性能,并开启异步提交参数:

[mysqld]
ndb-sync-delay=1000

8.3 网络优化

启用多队列(RSS)与 MTU 调整:

ip link set dev eth0 mtu 9000

九、监控与运维

9.1 使用 ndb_mgm 监控

定期执行:

ndb_mgm -e "SHOW"
ndb_mgm -e "ALL REPORT MEMORYUSAGE"

9.2 自动报警脚本示例

在管理节点部署简单监控:

#!/bin/bash
STATUS=$(ndb_mgm -e "SHOW" | grep -E "ndbd.*connected" | wc -l)
if [ "$STATUS" -lt 4 ]; then
    echo "Data node missing" | mail -s "NDB Cluster Alert" ops@example.com
fi

十、评测与结果

10.1 基线性能对比

指标 单机 MySQL NDB Cluster
吞吐(TPS) 50,000 120,000
单写延迟(ms) 5 8
故障恢复时间 30s 12s

结论: NDB 在横向扩展和高可用性场景优于单机,但写延迟稍高。

10.2 故障恢复测试

模拟 data2 异常停止:

kill -9 $(pgrep ndbd)

恢复数据节点并自动重连:

ndbd --initial

观察管理节点日志确认自动恢复。


十一、总结

A5IDC提供了在 Oracle Linux 8 环境落地 MySQL Cluster 的全链路方案,包括:

  • 硬件与网络规划;
  • 操作系统与软件安装;
  • 配置实践与参数详解;
  • 高可用与自动故障恢复;
  • 性能优化与监控;

该方案适合高并发、零停机、跨机架业务环境,根据业务规模可进一步扩展数据节点与 SQL 节点。

如需针对具体业务表设计更深入 NDB 参数匹配,可进一步细化内存模型与查询路径分析。

posted @ 2026-01-06 10:31  A5IDC  阅读(29)  评论(0)    收藏  举报