一、背景

需求:客户要实现Mysql8.0+高可用,出现故障时,需要实现自动切换。

分析:实现切换有两种方式,一种数据库自动切换,一种代码实现。

本着麻烦别人,别麻烦自己的原则,得给客户的DBA派活儿了。

实现MySQL数据库集群自动切换,核心目标是高可用性(High Availability, HA),即在主节点故障时,系统能自动、快速、安全地将服务切换到备用节点,最大限度减少停机时间。

二、方案收集

2.1. 方案一:主从复制

基于主从复制 + 高可用中间件/工具 (最主流、灵活)
架构: 
1个主节点(Master: 负责处理所有读写请求。
1个或多个从节点(Slave: 通过MySQL原⽣异步/半同步复制从主节点同步数据,通常配置为只读。
⾼可⽤管理器:
Keepalived + VRRP: 提供⼀个虚拟IPVIP)。Keepalived监控主节点健康状态,若主故障,通过VRRP协议将VIP漂移到选定的从节点(需配合脚本提升该从为主)。
MHA (Master High Availability): 专为MySQL设计的成熟⼯具。Manager节点监控所有节点,主故障时⾃动选择最新数据的从节点,将其提升为新主,并尝试让其他从库指向新主。⽀持故障转移、主节点切换等。(不维护啦,不做推荐)
ProxySQL / MaxScale (MariaDB) / HAProxy: 智能代理 层。应⽤连接代理,代理将写请求转发给主节点,读请求 可转发给从节点。代理持续监控后端节点健康状态。主节 点故障时,代理⾃动将写流量切换到新的主节点(通常需要配合 pt-heartbeat 或代理内置机制检测延迟和复制状态)。
【⾃动切换流程:】
1. 监控组件持续检测主节点健康(⽹络可达性、MySQL进程状 态、复制状态、⾃定义脚本如 SELECT 1 )。
2. 检测到主节点故障(超时⽆响应、服务宕机、复制严重延迟 等)。
3. ⾼可⽤管理器触发故障转移流程:确认主节点确实不可⽤(防⽌误判)。
选择⼀个最合适的从节点(通常是数据最接近主节点、复 制延迟最⼩的那个)。
提升该从节点为新的主节点(执⾏ STOP SLAVE; RESETSLAVE ALL; 或类似操作,确保其可写)。
如果使⽤VIP,则让VIP漂移到新主节点。
如果使⽤代理,则更新代理配置,将写请求指向新主。
(可选)让其他从节点开始从新主节点复制数据。
4. 应⽤通过VIP或代理重新连接到新的主节点,恢复服务。
【优点】 技术成熟、灵活(可⾃由选择组件)、成本相对较低(开源软件为主)、⽀持读写分离。
缺点: 配置和管理相对复杂;异步复制存在数据丢失⻛险(除⾮⽤半同步);脑裂⻛险需妥善处理(如使⽤第三⽅仲裁);代理层本⾝需要⾼可⽤(可⽤双活代理+Keepalived VIP)。
适⽤场景: 对成本敏感、需要灵活配置、可接受⼀定配置复杂度的场景。是当前最⼴泛采⽤的⽅案。

2.2. 方案二:MGR

MySQL Group Replication (MGR) - MySQL官⽅⽅案

架构: ⾄少3个节点(推荐单主模式)

基于Paxos分布式⼀致性协议实现数据同步(多数派确认)。

内置组成员管理、故障检测和⾃动主节点选举。
单主模式:只有⼀个节点可写(主节点),其他节点只读(但具备完整数据)。
多主模式:所有节点均可读写(但冲突检测和性能开销⼤,⽣产环境慎⽤)。
【⾃动切换流程:】
1. 组内节点通过组通信系统持续通信。
2. 如果主节点故障或⽹络分区导致失联。
3. 剩余存活节点(需构成多数派)会⾃动检测到主节点缺失。
4. 组内⾃动发起选举,根据预设规则(如 group_replication_member_weight )从存活的、数据⼀致的节 点中选出新的主节点。
5. 选举过程快速(通常秒级)。⼀旦新主当选,组内状态更新。
6. 应⽤需要感知新的主节点地址(通常需配合连接器如MySQL Router)。
【优点】原⽣集成于MySQL>=5.7.17),⽆需额外中间件(除Router外);内置强⼀致性保证(⾏级冲突检测);⾃动故障检测与选举; 避免脑裂(需多数派存活);⽀持多节点写⼊(多主模式)。
【缺点】性能开销⽐异步复制⼤(需要多数派确认写操作);对⽹络延 迟和稳定性要求极⾼;配置和管理有特定要求;脑裂后恢复可能复 杂;单主模式下读扩展性不如主从+代理。
【适⽤场景】 对强⼀致性要求⾼、愿意接受⼀定性能开销、希望使⽤官
⽅原⽣⽅案、⽹络环境良好的场景。是未来发展的重点⽅向。

