ProxySQL + MySQL MGR 单主模

整体架构(生产标准)

业务应用 ↓ 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. 前置要求

  1. 3 台 MySQL 同版本 8.0/8.4
  2. 主机名可解析、关闭防火墙 / 放行 3306、33061
  3. 关闭 SELinux
  4. 3 台 MySQL server_id 必须不同
  5. 时间同步(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 自动识别切换 → 业务不用改配置、不用重启

七、故障模拟验证(必做)

  1. 停掉 MGR 主节点 MySQL
  2. 观察:MGR 自动把某从库提升为新主
  3. 业务照常读写,无中断、无改配置
  4. 旧主恢复后,自动以从节点身份加入集群,自动追同步

八、你接下来我可以直接给你

  1. 完整可直接复制的 my.cnf 配置模板
  2. ProxySQL 一键配置脚本(直接粘贴执行)
  3. 每一步校验命令清单
  4. 生产日常维护、故障排查命令
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享