CentOS Stream 9 中部署 MySQL 8.0 MGR(MySQL Group Replication)一主两从高可用集群

news2025/6/2 23:16:14

🐇明明跟你说过:个人主页

🏅个人专栏:《MySQL技术精粹》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、MySQL 8.0 中的高可用方案

2、适用场景

二、环境准备

1、系统环境说明

2、主机规划

3、系统基础配置

三、高可用搭建

1、安装MySQL

2、启动MySQL

3、修改配置文件

4、配置高可用

5、高可用测试 

6、集群恢复


一、前言

1、MySQL 8.0 中的高可用方案

当你上线一个数据库服务时,最怕的是什么?当然是——挂了!⛔
所以,我们需要让数据库 高可用(High Availability),简单说就是:

“就算有节点崩了,服务也不能停!”

那 MySQL 有哪些高可用的方案呢?我们来一一介绍。


1️⃣ 主从复制(经典老搭档)👥

📝 原理:一个主库(Master)负责写,多个从库(Slave)负责读,通过 二进制日志(binlog)同步数据

📌 优点

  • 架构简单,上手快

  • 性能可接受,读写分离效果好

⚠️ 缺点

  • 没有自动故障转移(主挂了就得手动切)

  • 延迟不可避免(主从延迟问题)

💬 通俗说法

“老大干活,小弟抄笔记📓。老大病倒了,小弟要等人吩咐才能接手。”


2️⃣ MySQL InnoDB Cluster(基于 MGR)🔗

📝 原理:MySQL 8.0 官方推出的高可用方案,基于 Group Replication(MGR),多个节点之间通过组协议互相复制,保持一致性。

📌 优点

  • 官方支持,紧跟版本

  • 支持自动故障转移(Single Primary 模式)

  • 数据强一致性(保证写入顺序)

⚠️ 缺点

  • 写入冲突需要处理(多主模式下尤为严重)

  • 对网络延迟敏感

  • 配置复杂度高于主从

💬 通俗说法

“兄弟三人轮流做老大👑,有规则决定谁上。兄弟有事,其他人自动接班,不用吩咐👌。”


3️⃣ MHA(MySQL High Availability)🛠️

📝 原理:由 Perl 脚本组成的主从复制管理器,能自动检测主库是否宕机,并迅速提升某个从库为新主。

📌 优点

  • 成熟稳定,广泛使用

  • 可自动主从切换

⚠️ 缺点

  • 依赖外部监控与管理节点

  • 依然是主从架构,存在数据延迟风险

  • 项目已停止更新❌(社区维护中)

💬 通俗说法

“一个看门人👀不停盯着老大,一旦倒下,赶紧推个新老大上位。”


4️⃣ Galera Cluster(三强联盟)🔄

📝 原理:多主同步复制(multi-master synchronous replication),所有节点都可以读写,数据写入同步确认。

📌 优点

  • 每个节点都能写(真正多主)

  • 同步复制,强一致性

⚠️ 缺点

  • 网络要求高,对时延非常敏感

  • 复杂度高,不适合大批量写入业务

💬 通俗说法

“三个老大同时写作业📄,但必须每次都核对答案✅,才能交上去。”


5️⃣ ProxySQL + MGR / 主从(代理接力棒)🧠

📝 原理:通过 ProxySQL 把数据库访问做中间层代理,实现读写分离、故障转移等功能。

📌 优点

  • 灵活控制流量

  • 可以和多种架构组合

  • 支持连接池、SQL 规则分发

⚠️ 缺点

  • 需要额外组件维护

  • 配置略复杂

💬 通俗说法

“在你和数据库之间加个智商超高的中间人🧑‍⚖️,谁有能力他就安排谁来处理。”


2、适用场景

1️⃣ 主从复制(经典老将)👥

适用场景:

  • 🧾 内容管理系统、博客、论坛等中小型网站

  • 📊 对写入要求不高,读多写少

  • 🧰 开发测试环境,数据可容忍一定延迟


2️⃣ MGR(MySQL Group Replication)📦【官方推荐】

适用场景:

  • 🏦 银行、支付、电商等核心系统

  • 🛡️ 不能丢数据、强一致性要求

  • 🚨 需要自动故障转移、无需人工干预


3️⃣ MHA(MySQL High Availability)🛠️【经典成熟方案】

适用场景:

  • 🏢 传统企业系统

  • ✅ 使用已有主从架构,想补上自动故障转移

  • 💼 中小型业务但需要保障主库稳定运行


4️⃣ Galera Cluster(真正多主)🌀

适用场景:

  • 🌍 跨地域写入需求

  • 👩‍💻 同步数据共享协作系统(如 CRM、OA)

  • 💾 高并发小事务业务(例如即时通信、IoT 数据采集)