2.3. 方案三:PXC/Galera Cluster

Percona XtraDB Cluster (PXC) / Galera Cluster
架构:
  • ⾄少3个节点。
  • 基于Galera库实现的同步多主集群。
  • 所有节点均可读写,数据写⼊在提交前必须在集群内同步到其
  • 他节点(通过Certification-Based Replication)。
  • 使⽤基于组通信的 gcomm 协议进⾏节点间通信。
【⾃动切换流程:】
严格来说,PXC/Galera没有传统意义上的主从切换”,因为它 是多主的。
如果某个节点故障,只要集群多数派(Quorum)存活(通常 N/2+1),集群就能继续提供服务(读写在存活节点上进⾏)。
故障节点恢复后会从Donor节点⾃动进⾏SST(State Snapshot Transfer)或ISTIncremental State Transfer)同步数据重新加 ⼊集群。
【优点】真正的多主读写;强⼀致性;⾼可⽤性(节点故障对服务影响⼩,只要满⾜Quorum);⾃动成员管理和故障恢复;数据⼏乎⽆丢 失⻛险。
【缺点】 写性能受限于最慢节点和⽹络(同步复制开销);写冲突可能导致回滚;需要较⼤的 wsrep_slave_threads SST过程可能影响Donor性能;对⽹络要求极⾼;DDL操作需要特别⼩⼼。
【适⽤场景】需要真正的多主写⼊、对强⼀致性和⾼可⽤性要求极⾼、
能接受同步复制带来的潜在性能瓶颈的场景。
2.4. 方案四:云数据库
云数据库⾼可⽤服务 (省⼼之选)架构:
直接使⽤阿⾥云RDSAWS RDS、Azure Database for MySQL、腾讯云CDB等提供的托管MySQL服务。
云厂商在其底层实现了⾼可⽤⽅案(通常是主从复制+类似Keepalived/MHA的⾃动故障转移,或基于共享存储如阿⾥云三节点企业版)
【⾃动切换流程:】
完全由云平台管理。主节点故障时,云平台⾃动检测并触发故障转移,提升备节点为主节点。
切换过程对应⽤透明(通常通过DNSEndpoint⾃动重定向)。
优点: 开箱即⽤,运维复杂度极低;云⼚商负责底层维护、监控、备份等;通常有SLA保障。
【缺点】成本通常⾼于⾃建;灵活性受限于云平台提供的功能和配置选项;
可能存在⼚商锁定⻛险。
【适⽤场景】希望最⼤程度减少数据库运维负担、预算充⾜、对云平台 信任的场景。

三、决策

3.1方案比较

到底应该使用哪种方案呢?
云方案首先排除,客户是自建服务。
那就对比方案一和方案二:
【提问】通过MySQL原生异步/半同步复制从主节点同步数据。和MGR方案的同步有什么区别呢?
【分析】

3.1.1 原生异步复制 (Async Replication)

特点:
  • 数据可能丢失:Master 提交后即返回,Binlog 未同步到 Slave
  • 延迟无上限:Slave 可能落后 Master 数小时

3.1.2 半同步复制 (Semi-Sync)

特点:

防丢数据:确保事务 Binlog 到达至少一个 Slave
不防延迟:Slave 可能未应用日志(仅保证收到)
主宕机仍丢数据:若 ACK 后 Slave 未应用日志

3.1.3 MGR

特点:

强一致性:事务提交需多数节点认证
零数据丢失:返回成功 = 数据在多数节点持久化
自动冲突解决:行级冲突检测 (certification)

3.1.4 决策

