MySQL的组复制(MGR)高可用集群搭建

一、MySQL 组复制(MGR)核心概念

MySQL Group Replication(简称 MGR)是 MySQL 官方推出的 高可用(HA)+ 强一致性 解决方案,基于改进的 Paxos 协议实现,核心能力可概括为 3 点:

  1. 数据强一致:事务需经集群中「多数节点(N/2+1)」确认后才提交,避免数据延迟或混乱;
  2. 自动故障转移:主节点故障时,剩余节点自动选举新主,无需人工干预; 灵活架构:支持「单主模式」(1
    个可写节点,多只读节点)和「多主模式」(所有节点均可写),适配不同业务场景(读多写少 / 分布式写)。
  3. MGR 对表有一个硬性要求:所有表必须有主键或唯一索引(用于跟踪数据变化,确保同步不冲突),这也是前期操作中避免报错的关键。

二、搭建前置准备与环境说明

  • MySQL源码环境:
    https://blog.csdn.net/racwwt/article/details/151259281

1. 环境信息

本次搭建使用 3 台节点组成集群,具体信息如下:

主机名ip操作系统版本mysql版本
master192.168.2.102/24rhel7.9mysql8.0.40
node1192.168.2.104/24rhel7.9mysql8.0.40
node2192.168.2.105/24rhel7.9mysql8.0.40

https://dev.mysql.com/doc/refman/8.0/en/group-replication-configuring-instances.html

2.前置配置

MGR 集群依赖节点间的通信与身份识别,需先完成以下准备:

配置域名自解析(所有节点执行):
目的是让节点通过主机名(如 master、node1)相互访问,避免直接写 IP 导致配置繁琐。
编辑 /etc/hosts 文件,添加以下内容

#三个主机均需要配置hosts文件的解析,如果不配置域名解析则需要在/etc/my.cnf中加一条配置skip-name-resolve
[root@node1 ~]# cat /etc/hosts
192.168.2.102 master
192.168.2.104 node1
192.168.2.105 node2

三、MGR 单主模式搭建

单主模式是 MGR 默认架构,仅 master 节点可执行写操作(如插入 / 更新数据),node1、node2 为只读节点,适合「读多写少」场景(如电商商品详情页)。

1. Master 节点配置(修改 my.cnf)

#1)修改配置文件
[root@master ~]# vim  /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM   #设置日志时间和本地时间保持一致
server_id=102
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"   #组复制,数据必须存储在 InnoDB 事务存储引擎中
gtid_mode=ON  #组复制要开启gtid
enforce_gtid_consistency=ON
log_bin=binlog  #默认开启
log_slave_updates=ON #默认开启
binlog_format=ROW  #默认开启
transaction_write_set_extraction=XXHASH64  #默认开启,组复制使用此信息在所有组成员上进行冲突检测
plugin_load_add='group_replication.so'  #将组复制插件添加到服务器启动时加载的插件列表中
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  #告诉插件它正在加入或创建的组名为“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa”
group_replication_start_on_boot=off  #插件在服务器启动时不自动启动操作,使用手动启动插件
group_replication_local_address= "192.168.2.102:33061"  #与其它主机通信时使用的网络地址和端口
group_replication_group_seeds= "master:33061,node1:33061,node2:33061"  #设置组成员的主机名和端口
group_replication_bootstrap_group=off  #指示插件是否启动该组,在首次引导组时在一个服务器上启用
group_replication_ip_whitelist="192.168.2.0/24,127.0.0.1/8"  #仅允许白名单内的 IP 加入复制组
group_replication_recovery_use_ssl=on #caching_sha2_password插件要求安全传输密码,开启主从之间的连接使用SSL/TLS 
[root@master ~]# /etc/init.d/mysqld restart

2. Master 节点创建复制账号与授权

MGR 节点间同步数据需专用账号,登录 MySQL 后创建 rp 用户并授予权限(所有节点后续均需创建相同账号)
执行以下 SQL 语句(SET SQL_LOG_BIN=0 表示当前操作不记录 binlog,避免同步给从节点)

#2)在主的数据库中使用sql语句添加复制账号并授予权限,从上面也需要设置一样的账号
-- 1. 临时关闭binlog(避免账号创建操作被同步)
SET SQL_LOG_BIN = 0;-- 2. 创建复制账号 rp(密码123,可自定义,所有节点需一致)
CREATE USER rp@'%' IDENTIFIED BY '123';-- 3. 授予MGR所需权限(复制、连接管理、备份、流复制权限)
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';-- 4. 刷新权限
FLUSH PRIVILEGES;-- 5. 恢复binlog记录
SET SQL_LOG_BIN = 1;-- 6. 配置MGR恢复通道(指定用rp账号同步数据)
CHANGE REPLICATION SOURCE TO
SOURCE_USER = 'rp',
SOURCE_PASSWORD = '123' FOR CHANNEL 'group_replication_recovery';#注意:如果需要重置则使用命令reset master;