5️⃣ MySQL + ProxySQL + Keepalived(高自由组合)🧠

适用场景:

  • 🧩 多读多写复杂业务

  • 🛠️ 自定义路由规则、SQL 中间件优化

  • 🌐 大型集群 + 运维自动化场景


 📊 总结对比表

模式自动选主强一致性多主写网络要求适合场景
主从复制❌(需 MHA)读多写少系统、小网站
MGR(单主)金融、电商、核心服务
MGR(多主)冲突可控的小事务系统
MHA✅(主库)主从架构增强容灾
Galera Cluster很高全球分布式写入业务
ProxySQL 组合✅(配合 VIP)视后端而定取决于后端高并发多维读写系统


二、环境准备

1、系统环境说明

  • MySQL高可用模式:Group Replication(MGR)
  • MySQL版本:8.0.42
  • 操作系统:Centos Stream 9

2、主机规划

这里我们使用3台 Centos Stream 9 服务器,一主两从

3、系统基础配置

关闭SELinux、关闭防火墙,

3台机器配置时钟同步,确保时间一致

添加hosts记录

vim /etc/hosts


# 添加如下内容
192.168.40.121 mysql1
192.168.40.122 mysql2
192.168.40.123 mysql3

三、高可用搭建

1、安装MySQL

添加YUM仓库,三台机器上分别执行:

rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

安装mysql-server,三台机器上分别执行:

dnf install mysql-community-server -y

如果出现以下错误:

则执行这条命令:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

 然后再次安装:

dnf install mysql-community-server -y

2、启动MySQL

执行以下命令,启动MySQL服务,三台都要执行

systemctl start mysqld

获取临时密码:

grep 'temporary password' /var/log/mysqld.log

运行安全配置向导:

mysql_secure_installation
[root@mysql1 log]# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

# 是否修改root密码
Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

# 是否删除匿名用户
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

# 是否禁用Root用户远程登录
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


# 是否删除测试数据库
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

# 是否刷新权限表
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

 

3、修改配置文件

mysql1:

vim /etc/my.cnf

# 添加以下内容
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
report_host=mysql1
auto_increment_increment=3
auto_increment_offset=2

plugin-load=group_replication.so
group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_local_address="192.168.40.121:33061"
group_replication_group_seeds="192.168.40.121:33061,192.168.40.122:33061,192.168.40.123:33061"
group_replication_bootstrap_group=OFF
group_replication_single_primary_mode=ON
group_replication_start_on_boot=ON
group_replication_enforce_update_everywhere_checks=OFF

mysql2:

vim /etc/my.cnf

# 添加以下内容
server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
report_host=mysql2
auto_increment_increment=3
auto_increment_offset=2

plugin-load=group_replication.so
group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_local_address="192.168.40.122:33061"
group_replication_group_seeds="192.168.40.121:33061,192.168.40.122:33061,192.168.40.123:33061"
group_replication_bootstrap_group=OFF
group_replication_single_primary_mode=ON
group_replication_start_on_boot=ON
group_replication_enforce_update_everywhere_checks=OFF

mysql3:

vim /etc/my.cnf

# 添加以下内容
server_id=3
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
report_host=mysql3
auto_increment_increment=3
auto_increment_offset=2

plugin-load=group_replication.so
group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_local_address="192.168.40.123:33061"
group_replication_group_seeds="192.168.40.121:33061,192.168.40.122:33061,192.168.40.123:33061"
group_replication_bootstrap_group=OFF
group_replication_single_primary_mode=ON
group_replication_start_on_boot=ON
group_replication_enforce_update_everywhere_checks=OFF

✅ 基础配置部分:

server_id=1

  • 当前 MySQL 实例的唯一标识,在复制集群中必须唯一。

gtid_mode=ON
enforce_gtid_consistency=ON

  • 启用 GTID(全局事务标识)模式,并强制一致性,GTID 是 Group Replication 所必需的。

master_info_repository=TABLE
relay_log_info_repository=TABLE

  • 使用表而非文件来存储主服务器和中继日志信息,便于管理与容灾恢复。

transaction_write_set_extraction=XXHASH64

  • 启用事务写集提取(必须的配置),用来检测冲突,推荐使用 XXHASH64。

log_slave_updates=ON

  • 表示从库接收到主库事务后,也会记录 binlog,这对多主架构(如 Group Replication)是必须的。

log_bin=binlog
binlog_format=ROW

  • 启用二进制日志,并使用 ROW 格式(记录每一行的变化,适合复制)。

report_host=mysql1

  • 当前节点在复制架构中的标识名,用于其他节点识别它(建议填写主机名或 IP)。

