MySQL Cluster集群部署指南:架构解析与从零搭建

陈默
陈默
发布时间:2026-10-13| 6人浏览过
原创

本文详解MySQL Cluster高可用集群的底层架构与搭建实操。通过分析NDB存储引擎特性,明确管理节点、数据节点与SQL节点的角色分工。随后按照特定IP规划,逐步演示从系统环境初始化到关键配置文件(config.ini/my.cnf)编写,再到集群启动、数据双向同步测试及异常恢复的完整流程。

核心架构与组件功能

MySQL Cluster 是一种无共享(Shared-Nothing)体系结构的分布式数据库解决方案,旨在满足对可靠性要求极高(如99.999%可用性)的应用场景。其核心在于集成的 NDB 内存集群存储引擎,所有数据默认驻留于内存中,从而消除磁盘I/O瓶颈,提升查询速度。

完整的集群系统由三类主要节点构成:

  • 管理节点 (Management Node, MGM):负责维护整个集群的配置信息、进行仲裁调度以及日志记录。通常部署在独立服务器或轻量级虚拟机上,理论上单点即可满足需求。
  • 数据节点 (Data Node, DB):集群的核心承载者,负责实际数据的存储、事务处理及数据复制。至少需要两个节点以实现冗余和高可用。增加数据节点可分担负载,但需注意网络吞吐量限制。
  • SQL节点 (API Node):连接客户端应用程序的接口,通过标准MySQL协议访问NDB数据。支持负载均衡,可与应用服务器(如Web后端)混合部署或独立存在。

部署环境准备与注意事项

本文将构建一个最小化的高可用集群,包含以下资源配置:

  • 操作系统:CentOS 6.4 x86_64(或使用兼容的系统版本)
  • 账号权限:全程使用 root 账户执行操作
  • 软件包:MySQL Cluster GPL 版二进制文件

第1步:系统基础环境清理

目的:消除防火墙和安全策略对集群内部通讯端口的干扰。

  1. 关闭防火墙:直接关闭iptables或放行端口 1186 (MGM), 3306 (SQL) 及各节点间动态通讯端口。
    # 关闭并禁止开机自启
    chkconfig --level 35 iptables off
  2. 禁用SELinux:防止安全策略拦截进程间通信。
    # 编辑配置文件
    vi /etc/selinux/config
    
    # 确保以下内容生效
    SELINUX=disabled
  3. 重启系统使安全策略变更生效。
  4. 解压安装文件至统一目录。
    cd /root/Downloads
    tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
    mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql

第2步:配置管理节点 (Node ID: 1)

入口:专用管理节点服务器

动作:生成 config.ini 定义拓扑结构。

mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini

重要参数说明:config.ini 是整个集群的大脑,必须准确指向各节点IP。

[ndbd default]
NoOfReplicas=2       # 数据副本数,通常设为2实现高可用
DataMemory=80M       # 分配给表数据的内存比例
IndexMemory=18M      # 分配给索引的内存比例

[ndb_mgmd]
NodeId=1             # 管理节点ID固定为1
hostname=192.168.124.141  # 本节点IP
datadir=/var/lib/mysql-cluster

# 数据节点定义
[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data

[ndbd]
NodeId=3
hostname=192.168.124.143
datadir=/usr/local/mysql/data

# SQL节点定义
[mysqld]
NodeId=4
hostname=192.168.124.144

[mysqld]
NodeId=5
hostname=192.168.124.145

完成判断:保存文件后,将 ndb_mgm 和 ndb_mgmd 拷贝至环境变量路径并赋予执行权限。

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/
chmod +x /usr/local/bin/ndb_mgm*

第3步:配置数据节点 (Node IDs: 2 & 3)

入口:两台数据存储服务器

动作:创建用户并编写 my.cnf 启用NDB引擎。

  1. 创建运行账户:
groupadd mysql
useradd -g mysql mysql

注意:后续所有涉及 /usr/local/mysql 的路径操作均需保证 mysql 用户对数据和 sock 目录拥有正确所有权。

配置 my.cnf: 指定连接到管理节点的地址。

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.124.141  # 指向管理节点IP

初始化数据库实例(以data节点为例):

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
chown -R root .
chown -R mysql.mysql /usr/local/mysql/data /usr/local/mysql/sock
chgrp -R mysql .

第4步:配置SQL节点 (Node IDs: 4 & 5)

入口:应用接口服务器

动作:同样创建mysql用户并修改 my.cnf,使其识别集群模式。

[client]
socket=/usr/local/mysql/sock/mysql.sock

[mysqld]
ndbcluster                      # 开启NDB集群模式
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141  # 连接管理节点

[mysql_cluster]
ndb-connectstring=192.168.124.141

SQL节点也需执行上述的 mysql_install_db 初始化和权限设置步骤,并注册服务以便通过 service mysql.server start 控制。

集群启动流程

严格按照顺序启动是避免“脑裂”和数据不同步的关键。

  1. 启动管理节点:
    ndb_mgmd -f /var/lib/mysql-cluster/config.ini
  2. 启动数据节点:首次启动必须加 --initial 参数进行初始化(重建数据目录),后续重启严禁添加此参数,否则会导致数据重置丢失。
    /usr/local/mysql/bin/ndbd --initial
    # 非首次启动仅执行
    # /usr/local/mysql/bin/ndbd
  3. 启动SQL节点:
    /usr/local/mysql/bin/mysqld_safe --user=mysql &

连通性与故障转移测试

测试一:跨节点数据同步

登录任一端SQL节点(如Node 4):

/usr/local/mysql/bin/mysql -u root -p
create database cluster_test;
use cluster_test;
-- 关键:引擎必须显式声明为 NDB
CREATE TABLE tb_sync (id INT) ENGINE=NDB;
INSERT INTO tb_sync VALUES (1001);
SELECT * FROM tb_sync;

切换到另一端SQL节点(Node 5),执行相同的 SELECT 查询。若返回相同结果,证明读写同步链路畅通。

测试二:数据节点宕机恢复

  1. 模拟故障:在主机上强制停止某个数据节点进程(如Node 3):
    killall ndbd
  2. 写入新数据:此时Node 2和SQL节点仍工作。通过SQL节点向其他表插入新数据。
  3. 恢复节点:重新启动该数据节点进程(不加initial):
    /usr/local/mysql/bin/ndbd
  4. 状态观察:回到管理节点查看状态:
    ndb_mgm -e "show",确认节点状态由 SHUTDOWN 变为 STARTED。
  5. 最终验证:新加入的数据在集群重新平衡后应可见于所有正常运行的节点中。

关闭集群的正确步骤

为避免数据损坏,请遵循从外向内的关闭顺序:

  1. 管理节点指令:在MGM服务器上运行 ndb_mgm,然后输入 shutdown。这将通知所有数据节点和SQL节点有序停止。
  2. 手动关闭:如果自动化脚本未完全执行,依次停止MySQL服务和NDBD进程。

以上就是MySQL Cluster集群搭建过程,更多关于Linux下分布式数据库运维与优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。