MySQL 高可用领域中,​​MHA(Master High Availability)​​ 和 ​​MGR(MySQL Group Replication)​​ 是两种代表性的解决方案,但它们在​​实现原理、数据一致性、故障切换逻辑和应用场景​​上存在根本性差异。以下是深度对比:


​一、核心原理对比​

​特性​ ​MHA(MasterHighAvailability)​ ​MGR(MySQLGroupReplication)​
​架构本质​ ​外部管理工具​​(Perl脚本) ​内置引擎级插件​​(InnoDB整合)
​复制模式​ 基于传统​​异步/半同步复制​​(主从架构) 基于​​组通信协议(Paxos)​​ 的强同步复制(多主/单主架构)
​故障检测​ Manager节点主动轮询健康状态(易漏判) 节点间​​心跳检测 + 分布式共识​​(自动驱逐故障节点)
​故障切换主体​ ​MHA Manager 脚本触发​​(需 SSH 免密登陆) ​组内节点自协商 + 内置选举协议​​(无需外部组件)
​数据一致性保证​ ​最终一致性​​(切换后需补 Binlog 差异) ​强一致性​​(多数派提交后才返回客户端成功)
​脑裂防护​ 需额外配合(如写 VIP、调用脚本 kill 旧主) ​内建防脑裂​​(基于多数派 Quorum 机制)

​二、核心差异深度解析​

​1. 数据一致性:弱 vs 强​

  • ​MHA:​

    • 依赖异步/半同步复制,​​主从数据可能有延迟​​。
    • ​故障切换后需人工介入​​:新主数据可能缺失,需用apply_diff_relay_logs脚本补足 Binlog 差异(​​仍有数据丢失风险​​)。
    • ​适用场景​​:允许分钟级数据延迟的业务(如报表库、日志分析)。
  • ​MGR:​

    • ​事务提交需多数派投票​​(如 3 节点中至少 2 个确认)。
    • 客户端收到成功响应时,数据已在多数派节点​​逻辑确认并持久化​​(Redo Log)。
    • ​适用场景​​:金融交易、核心业务(要求数据零丢失)。

​2. 故障切换逻辑:手动 vs 全自动​

  • ​MHA:​

    • ​痛点​​:需人工确认、补日志慢、VIP 漂移依赖脚本(可能失败)。
  • ​MGR:​

- ​**​优势​**​:无需人工干预、秒级切换、内置防脑裂。

​3. 扩展性与读负载均衡​

  • ​MHA:​

    • 仅支持​​单主写入​​,从库只读。
    • 读扩展需配合中间件(如 ProxySQL)实现负载均衡。
  • ​MGR:​

    • 默认单主模式(亦可配置多主)。
    • ​MySQL Router 原生支持读写分离​​:自动路由写请求到主节点,读请求负载均衡到从节点。

​三、应用场景对比​

​场景​ ​推荐方案​ ​原因​
​传统业务,可容忍分钟级数据丢失​ MHA 轻量级、部署简单,适合非核心业务(如内部系统)
​金融级业务,要求强一致性​ MGR 数据零丢失、切换全自动,符合监管要求
​云环境或容器化部署​ MGR 无依赖 SSH/VIP,原生适应动态 IP 环境
​多地域部署​ MGR 内置流控与冲突检测,降低多中心写入风险
​开发/测试环境​ MHA 资源消耗低,快速搭建

​四、选型决策树​


​总结​

  • ​MHA:过渡性方案​

    适合​​传统异步复制架构升级​​,低成本提升可用性,但存在数据一致性风险与运维复杂度。

  • ​MGR:未来方向​

    ​MySQL 官方推荐的高可用架构​​,提供分布式强一致性与全自动故障转移,适应云原生与核心业务场景,但需至少 3 节点和低延迟网络。

​建议​​:

  • 新项目优先选择 ​​MGR​​(MySQL 8.0 内置,技术成熟)
  • 存量业务迁移评估网络和资源,逐步从 MHA 切换至 MGR
  • 混合云场景可用 MGR + MySQL Router 实现跨云高可用

