整体架构(生产标准)
业务应用 ↓ ProxySQL(统一入口 1个IP:6033) ↓ MySQL MGR 三节点集群 node1 主节点 node2 从节点 node3 从节点(同时做仲裁防脑裂)
满足:读写分离 + 读负载均衡 + 主库宕机自动选主 + ProxySQL 自动路由切换 + 业务无感知
一、环境准备
1. 机器规划(最少 3 台 MySQL + 1 台 ProxySQL)
- MGR 节点 3 台:
mysql1:192.168.1.11
mysql2:192.168.1.12
mysql3:192.168.1.13
- ProxySQL:192.168.1.10
2. 前置要求
- 3 台 MySQL 同版本 8.0/8.4
- 主机名可解析、关闭防火墙 / 放行 3306、33061
- 关闭 SELinux
- 3 台 MySQL server_id 必须不同
- 时间同步(chrony)必须一致
二、第一步:3 台 MySQL 统一配置 my.cnf
三台都加下面配置,每台改下 server_id、loose-group_replication_local_address
[mysqld]
# 基础
server-id = 1 # 三台分别设 1 / 2 / 3
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
character-set-server = utf8mb4
default-collation = utf8mb4_unicode_ci
# 二进制日志
log_bin = mysql-bin
binlog_format = ROW
sync_binlog = 1
expire_logs_days = 7
# MGR 必须配置
default-storage-engine = InnoDB
innodb_file_per_table = 1
transaction-isolation = READ-COMMITTED
# 组复制插件
plugin-load-add = group_replication.so
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.11:33061" # 本机IP:33061
loose-group_replication_group_seeds = "192.168.1.11:33061,192.168.1.12:33061,192.168.1.13:33061"
loose-group_replication_bootstrap_group = off
loose-group_replication_single_primary_mode = on # 单主模式(推荐)
loose-group_replication_enforce_update_everywhere_checks = off
改完重启 3 台 MySQL。
三、第二步:创建 MGR 复制账号(三台都执行)
SET SQL_LOG_BIN=0;
CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
SET SQL_LOG_BIN=1;
四、第三步:初始化 MGR 集群
1. 第一台 mysql1 执行(引导集群)
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
2. 查看集群状态
SELECT * FROM performance_schema.replication_group_members;
能看到 mysql1 为 PRIMARY 就正常。
3. 第二台、第三台加入集群
每台依次执行:
STOP GROUP_REPLICATION;
START GROUP_REPLICATION;
再查询
replication_group_members,三台全部在线,状态正常。此时:MGR 集群建好,单主自动模式,主挂了自动选新主,数据强一致。
五、第四步:配置 ProxySQL
1. 安装 ProxySQL
yum /apt 直接装就行,默认端口:
- 管理端口:6032
- 业务访问端口:6033
2. 进入 ProxySQL 管理控制台
proxyysql -uadmin -padmin -P6032
3. 添加 MGR 三个节点到主机组
# 写组 10
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10,'192.168.1.11',3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10,'192.168.1.12',3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10,'192.168.1.13',3306);
# 读组 20
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20,'192.168.1.11',3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20,'192.168.1.12',3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20,'192.168.1.13',3306);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
4. 开启自动感知 MGR 主从角色
ProxySQL 关键:自动识别 MGR 谁是主、谁是从,自动路由
SET mysql-monitor_groupreplication_autorejoin=1;
SET mysql-monitor_groupreplication_primary_hostgroup=10;
SET mysql-monitor_groupreplication_replica_hostgroup=20;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
5. 创建业务账号(业务连 ProxySQL 用)
INSERT INTO mysql_users (username,password,default_hostgroup) VALUES ('appuser','App@123456',10);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
六、第五步:业务接入
业务只连 ProxySQL IP:6033
- 写请求自动路由到 MGR 当前主节点
- 读请求自动负载均衡分到所有从节点
- 主库宕机 → MGR 自动选新主 → ProxySQL 自动识别切换 → 业务不用改配置、不用重启
七、故障模拟验证(必做)
- 停掉 MGR 主节点 MySQL
- 观察:MGR 自动把某从库提升为新主
- 业务照常读写,无中断、无改配置
- 旧主恢复后,自动以从节点身份加入集群,自动追同步
八、你接下来我可以直接给你
- 完整可直接复制的 my.cnf 配置模板
- ProxySQL 一键配置脚本(直接粘贴执行)
- 每一步校验命令清单
- 生产日常维护、故障排查命令
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


