搭建主从节点方式是局域网,局域网一般网络延迟小于5ms。(当然这里需要验证和测试)

四、安装 

最终采用组复制+Router,请参考下面官方文档:

Mysql Group Replication 官网安装步骤
Mysql Router 插件 官网安装步骤
等等……
我既然选择了MGR+Router,为啥不选择InnoDB Cluster呢?

五、Mysql官方方案比较

上面提到的MHA已经在不维护了,那还得看其他的解决方案,这边整理了官方以下方案:
  1. 主从半同步复制、
  2. InnoDB ReplicaSet、
  3. 组复制(MGR)、
  4. InnoDB Cluster、
  5. InnoDB ClusterSet
解决方案底层技术数据一致性故障切换时间容灾级别适用规模运维复杂度
主从半同步复制半同步复制最终一致30~60秒节点级<1TB⭐⭐
InnoDB ReplicaSet异步复制+管理框架最终一致手动切换节点级<5TB
组复制(MGR)Paxos协议多节点同步强一致(RPO=0)<10秒节点级<10TB⭐⭐⭐
InnoDB ClusterMGR+Router+Shell强一致(RPO=0)<10秒节点级任意规模⭐⭐
InnoDB ClusterSet多Cluster+异步复制最终一致分钟级地域级超大规模⭐⭐⭐⭐
5.1. 主从半同步复制

(Semi-Synchronous Replication)

  • 原理:主库提交事务前需至少一个从库确认接收Binlog,超时自动降级为异步复制

  • 优势
    ✅ 数据丢失风险低于异步复制(如支付流水日志)
    ✅ 成本低(2节点即可部署)

  • 局限
    ❌ 切换时可能丢失超时窗口内的数据(默认10秒)
    ❌ 需配合Keepalived等工具实现VIP漂移

  • 典型场景

    • 电商订单查询系统(读多写少)

    • 制造业MES实时数据采集2

5.2. InnoDB ReplicaSet
  • 原理:基于异步复制的自动化管理套件(MySQL Shell + Router),简化主从配置9

  • 优势
    ✅ 分钟级部署(自动配置复制账号、GTID)
    ✅ 支持Router自动读写分离

  • 局限
    ❌ 无自动故障切换(需手动提升主节点)
    ❌ 数据一致性弱(依赖异步复制)

  • 典型场景

    • 中小型企业内部管理系统(OA、CRM)

    • 开发测试环境高可用模拟

5.3. 组复制

(MGR, MySQL Group Replication)

  • 原理:基于Paxos协议的多节点共识,事务需多数节点(N/2+1)认证后提交410

  • 优势
    ✅ 强一致性(金融级数据安全,如账户余额)
    ✅ 自动选主与节点自愈(无需外部工具)

  • 局限
    ❌ 仅支持InnoDB表且必须含主键58
    ❌ 网络延迟>50ms时性能骤降

  • 典型场景

    • 支付核心交易系统(RPO=0要求)

    • 政务数据共享平台(多部门数据强同步)

5.4. InnoDB Cluster
  • 原理:整合MGR + MySQL Router(流量代理) + MySQL Shell(管理)

  • 优势
    ✅ 图形化运维(一键扩缩容、故障修复)
    ✅ 读写分离自动路由(Router隐藏后端拓扑)

  • 局限
    ❌ 绑定MySQL官方生态(版本需严格兼容)
    ❌ Router需单独部署高可用

  • 典型场景

    • 云数据库服务(如AWS RDS高可用版)

    • 大型ERP系统(多模块数据强一致)

5.5. InnoDB ClusterSet
  • 原理:多个InnoDB Cluster通过异步复制组成跨地域集群,主Cluster故障时备用Cluster接管9

  • 优势
    ✅ 地域级容灾(如机房级故障切换)
    ✅ 备用Cluster可提供只读服务

  • 局限
    ❌ 跨集群切换需手动触发
    ❌ 备用集群数据延迟(依赖异步复制)

  • 典型场景

    • 跨国电商全球业务(多活地域部署)

    • 金融行业两地三中心容灾架构

 如果对你有帮助,点个收藏⭐,点个赞​​再去官方盘文档呗……

--------------------------------------------结束--------------------------------------------

扩展阅读

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

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

相关文章

AI编程革命:自动化代码生成、低代码开发与智能优化实践全景解析