3. 验证 MGR 插件加载

确认 MGR 插件已成功加载(避免后续启动失败)

#3)查看是否有group_replication插件
mysql> show plugins;
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |

4. 启动 MGR 集群(引导 Master)

首次启动集群需通过 Master 节点「引导」(开启 group_replication_bootstrap_group)

#4)启动MGR集群
#使用当前服务器作为引导服务器启动一个新的群组复制过程或者恢复一个已经存在的群组
-- 1. 开启集群引导(仅Master首次启动时执行)
mysql> SET GLOBAL group_replication_bootstrap_group = ON;-- 2. 启动MGR(指定用rp账号通信)
mysql> START GROUP_REPLICATION USER = 'rp', PASSWORD = '123';-- 3. 关闭集群引导(避免重复引导导致冲突)
mysql> SET GLOBAL group_replication_bootstrap_group = OFF;
#在主上查看组信息
mysql> SELECT * FROM performance_schema.replication_group_members;

5. 从节点(node1、node2)配置

#1)在从上写配置文件
[root@node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM
server_id=104
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.2.104:33061"
group_replication_group_seeds="master:33061,node1:33061,node2:33061"
group_replication_ip_whitelist="192.168.2.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_recovery_use_ssl=on 
[root@node1 ~]# /etc/init.d/mysqld restart[root@node2 ~]# vim  /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM
server_id=105
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.2.105:33061"
group_replication_group_seeds="master:33061,node1:33061,node2:33061"
group_replication_ip_whitelist="192.168.2.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_recovery_use_ssl=on 
[root@node2 ~]# /etc/init.d/mysqld restart

6. 从节点创建复制账号与授权

与 Master 步骤 2 完全一致,在 node1 和 node2 上分别登录 MySQL,执行相同的账号创建与授权 SQL

#2)在所有从的数据库中使用sql语句添加复制账号并授予权限,从上面也需要设置一样的账号
SET SQL_LOG_BIN=0;
CREATE USER rp@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rp', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';

7. 从节点加入 MGR 集群且验证整个集群状态

从节点无需引导集群,直接启动 MGR 即可自动加入(node1 和 node2 分别执行):

#3)开启组复制
mysql> START GROUP_REPLICATION USER='rp', PASSWORD='123';
#查看组信息
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+--------------
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUN
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+--------------
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f0 | master      |        3306 | ONLINE       | PRIMARY     | 8.0.40         | XCom         
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f1 | node2       |        3306 | ONLINE       | SECONDARY   | 8.0.40         | XCom         
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f2 | node1       |        3306 | ONLINE       | SECONDARY   | 8.0.40         | XCom         
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+--------------
3 rows in set (0.00 sec)

8. 单主模式功能验证

#master执行,从节点不支持写入操作
mysql> create database test2;
mysql> use test2;
mysql> create table t3(id int primary key);
mysql> insert into t3 values(9527);
#从上查看
mysql> select * from test2.t3;
+------+
| id   |
+------+
| 9527 |
+------+

9. 测试主节点宕机

MGR 核心优势是「自动故障转移」,测试 Master 故障后集群是否正常:

#测试主节点宕机
mysql> stop  GROUP_REPLICATION;
#从库节点查看,发现仅剩2个节点,并且自动选举出主节点
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f1 | node2       |        3306 | ONLINE       | PRIMARY     | 8.0.40         | XCom                       |
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f2 | node1       |        3306 | ONLINE       | SECONDARY   | 8.0.40         | XCom                       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
2 rows in set (0.00 sec)#重新启动前面的master主节点,可以看到master已经作为从节点加入到群组中
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected, 1 warning (10.73 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f0 | master      |        3306 | ONLINE       | SECONDARY   | 8.0.40         | XCom                       |
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f1 | node2       |        3306 | ONLINE       | PRIMARY     | 8.0.40         | XCom                       |
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f2 | node1       |        3306 | ONLINE       | SECONDARY   | 8.0.40         | XCom                       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)

四、MGR 多主模式搭建(基于单主改造)

多主模式允许 所有节点均可写(如 master、node1、node2 都能插入数据),适合「分布式写」场景(如多区域业务)。搭建需在单主模式基础上修改配置,关闭单主限制。

1. 所有节点修改 my.cnf 配置

在 master、node1、node2 的 /etc/my.cnf 中添加以下 2 个参数(关闭单主,开启多主一致性检查)

#修改所有的my.cnf的配置文件,添加如下内容
#关闭单master模式
loose-group_replication_single_primary_mode=off
#多主一致性检查
loose-group_replication_enforce_update_everywhere_checks=ON
[root@master mysql]# /etc/init.d/mysqld restart

2. 启动多主模式集群

#在其中一台主机里面执行以下mysql命令
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
#在另外两台主机里面执行以下mysql命令,开启组复制
mysql> START GROUP_REPLICATION;
#所有节点的 MEMBER_ROLE 均为 PRIMARY(表示均可写)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f0 | master      |        3306 | ONLINE       | PRIMARY     | 8.0.40         | XCom                       |
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f1 | node2       |        3306 | ONLINE       | PRIMARY     | 8.0.40         | XCom                       |
| group_replication_applier | 85aa2339-87e8-11f0-b63e-000c29d446f2 | node1       |        3306 | ONLINE       | PRIMARY     | 8.0.40         | XCom                       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.01 sec)
#在三个主机上面分别执行以下三条命令测试是否都可以执行写入操作
mysql> insert into test2.t3 values(612);
mysql> insert into test2.t3 values(613);
mysql> insert into test2.t3 values(614);
mysql> select * from test2.t3;
+------+
| id   |
+------+
|  612 |
|  613 |
|  614 |
| 9527 |
+------+