auto_increment_increment=3
auto_increment_offset=2

  • 多主节点避免自动递增主键冲突的关键参数:
  • 例如 3 个节点时,节点1 offset=1,节点2 offset=2,节点3 offset=3,这样每个节点产生的自增 ID 就不会冲突。


✅ Group Replication 配置部分:

plugin-load=group_replication.so

  • 加载 Group Replication 插件。

group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"

  • 集群的全局唯一 ID(UUID),所有节点必须一致。

group_replication_local_address="192.168.40.121:33061"

  • 当前节点用于与其他节点通信的地址和端口(33061 是默认的 group_replication 通信端口)。

group_replication_group_seeds="192.168.40.121:33061,192.168.40.122:33061,192.168.40.123:33061"

  • 所有节点的通信地址列表,用于节点之间互相发现。

group_replication_bootstrap_group=OFF

  • 表示当前节点不是首次启动集群的引导节点。首次搭建集群时,在其中一个节点上设置为 ON 启动一次,然后改回 OFF。

group_replication_single_primary_mode=ON

  • 表示开启单主模式(Single Primary Mode),只有一个节点对外提供读写服务,其余为只读。

group_replication_start_on_boot=ON

  • 启动 MySQL 服务时自动启动 Group Replication。

group_replication_enforce_update_everywhere_checks=OFF

  • 如果是多主模式(Multi-Primary),这个值需要设为 ON。但当前为单主模式,所以设为 OFF。

  


重启MySQL,三台全部执行

systemctl restart mysqld

4、配置高可用

分别登录到3台MySQL上面

[root@mysql log]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.42 MySQL Community Server - GPL

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

创建数据同步账户(三台都要执行)

CREATE USER rpl_user@'%' IDENTIFIED BY '****************';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
ALTER USER 'rpl_user'@'%' IDENTIFIED WITH mysql_native_password BY '****************';
RESET MASTER;

指定主从账户与指定通信频道(两台从节点执行)

CHANGE MASTER TO MASTER_USER="rpl_user", MASTER_PASSWORD="****************" FOR CHANNEL 'group_replication_recovery';

启动复制组(主节点执行)

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

检查状态(主节点执行)

如果显示 ONLINE 则启动成功

SELECT * FROM performance_schema.replication_group_members;

  


将两台从节点加入复制组(两台从节点执行)

START GROUP_REPLICATION;

 检查状态(任意节点执行),如果全部显示 ONLINE 则启动成功

  


5、高可用测试 

将主节点mysql1关机,然后查看集群状态

可以看到主节点已经从mysql1变成了mysql2

  

此时虽然挂了一个节点,但是MySQL集群仍可以继续访问


6、集群恢复

接下来将mysql1重新开机,观察集群状态,可以看到mysql1并没有自动加入集群,此时就需要我们手动恢复

登录到mysql1,执行以下命令,指定复制用户和密码

CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='****************' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;

再次检查,可以看到,mysql1已经处于 ONLINE 状态,集群恢复正常


💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于MySQL的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

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

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

相关文章

pycharm 新UI 固定菜单栏 pycharm2025 中文版

pycharm 新UI 文件 -> 设置 -> 外观与行为 -> 外观 -> UI选项 -> 主菜单:显示在主工具栏上方. 即可固定

我的世界Java版1.21.4的Fabric模组开发教程(十一)创建方块

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第十一章——创建方块。想要阅读其他内容,请查看或订阅上面的专栏。 方块(Block) 是构成Minecraft世界的主要组成部分,是组成游戏地图的最基本单元,也是模组开发的核心元素之一…

VR/AR 视网膜级显示破局:10000PPI 如何终结颗粒感时代?

一、传统液晶 “纱窗效应”:VR 沉浸体验的最大绊脚石 当用户首次戴上 VR 头显时,眼前密密麻麻的像素网格往往打破沉浸感 —— 这正是传统液晶显示在近眼场景下的致命缺陷。受限于 500-600PPI 的像素密度,即使达到 4K 分辨率,等效到…

系统思考:化繁为简的艺术

系统思考,其实是一门化繁为简的艺术。当我们能够把复杂的问题拆解成清晰的核心以及更加简单,从而提升团队的思考品质和行动品质,发挥最大的合力。 每个公司都想在某方面成为最优秀的,但是实际上具有穿透性的洞察力和摆脱虚荣心的清…

Angularjs-Hello

1 关于Angularjs 最近因为项目需要又要做这个,所以简单复习下。其实这个大概7,8年前就用过,当时做了几个简单页面觉得太简单就还是回去做嵌入式了。按照互联网技术的进化速度,本来以为早死在 沙滩上了,没想到现在还在坚…

Linux 1.0.4

