MySQL MGR 单主高可用集群部署
目录
一、什么是MGR
二、MGR的工作原理
三、为什么需要 MySQL MGR 架构
四、MGR的模式
4.1 单主模式
4.2 多主模式
五、MySQL MGR 架构作用
六、MGR集群部署流程
6.1 系统基础配置
6.2 统一配置my.cnf
6.3 创建复制账户(所有节点都执行)
6.4 安装组复制插件
6.5 引导第一个节点(主节点)
6.5 加入其他节点
6.6 验证数据同步
七、MGR架构管理
7.1 监控状态
7.2 启动集群
7.3 节点停止
7.4 复制用户
7.5 主从切换
7.6 异常处理
一、什么是MGR
MGR 是 MySQL Group Replication(MySQL 组复制)的简称,是 一种基于分布式一致性协议(Paxos)的高可用集群解决方案。
二、MGR的工作原理
它的核心工作原理是:
将多个 MySQL 节点组成一个复制组,组内每个事务提交前都需要经过多数节点(例如 3 个节点中的至少 2 个)投票确认并达成一致后,才会真正提交并应用,从而保证整个集群的数据强一致性。
三、为什么需要 MySQL MGR 架构
采用 MySQL MGR(Group Replication,组复制)架构,最核心、最直接的目的,就是解决传统主从复制长期存在的三大痛点:数据可能丢失、故障切换需人工干预、以及集群成员管理不灵活。
四、MGR的模式
4.1 单主模式
1、核心特点
集群中只有一个节点可读写(Primary),其余节点自动设为只读(Super Read-Only),发生故障时会自动触发选举选出新主节点。
2、使用场景
绝大多数生产环境,特别是对数据一致性要求高的金融、支付等场景。
4.2 多主模式
1、核心特点
集群中所有节点均可同时进行读写操作,支持多点写入。
2、使用场景
对写入并发要求极高的特殊场景,但需要应用层有能力处理可能的数据冲突。
五、MySQL MGR 架构作用
作用维度 具体作用说明 解决的问题 / 带来的价值 数据一致性保障 基于 Paxos 协议,事务必须获得超过半数(N/2+1)的节点确认才能提交。 从机制上杜绝了主库故障时的数据丢失风险,确保提交的数据在多数节点上都有副本,达到金融级的数据安全。 自动化高可用(HA) 内置自动故障检测、成员投票和主节点选举机制,无需第三方工具。 主库宕机后,集群可在数十秒内自动完成故障转移,大幅缩短业务不可用时间(RTO),降低运维人工介入成本。 动态弹性扩缩容 支持节点在线、动态地加入或移除,集群成员视图会自动更新。 简化了集群的扩缩容、版本升级等日常运维操作,使集群管理更灵活、风险更低。 防止脑裂 依靠多数派投票机制来决定集群的有效成员和主节点。 在网络分区等异常情况下,能确保集群不会产生多个“主库”,从算法层面保证了数据的一致性和集群的决策唯一性。 灵活的部署模式 支持 单主(Single-Primary) 和 多主(Multi-Primary) 两种模式。 单主模式提供标准的高可用读写分离;多主模式可扩展写入能力(但生产环境强烈推荐单主模式以避免写冲突)。
六、MGR集群部署流程
6.1 系统基础配置
主机名 IP地址 角色 mysql1 10.8.0.100 primary mysql2 10.8.0.105 secondary mysql3 10.8.0.106 secondary
三台服务器都配置
vim /etc/hosts 10.8.0.100 mysql1 10.8.0.105 mysql2 10.8.0.106 mysql3
6.2 统一配置my.cnf
任意节点执行 uuidgen 查看uuid
# 在主服务器配置 [mysqld] # 基础设置,server_id不同的机器配置不一样 server-id=1 port=3306 user=mysql datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid validate_password.policy=LOW validate_password.length=6 # 字符集 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 关闭全局ssl ssl=0 skip-ssl require_secure_transport=OFF # GTID 与二进制日志(MGR 必需) gtid_mode=ON enforce_gtid_consistency=ON binlog_format=ROW log_bin=binlog log_slave_updates=ON master_info_repository=TABLE relay_log_info_repository=TABLE transaction_write_set_extraction=XXHASH64 binlog_transaction_dependency_tracking=WRITESET binlog_checksum=NONE # 组复制基本参数 #其中三台机器的group_replication_group_name参数必须一致,可以通过在任意一台机器执行uuidgen命令,获取该参数 # group_replication_local_address参数每台机器不一致,需要根据该机器的IP设置 plugin_load_add='group_replication.so' group_replication_group_name="16343e89-54ee-4fc5-a370-f474b77647bd" group_replication_start_on_boot=OFF group_replication_local_address="10.8.0.100:33061" group_replication_group_seeds="10.8.0.100:33061,10.8.0.100:33061,10.8.0.102:33061" group_replication_bootstrap_group=OFF group_replication_single_primary_mode=ON group_replication_enforce_update_everywhere_checks=OFF # MGR 通信禁用 SSL(因全局已关闭 SSL,必须显式设置) group_replication_ssl_mode=DISABLED group_replication_recovery_use_ssl=OFF # 网络与成员管理,每台机器的report_host不一样 report_host=10.8.0.1001、10.8.0.110节点
2、10.8.0.100节点差异
server-id=2 group_replication_local_address="10.8.0.105:33061" report_host=10.8.0.1053、10.8.0.102节点差异
server-id=3 group_replication_local_address="10.8.0.106:33061" report_host=10.8.0.1064、重启mysql
5、验证SSL已禁用
6.3 创建复制账户(所有节点都执行)
登录到每个节点的MySQL,执行
6.4 安装组复制插件
由于my.cnf中已配置plugin_load_add='group_replication.so',通常已自动安装。可在每个节点确认:若提示Function 'group_replication' already exists则忽略。
6.5 引导第一个节点(主节点)
在mysql(10.8.0.100)节点上执行:
检查集群成员:
6.5 加入其他节点
依次在mysql2 (105)和mysql3 (106)上执行:完成后再次使用SELECT * FROM performance_schema.replication_group_members;命令检查集群成员(可在任意节点执行):
6.6 验证数据同步
在PRIMARY节点(当前为mysql1)上执行:登录任意SECONDARY节点,查询:
七、MGR架构管理
7.1监控状态
SELECT MEMBER_ID, MEMBER_HOST, MEMBER_ROLE, MEMBER_STATE
FROM performance_schema.replication_group_members;正常状态:
ONLINE,主节点角色:PRIMARY
7.2启动集群
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
- 其他节点加入:直接
START GROUP_REPLICATION;
7.3 节点停止
STOP GROUP_REPLICATION;
7.4 复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE, GROUP_REPLICATION_STREAM ON *.* TO 'repl'@'%';节点加入时指定凭据:
START GROUP_REPLICATION USER='repl', PASSWORD='密码';
7.5 主从切换
- 切单主:
SELECT group_replication_switch_to_single_primary_mode('节点UUID');- 切多主:
SELECT group_replication_switch_to_multi_primary_mode();
7.6 异常处理
- 卡在 RECOVERING:检查复制用户权限、网络连通性、防火墙
- 集群完全宕机:找到数据最新的节点,先引导启动,再逐一加入其他节点
- 网络分区(脑裂):少数派节点会自动拒绝写入,恢复后重新加入即可
