Debian 上搭建与管理 MySQL 集群
一、方案选型与架构
- MySQL NDB Cluster(NDB 存储引擎):由管理节点 ndb_mgmd、数据节点 ndbd/ndbmtd、SQL 节点 mysqld组成,适合高可用、强一致、实时场景,具备自动分片与多主写入能力。
- InnoDB Cluster(Group Replication + MySQL Shell + Router):基于组复制(GR)的多主/单主集群,使用MySQL Shell部署与运维,配合MySQL Router做读写分离与故障转移,适合通用 OLTP。
- 主从复制 + 负载均衡(HAProxy/ProxySQL):搭建简单、成本低,适合读多写少与快速容灾场景,但需自行处理故障切换与一致性策略。
- 建议准备至少3 台服务器(管理/数据/SQL 分离或混合部署视资源而定),并保证互通网络与 NTP 时间同步。生产环境务必开启防火墙与访问控制,并进行备份与演练。
二、快速上手 MySQL NDB Cluster(示例 1 管理 + 2 数据 + 2 SQL)
- 节点规划
- 管理节点:192.168.10.10(运行 ndb_mgmd)
- 数据节点:192.168.10.11、192.168.10.12(运行 ndbd/ndbmtd)
- SQL 节点:192.168.10.13、192.168.10.14(运行 mysqld,接入 NDB 引擎)
- 安装软件(各节点)
- Debian 仓库通常提供 mysql-cluster-community-server 等包,可直接安装:
- sudo apt update
- sudo apt install -y mysql-cluster-community-server mysql-cluster-community-client
- 配置管理节点(192.168.10.10)
- 创建配置目录:sudo mkdir -p /var/lib/mysql-cluster
- 编辑 /var/lib/mysql-cluster/config.ini(示例):
- [ndb_mgmd DEFAULT]
- NoOfReplicas=2
- DataDir=/var/lib/mysql-cluster
- [ndbd DEFAULT]
- NoOfReplicas=2
- DataMemory=1G
- IndexMemory=256M
- [ndb_mgmd]
- [ndbd]
- [ndbd]
- [mysqld]
- [mysqld]
- 启动管理节点:
- ndb_mgmd --config-file=/var/lib/mysql-cluster/config.ini
- 配置并启动数据节点(192.168.10.11、192.168.10.12)
- 编辑 /etc/mysql/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 下加入:
- ndbcluster
- ndb-connectstring=192.168.10.10
- 首次初始化并启动数据节点:
- sudo systemctl restart mysql
- ndbd --initial
- 后续启动可直接:ndbd
- 配置并启动 SQL 节点(192.168.10.13、192.168.10.14)
- 编辑 /etc/mysql/my.cnf,在 [mysqld] 下加入:
- ndbcluster
- ndb-connectstring=192.168.10.10
- 重启:sudo systemctl restart mysql
- 验证与运维
- 查看集群状态:ndb_mgm -e “show”(应看到管理节点、2 个数据节点与 2 个 SQL 节点均为 connected/started)
- 进入 SQL 节点验证引擎与表:
- mysql -uroot -p -e “SHOW ENGINES;”(确认 NDBCLUSTER 为 YES)
- CREATE TABLE t(id INT PRIMARY KEY, name CHAR(30)) ENGINE=NDBCLUSTER;
- 常用运维:
- 滚动重启:先停 SQL/数据节点,再停管理节点;启动顺序相反。
- 扩缩容:新增 [ndbd]/[mysqld] 段后,使用 ndb_mgm 执行 add node 并在新节点启动 ndbd/mysqld 完成联入。
三、管理与运维要点
- 监控与健康检查
- 使用 ndb_mgm -e “show” 观察节点状态;关注 DataMemory/IndexMemory 使用率与 事务冲突。
- SQL 节点执行:SHOW STATUS LIKE ‘wsrep%’(NDB 场景主要看 NDB 相关状态;InnoDB Cluster 场景关注 wsrep_cluster_size/wsrep_ready)。
- 备份与恢复
- NDB:使用 ndb_restore 从备份目录恢复(先停集群或切换到维护模式,按数据节点顺序恢复)。
- 建议定期在 SQL 节点做逻辑备份(mysqldump),并保留 备份与时间点。
- 升级与回滚
- 采用滚动升级(先 SQL、后数据、最后管理节点),每步验证 show 与业务连通性。
- 安全加固
- 仅开放必要端口(如 1186/2202/3306),使用 TLS/SSL 加密节点间与管理通道通信,限制管理节点与数据节点的访问来源。
四、常见故障排查
- 节点无法加入集群
- 检查 防火墙/安全组、/etc/hosts 解析、config.ini 主机名与 IP 一致性;确认 数据目录权限与磁盘空间。
- 数据节点反复重启
- 查看 ndb_1_error.log/ndb_2_error.log,常见为 内存不足 或 版本不匹配;适当调大 DataMemory/IndexMemory 或统一版本。
- SQL 节点连不上管理节点
- 确认 ndb-connectstring 正确、管理节点 ndb_mgmd 已启动、网络可达;必要时在 SQL 节点执行 mysqladmin ping。
- 表不可用或元数据不一致
- 确认表引擎为 NDBCLUSTER;执行 SHOW TABLE STATUS 与 ndb_desc 核对;必要时重建表或从备份恢复。