​​MHA(Master High Availability)​​ 和 ​​MGR(MySQL Group Replication)对比的更多相关文章

  1. MGR(MySQL Group Replication)部署测试

    1. 环境说明 192.168.11.131 mgr1 主节点 192.168.11.132 mgr2 从节点 192.168.11.133 mgr3 从节点 2. 在mgr1.mgr2.mgr3上安 ...

  2. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  3. mysql group replication 主节点宕机恢复

    一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...

  4. mysql group replication观点及实践

    一:个人看法 Mysql  Group Replication  随着5.7发布3年了.作为技术爱好者.mgr 是继 oracle database rac 之后. 又一个“真正” 的群集,怎么做到“ ...

  5. MySQL Group Replication配置

    MySQL Group Replication简述 MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事 ...

  6. Mysql Group Replication 简介及单主模式组复制配置【转】

    一 Mysql Group Replication简介    Mysql Group Replication(MGR)是一个全新的高可用和高扩张的MySQL集群服务.    高一致性,基于原生复制及p ...

  7. MySQL Group Replication 介绍

    2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...

  8. mysql group replication 安装&配置详解

    一.原起: 之前也有写过mysql-group-replication (mgr) 相关的文章.那时也没有什么特别的动力要写好它.主要是因为在 mysql-5.7.20 之前的版本的mgr都有着各种各 ...

  9. MySQL Group Replication数据安全性保障

    本文来自数据库内核专栏 在之前的文章中,介绍了MGR对数据可靠性.可用性和一致性的实现方案.简单来说,MGR通过基于paxos协议的多副本来实现数据的可靠性,通过多副本上的majority机制来实现可 ...

  10. Galera将死——MySQL Group Replication正式发布

    2016-12-14 来源:InsideMySQL 作者:姜承尧 MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生 ...

随机推荐

  1. np.random总结

    import numpy as np (1)np.random.random_sample help(np.random.random_sample) Help on built-in functio ...

  2. 再论“ArcGIS AddIN之工具不可用”

    工作需要,开发arcgis的addin插件.从网上找了工程范例,编译dll,没有生成esriAddIn文件. 第二次,重新创建addin类型的动态库工程,从范例中复制类文件到工程中,编译dll,正常生 ...

  3. 航空货运系统总结性Blog

    前言 本次题目集以航空运送货物为背景,设计航空货物管理系统,主要考察对类设计的把握是否合理还有对继承和多态的使用,能否设计出符合标准的类,是否充分理解对面向对象六大设计原则(SRP,OCP,LSP,D ...

  4. AD 权限维持-金票银票攻击

    本文通过 Google 翻译 Domain Persistence – Golden Ticket and Silver Ticket Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭 ...

  5. JAVA经典算法分析

      算法分析是对一个算法需要多少计算时间和存储空间作定量的分析. 算法(Algorithm)是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法.在计算机科学中,算法要用计算机算法语言描述 ...

  6. 聊聊@Autowired注解的Field injection is not recommended提示问题

    1. 前言 在我接触过的大部分Java项目中,经常看到使用@Autowired注解进行字段注入: import org.springframework.beans.factory.annotation ...

  7. 【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测

    [中文][吴恩达课后编程作业]Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测 上一篇:[课程5 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:无 致谢: 感谢@e ...

  8. 雷池WAF磁盘空间告急?手把手教你轻松清理

    一.为什么磁盘会满?--了解空间去哪了 雷池WAF在保护你的网站时,会持续记录各种安全数据.主要占用空间的有两大"仓库": 防护日志仓库(数据库) ● 存放内容:攻击记录.人机验证 ...

  9. android input

    通常,从EditText中获取字符串很简单:    EditText text = findViewById(R.id.textName);    String name = text.getText ...

  10. Linux服务器开放端口号

    Linux服务器开放端口号(6379) 1.查看端口状态,比如redis 6379 firewall-cmd --zone=public --query-port=6379/tcp 2.如果是no-表 ...