五、总结

  1. 核心流程:环境准备(hosts/MySQL 基础)→ 配置文件修改(启用 MGR 插件、参数)→ 复制账号创建→ 集群启动→ 功能验证;
  2. 单主 vs 多主:单主适合读多写少,多主适合分布式写;两者切换仅需修改 2 个配置参数,灵活度高;
  3. MGR 优势:自动故障转移(无需外部工具如 MHA)、数据强一致(避免脑裂)、动态扩缩容(节点加入 / 退出不中断服务)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95953.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Shell脚本实现Linux系统资源监控邮件告警

前言 1. 问题背景与需求 2. Bash 脚本监控资源 3. Bash 脚本判断阈值 4. 配置 msmtp 发送邮件 4.1 安装 msmtp 4.2 创建配置文件 /etc/msmtprc 5. 发送邮件 5.1 给别人发邮件 6. 完整示例脚本 7. 测试方法 8. 常见问题解答 9. 总结 前言 在运维过程中&#xff0c…

设计整体 的 序分(三“释”)、正宗分(双“门”)和流通分(统一的通行表达式) 之3 “自明性”(腾讯元宝 之2)

Q&AQ11、可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容Q11.1、我刚才说“可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容” 是指的 我们今天前面讨论 得出的整体设计 的一个概念整体 的一个双螺旋上升结构中的三个轴。 您刚才是这样 理解的吗?…

使用Ansible自动化部署Hadoop集群(含源码)--环境准备

现在我们有5台虚拟机,已经配置好了主机名和网络我们的目标是通过Ansible实现自动化部署hadoop集群。在此之前,我们先编写一个shell脚本来配置hadoop集群的环境,包括安装软件、安装配置Ansible(一个主节点四个工作节点)…

C#海康车牌识别实战指南带源码

C#海康车牌识别实战指南带源码前言车牌识别技术在智能交通、停车场管理等领域有着广泛的应用。海康威视作为国内领先的安防厂商,其车牌识别相机提供了丰富的SDK接口供开发者使用。本文将详细介绍如何使用C#语言结合海康威视SDK实现车牌识别功能,并解析关…

智慧能源新范式:数字孪生平台如何驱动风电场的精细化管理?

摘要你有没有想过,一座风力发电场背后,藏着一个“看不见的孪生兄弟”?它能提前预知风机故障,实时模拟极端天气的影响,甚至能“训练”运维人员在虚拟场景中演练抢修。这就是数字孪生——一个让风电场从“靠经验管理”转…

STM32-FreeRTOS操作系统-任务管理

引言 随着嵌入式技术的飞速发展,STM32与FreeRTOS的融合愈发紧密。本文聚焦于STM32平台下FreeRTOS操作系统的任务管理,旨在为开发者提供清晰的思路与实用的技巧,助力高效开发。 为什么要进行任务管理? 在嵌入式系统中,…

工业领域 ACP 协议全解析:从入门到实战案例