AI编程革命&#xff1a;自动化代码生成、低代码开发与智能优化实践全景解析 人工智能正在重塑软件开发的基本范式&#xff0c;从自动化代码生成到低代码开发平台&#xff0c;再到算法智能优化&#xff0c;AI编程技术正以指数级速度改变开发者工作方式。 一、自动化代码生成技术…

[实战] 用1 PPS 驯服本地恒温晶振(OCXO/TCXO)

1 PPS 驯服本地恒温晶振&#xff08;OCXO/TCXO&#xff09; “让任何工程师都能在一周内做出自己的 GPSDO” 文章目录1 PPS 驯服本地恒温晶振&#xff08;OCXO/TCXO&#xff09;前言1 系统总体框图2 硬件清单与连接3 时间间隔测量&#xff08;TDC&#xff09;原理4 数字锁相环算…

基于RK3576+FPGA的无人机飞控系统解决方案

基于RK3576FPGA的无人机飞控系统解决方案设计如下&#xff1a;一、硬件架构设计‌异构计算核心模块‌主控采用RK3576处理器&#xff0c;四核Cortex-A72&#xff08;2.3GHz&#xff09;运行路径规划算法&#xff08;A*、RRT*&#xff09;&#xff0c;支持动态避障响应时间<50…

2025暑期—05神经网络-卷积神经网络

1. 卷积神经网络实际上就是避免过拟合&#xff0c;就是“特征”神经网络。这个特征和卷积核相关。卷积和相关类似&#xff0c;有点是本质属性和输出属性的感觉。着重注意三通道卷积padding 上下左右、前后都要加边池化就是解决特征过多问题&#xff0c;缩小1倍较多。均值池化&a…

Elasticsearch部署全攻略:编译安装与 Yum 安装实践,日志切割及报错处理

前言&#xff1a;在 Linux 运维工作中&#xff0c;Elasticsearch 的部署与运维是高频需求——无论是快速搭建测试环境还是构建生产级集群&#xff0c;选择合适的安装方式&#xff08;编译安装或 Yum 安装&#xff09;直接影响后续维护效率。同时&#xff0c;日志的合理切割能避…

TypeScript 配置参数详解 (tsconfig.json)

文章目录前言核心配置基本选项严格类型检查选项模块解析选项Source Map 选项实验性选项其他选项文件包含/排除选项详细用法示例最佳实践建议前言 tsconfig.json 是 TypeScript 项目的配置文件&#xff0c;用于指定编译选项和文件包含规则。以下是所有主要配置参数的中文详解&a…

Java经典笔试题

1.计算机网络传输层有哪些协议&#xff1f;分别适用于什么场景&#xff1f; TCP&#xff1a;面向连接、可靠传输&#xff08;重传机制&#xff09;&#xff0c;适用于对数据完整性要求高的场景&#xff0c;如文件传输 &#xff08;FTP&#xff09;、HTTP 通信、邮件发送&…

如何序列化和反序列化动态 XmlElement ?

有如下XML&#xff0c;Index_0-Index_N为动态的&#xff0c;N为可变数&#xff0c;如何将对象NoneXML序列化为XML&#xff0c;以及如何将XML内容反序列化为对象NoneXML&#xff1f;1、XML内容<NoneXML><Index_0><UseInSummary>0</UseInSummary><Beg…

分布式高可用ELK平台搭建及使用保姆级教程指南 (附安装包网盘免费下载)

1 ELK 简介 1.1 ELK 是什么 ​ ELK是一套开源免费且功能强大的日志分析管理系统,由 Elasticsearch、Logstash、Kibana 三部分组成,是三个软件产品的首字母缩写,简称ELK。这三款软件都是开源软件,通常是配合使用,且归于 Elastic.co 公司名下,所以被简称为 ELK。 ​ ELK…

MySQL索引背后的B+树奥秘

MySQL 索引实现机制深度解析 MySQL 索引的核心数据结构是 B树。这种设计是数据库领域数十年优化的结果&#xff0c;完美平衡了磁盘 I/O 效率、范围查询性能和存储利用率。以下是关键要点&#xff1a;一、为什么选择 B树而非其他结构&#xff1f;数据结构劣势B树优势二叉搜索树深…