父子shell linux研究的就是shell 打开两个窗口就是两个shell 终端的软件有很多 bash也是一个软件 我们在terminal里面再打开一个bash,然后再次使用ps命令发现多出来一个bash,之后点击exit只是显示了一个exit,这个只是退出了在terminal中打开…

Qt -下载Qt6与OpenCV

博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 前言 呃啊,本来就想在 Qt 里简单几个 OpenVC 的函数,没想到一搞就是一天。 我之前的开发环境是 Qt 5.14.2,使用 MinGW 7.3.0 64-bit 编…

机器学习无监督学习sklearn实战一:K-Means 算法聚类对葡萄酒数据集进行聚类分析和可视化( 主成分分析PCA特征降维)

本项目代码在个人github链接:https://github.com/KLWU07/Machine-learning-Project-practice/tree/main/1-Wine%20cluster%20analysis 如果对于聚类算法理论不理解可参考这篇之前文章机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类&…

可灵2.1 vs Veo 3:AI视频生成谁更胜一筹?

在Google发布Veo 3几天后,可灵显然感受到了压力,发布了即将推出的视频模型系列可灵 2.1的早期体验版。 据我了解,有三种不同的模式: 可灵 2.1 标准模式: 720p分辨率 仅支持图像转视频(生成更快,一致性更好) 5秒视频仍需20积分 可灵 2.1 专业模式: 1080p分辨率 仅在图…

LLM优化技术——Paged Attention

在Transformer decoding的过程中,需要存储过去tokens的所有Keys和Values,以完成self attention的计算,称之为KV cache。 (1)KV cache的大小 可以计算存储KV cache所需的内存大小: batch * layers * kv-he…

推荐几个不错的AI入门学习视频

引言:昨天推荐了几本AI入门书(AI入门书),反响还不错。今天,我再推荐几个不错的AI学习视频,希望对大家有帮助。 网上关于AI的学习视频特别多。有收费的,也有免费的。我今天只推荐免费的。 我们按…

采用Bright Data+n8n+AI打造自动化新闻助手:每天5分钟实现内容日更

一、引言 在信息爆炸的时代,作为科技领域的内容创作者,我每天都要花费2-3小时手动收集行业新闻、撰写摘要并发布到各个社群。直到我发现Bright Datan8nAI这套"黄金组合",才真正实现了从"人工搬运"到"智能自动化&qu…

Real SQL Programming

目录 SQL in Real Programs Options Stored Procedures Advantages of Stored Procedures Parameters in PSM SQL in Real Programs We have seen only how SQL is used at the generic query interface --- an environment where we sit at a terminal and ask queries …

Sentinel限流熔断机制实战

1、核心概念 1.1、流量控制 流量控制是为了 防止系统被过多的请求压垮,确保资源合理分配并保持服务的可用性,比如对请求数量的限制。 流量控制的 3 个主要优势: 防止过载:当瞬间涌入的请求量超出系统处理能力时,会…

79. 单词搜索-极致优化,可行性剪枝和顺序剪枝

给你一个目标字符串,和一个二维字符数组,判断在数组中是否能找到目标字符串。 例如,board [["A","B","C","E"],["S","F","C","S"],["A","…

ICDMC 2025:创新媒体模式,迎接数字时代的挑战

2025年数字媒体与通讯国际会议将在风景秀丽的中国山东举行。此次会议致力于促进数字媒体和通讯领域的国际合作与交流,为相关产业发展提供智力支持和技术引领。我们诚挚邀请来自世界各地的学者、研究人员和行业专家参加本次会议,共同探讨前沿问题和发展方…

SoftThinking:让模型学会模糊思考,同时提升准确性和推理速度!!

摘要:人类的认知通常涉及通过抽象、灵活的概念进行思考,而不是严格依赖离散的语言符号。然而,当前的推理模型受到人类语言边界的限制,只能处理代表语义空间中固定点的离散符号嵌入。这种离散性限制了推理模型的表达能力和上限潜力…

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册 晨控CK-UR08系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题:围绕…

开源即战力!从科研到商用:Hello Robot 移动操作机器人Stretch 3多模态传感融合(RGB-D/激光/力矩)控制方案

科研领域对机器人技术的需求日益增长,Hello Robot的移动操作机器人Stretch 3凭借其灵活性和性能满足了这一需求。其模块化设计、开源架构和高精度传感控制能力,使科研人员能够顺利开展实验。Stretch 3以其独特的移动操作能力,为科研探索提供了…

元胞自动机(Cellular Automata, CA)

一、什么是元胞自动机(Cellular Automata, CA) 元胞自动机(CA) 是一种基于离散时间、离散空间与规则驱动演化的动力系统,由 冯诺依曼(John von Neumann) 于1940年代首次提出,用于模…