MySQL 集群独立服务器搭建教程

本教程详细介绍了如何在独立服务器上搭建 MySQL 集群(MySQL Cluster,即 NDB Cluster),涵盖架构组成(管理节点、数据节点、SQL 节点)、环境准备、配置文件(config.ini 和 my.cnf)编写、各节点安装与启动顺序、基础验证及常见问题排查,强调单机多实例部署的注意事项,适用于学习高可用、分布式 MySQL 架构的开发者和运维人员。

MySQL集群独立服务器搭建实战指南(基于InnoDB Cluster 8.0)

在高可用与数据安全日益重要的今天,单节点MySQL已难以满足业务连续性要求,本文以MySQL 8.0.33+为基准,手把手带你用三台物理独立服务器(非Docker/VM虚拟化)搭建生产级InnoDB Cluster集群——零依赖外部中间件,全原生组件,真正实现故障自动接管。

✅ 前提条件

  • 3台Linux服务器(推荐CentOS 7.9+/Ubuntu 20.04),IP分别为192.168.1.10、192.168.1.11、192.168.1.12
  • 每台均安装MySQL 8.0.33+(官方二进制包或YUM源),禁用SELinux,开放3306、33061(XCom端口)、33062(Group Replication端口)
  • 所有节点时间同步(chronyd服务启用),主机名解析已配置(/etc/hosts中互相映射)

🔧 关键步骤精要(非冗余说明)

1️⃣ 初始化单实例(每台执行)

mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql  
systemctl start mysqld  
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPass123!';"

2️⃣ 配置统一my.cnf(核心参数)

[mysqld]
server_id=10  # 各节点分别设为10/11/12  
gtid_mode=ON  
enforce_gtid_consistency=ON  
binlog_checksum=NONE  
log_slave_updates=ON  
transaction_write_set_extraction=XXHASH64  
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  
loose-group_replication_start_on_boot=OFF  
loose-group_replication_local_address="192.168.1.10:33061"  # 各节点改对应IP  
loose-group_replication_group_seeds="192.168.1.10:33061,192.168.1.11:33061,192.168.1.12:33061"  

重启服务后验证:mysql -uroot -p -e "SELECT @@server_id, @@gtid_mode;"

3️⃣ 创建集群用户(主节点执行)

CREATE USER 'clusteradmin'@'%' IDENTIFIED BY 'ClusterAdmin@2024';  
GRANT CLUSTER_ADMIN, CLUSTER_MONITOR ON *.* TO 'clusteradmin'@'%';  
FLUSH PRIVILEGES;

4️⃣ 启动集群(仅首节点执行)

INSTALL PLUGIN group_replication SONAME 'group_replication.so';  
SET SQL_LOG_BIN=0;  
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplPass@2024';  
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';  
FLUSH PRIVILEGES;  
SET SQL_LOG_BIN=1;  
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='ReplPass@2024' FOR CHANNEL 'group_replication_recovery';  
START GROUP_REPLICATION;  -- 此时状态为RECOVERING → ONLINE  

5️⃣ 加入其余节点(次节点执行)

INSTALL PLUGIN group_replication SONAME 'group_replication.so';  
START GROUP_REPLICATION;  -- 自动从种子节点同步,无需手动CHANGE MASTER  

✅ 验证集群状态
登录任一节点执行:

SELECT MEMBER_HOST, MEMBER_STATE, MEMBER_ROLE FROM performance_schema.replication_group_members;
-- 三行均为 ONLINE + PRIMARY/SECONDARY 即成功  

⚠️ 注意事项(实测经验)

  • 禁用防火墙临时测试:systemctl stop firewalld(生产环境请放行指定端口)
  • 若出现ERROR 3092,检查group_replication_ip_allowlist是否设为AUTOMATIC或显式包含所有节点网段
  • 不支持MyISAM表;DDL操作需在PRIMARY节点执行
  • 备份仍需独立策略(如mysqldump --single-transaction或Percona XtraBackup)

💡 小结
该方案摒弃MHA、ProxySQL等第三方组件,利用MySQL原生Group Replication+Router构建轻量高可用集群,三节点最小规模下可容忍单点宕机,写入自动路由至PRIMARY,读请求建议通过MySQL Router分发(另文详述),全程无共享存储、无单点故障,真正实现“独立服务器”自主协同。

(全文共986字)