k8s通过NUMA亲和分配GPU和VF接口

问题 一般情况下&#xff0c;sriov插件和gpu分配插件是单独工作的&#xff0c;网卡和GPU没有根据连接关系分配 如果一个节点起了多个容器&#xff0c;会造成GPU和网卡的通信瓶颈 修改 如果一个点起两个容器&#xff0c;可以按照NUMA亲和来分配 修改kubelet配置文件/var/lib/kub…

qemu-img 扩容虚拟机磁盘后扩容文件系统

在给磁盘映像扩容前需要关闭虚拟机1. 关闭虚拟机 [rootkvm1 opt]# virsh shutdown centos7.9 [rootkvm1 opt]# virsh list --allId Name State ----------------------------- centos7.9 shut off[rootkvm1 opt]# qemu-img info /var/lib/libvirt/images/centos…

Winwos上编译opencv的GPU版本推理yolov8

1.工具 VS2019 opencv4.7.0 opencv_contrib4.7.0 Cmake3.27.0 cudnn-windows-x86_64-8.5.0.96_cuda11-archive 2.具体流程 1.配置路径和编译器后点击configure 2.提前下载相关的包&#xff0c;如下图所示 3.第一次configure完成后&#xff0c;需要再配置编译选项 在编译…

C语言案例《猜拳游戏》

《猜拳游戏》 游戏说明 一、游戏简介 本游戏为猜拳对战类游戏&#xff0c;玩家可选择不同对手进行石头、剪刀、布的猜拳对决&#xff0c;支持重复游玩&#xff0c;直至玩家选择退出。 二、游戏流程 选择对手 游戏开始后&#xff0c;玩家需从 3 名对手中选择 1 名进行对战&#…

使用python的头文件Matplotlib时plt.show()【标题字体过小】问题根源与解决方案

使用python的头文件Matplotlib时plt.show【标题字体过小】问题根源与解决方案1. 问题复现2. 问题分析3. 解决方案方案一&#xff08;推荐&#xff09;&#xff1a;使用 fig.suptitle 结合 subplots_adjust方案二&#xff1a;以保存文件函数plt.savefig为准方案三&#xff1a;不…

全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石

> 本文将带你深入探索MySQL的进阶CRUD操作与核心约束机制,用设计原则的视角揭示数据库如何保障数据世界的秩序。 ### 一、进阶CRUD:数据操作的精密工具 #### 1. 精准筛选:WHERE子句的深度运用 ```sql -- 基础筛选:价格大于50的菜品 SELECT * FROM dishes WHERE pric…

使用Redis实现MySQL的数据缓存

使用Redis来实现/mySQL的数据缓存的架构1&#xff1a;目标数据从mySQL读取数据或者从Redis读取数据 2&#xff1a;使用cannal监控mySQL&#xff1a;canal-server可以对mysql的blog实行拉取&#xff0c;可以拉去blog里面的(增&#xff0c;删&#xff0c;改等操作&#xff0c;查询…

linux配置ntp时间同步

目录 1.设置时区 2.安装chrony时间同步工具 3.修改chrony配置文件,添加阿里云NTP服务器作为时钟源 4.重启chrony服务&#xff0c;并查看同步结果 1.设置时区 timedatectl set-timezone Asia/Shanghai 2.安装chrony时间同步工具 apt install chrony -y&#xff08;dnf ins…

powershell 实现批量把文件夹下的bmp文件转换为jpg

以下是一个使用PowerShell将BMP图像批量转换为JPG&#xff08;质量85&#xff09;的脚本&#xff1a; <# .SYNOPSIS批量将BMP图像转换为JPG格式&#xff08;质量85&#xff09; .DESCRIPTION此脚本会遍历指定文件夹中的所有BMP文件&#xff0c;并将它们转换为JPG格式&#x…

星图云开发者平台新功能速递 | 页面编辑器:全场景编辑器,提供系统全面的解决方案

在数字化转型的浪潮下&#xff0c;高效的低代码开发工具成为企业和开发者的刚需&#xff0c;其需要针对Web、APP、H5等不同终端快速构建应用。但不同场景的开发往往需要不同的工具和技术栈&#xff0c;导致开发效率低、协作成本高。星图云开发者平台创新推出多类型页面专用编辑…