Linux 上 MySQL 集群配置实操指南
一 方案选型与架构
- 常见两类方案:
- MySQL NDB Cluster(共享无共享架构):由管理节点 ndb_mgmd、数据节点 ndbd/ndbmtd、SQL 节点 mysqld三层组成,数据在内存中分片存储,具备高可用、自动分片、强一致等特性,适合高并发 OLTP 场景。
- 主从复制(InnoDB + 异步/半同步复制):由主库写入、从库异步/半同步回放,提供读扩展与故障切换能力,部署简单,适合读多写少与通用业务。
- 典型最小拓扑(NDB Cluster):
- 3 台主机:1 台管理节点(仅运行 ndb_mgmd),2 台同时承载数据节点与 SQL 节点(ndbd/ndbmtd + mysqld),实现数据双副本与基本高可用。
二 快速搭建 MySQL NDB Cluster(3 节点示例)
- 环境与端口
- 主机规划:
- mgmd:172.16.43.142
- ndbd/SQL:172.16.43.148、172.16.43.149
- 开放端口:1186(管理节点)、1181(数据节点通信)、3306(MySQL 客户端)。
- 步骤
- 安装集群软件(三台均准备 MySQL Cluster 包,例如 mysql-cluster-gpl-7.6.13-el7-x86_64.tar.gz)
- 仅管理节点可仅保留二进制文件:ndb_mgm / ndb_mgmd;数据/SQL 节点保留完整 mysqld 与 ndbd/ndbmtd。
- 配置管理节点(172.16.43.142)
- 配置数据节点与 SQL 节点(148/149)
- 验证集群状态
- ndb_mgm
- 在管理控制台执行:show
- 正常应看到:2 个数据节点、1 个管理节点、2 个 SQL 节点均为已连接状态。
三 主从复制高可用方案(InnoDB,2 或 3 节点)
- 适用场景:已有或计划使用 InnoDB,追求部署简单、读扩展、故障切换可控。
- 步骤
- 基础配置(所有节点 /etc/my.cnf)
- 创建复制用户(主库)
- CREATE USER ‘repl’@‘%’ IDENTIFIED BY ‘password’;
- GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’;
- FLUSH PRIVILEGES;
- 初始化复制(从库)
- 在主库执行:SHOW MASTER STATUS; 记录 File / Position
- 在从库执行:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='记录的File',
MASTER_LOG_POS=记录的Position;
START SLAVE;
- 检查:SHOW SLAVE STATUS\G,确保 Slave_IO_Running=Yes、Slave_SQL_Running=Yes。
- 扩展与切换
- 增加从库:重复步骤 2-3。
- 故障切换:提升从库为主库(手动或配合 MHA/Orchestrator 等工具)。
四 运维与常见问题
- 常用命令
- 管理控制台:ndb_mgm;查看状态:show
- 关闭集群:ndb_mgm -e shutdown
- 数据节点首次启动:ndbd --initial;后续:ndbd
- SQL 节点启停:service mysqld start/stop
- 配置变更与滚动重启
- 修改 config.ini 后,管理节点可用:ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload
- 数据节点变更建议滚动重启(逐台 restart),避免同时停导致前端报错。
- 防火墙与连通性
- 确保 1186/1181/3306 端口开放;常见异常为 mysqld(API) not connected,多由防火墙或 ndb-connectstring 配置不当引起。
- NDB 使用注意
- 需将表改为 ENGINE=NDB/NDBCLUSTER;每张 NDB 表必须有主键(未显式定义时会自动生成隐含主键,可能带来空间与性能影响)。