工业领域 ACP 协议全解析:从入门到实战案例 文章目录工业领域 ACP 协议全解析:从入门到实战案例一、前言二、ACP 协议是什么?1. 基本定义2. 与数据传输协议的区别三、ACP 协议的核心功能1. 身份认证(Authentication)2.…

计算机组成原理:计算机硬件的基本组成

📌目录🖥️ 计算机硬件的基本组成:从经典到现代的架构演进🧩 一、计算机硬件的五大部分:功能与协同📥 (一)输入设备:人机交互的“入口”📤 (二&am…

AI歌手功能终于上线!Suno AI 带你保存歌曲的灵魂

当我们谈论一首歌时,究竟是什么让它“独一无二”?是主唱的声音质感?是旋律里的氛围?还是那种无法复制的风格气息? 如今,Suno AI 给出了答案—— AI歌手功能正式上线! 🌟什么是「AI…

Dubbo3.3 Triple协议处理东西向流量

前言 Apache Dubbo 3.3 对 Triple 协议做了升级,现在 Dubbo 不仅可以处理东西向流量,也可以处理南北向流量。 **东西向流量(East-West Traffic) ** 指数据中心或网络内部同级设备/服务之间的通信。例如,微服务之间的…

操作系统核心特点详解:从并发到分布式,一文搞懂考研必备知识

操作系统核心特点详解:从并发到分布式,一文搞懂考研必备知识 大家好,今天咱们来聊聊操作系统(OS)这个计算机世界的“大管家”。想象一下,你的电脑就像一个忙碌的厨房,操作系统就是那个厨师长&am…

2025精选5款AI视频转文字工具,高效转录秒变文字!

视频转文本的需求早已渗透到生活的方方面面:网课学习需要提取课件台词、会议记录想快速整理要点、追剧时急需生肉转字幕…… 手动记录不仅费时,还容易遗漏关键信息。今天就分享5款实用工具,从免费到专业全覆盖,几步操作就能让视频…

MyBatis Example模式SQL注入风险

在使用MyBatis逆向工程生成的Example查询模式时,很多开发者看到XML中存在${}占位符就会担心SQL注入问题。但实际上,存在${}并不等同于存在SQL注入风险。本文将详细分析何时会存在真正的注入风险。 存在SQL注入的两个关键前提 前提一:Criteria…

宝塔PostgreSQL安装pgvecto插件contrib包实现向量存储

1. 宝塔安装 首先确保你的宝塔已经安装了 PostgreSQL。 安装好后是能看到上面这个界面的。 我安装的是 16.1 版本,下面的教程讲的也是 16.1 版本的。 2.开放防火墙的端口号 5432 3.允许外部访问所有数据库 4.设置超级管理员用户密码 用户名默认为:po…

麒麟系统 doc转pdf

# 安装LibreOffice(如果尚未安装) sudo apt update sudo apt install libreoffice# 将DOC转换为PDF libreoffice --headless --convert-to pdf 你的文档.doc# 或者指定输出目录 libreoffice --headless --convert-to pdf --outdir /输出目录 你的文档.do…

Python实现生成矩形框、三角形框、六边形框和圆环点云

本节我们分享上节提到的不填充点云。在点云处理、计算机视觉与工业检测中,几何轮廓(边框/环)点云比实心点云更能反映物体的边缘特征、结构骨架与形貌突变区域。Python 借助 NumPy 即可快速生成矩形边框、三角形边框、六边形边框与圆环点云&am…

2025年本体论:公理与规则的挑战与趋势

摘要本文章旨在深入探讨本体论(Ontology)中公理(Axioms)与规则(Rules)的核心概念、技术实现、验证方法、性能评估及其在2025年的前沿趋势与挑战。公理与规则是构建严谨、一致知识模型的逻辑基石&#xff0c…

【51单片机】【protues仿真】基于51单片机PM2.5空气质量检测系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、LCD1602液晶显示 2、按键​设置阈值 3、PM2.5大于阈值时启动声光警报 二、使用步骤 基于51单片机的PM2.5空气质量检测系统通常采用STC89C51/52作为核心控制器,结合…

【目录-单选】鸿蒙HarmonyOS开发者基础

用哪一种装饰器修饰的组件可作为页面入口组件?Look at the answer下面是ArkTS中类名、枚举名推荐的代码风格是 Look at the answer向服务器提交表单数据,以下哪种请求方式比较合适 Look at the answer使用http发起网络请求,需要以下哪种权限&…

maven【maven】技术详解

MavenMaven的本质是项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)Project Object Model:项目对象管理模型作用: 项目构建:提供标准的、跨平台的自动化项目构建方式依赖管理:方…