首页 > 数据库 >MySQL5.7新特性--官方高可用方案MGR介绍

MySQL5.7新特性--官方高可用方案MGR介绍

时间:2024-11-14 09:07:21浏览次数:1  
标签:slave -- MySQL5.7 MGR 复制 master MySQL 节点

MGR简介

MySQL Group Replication(下简称:MGR)是MySQL官方推出的一种基于Paxos协议的状态机复制。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-sync replication),从而进一步提示数据复制的强一致性。

MGR与其他复制的对比介绍

MySQL异步复制

master事务的提交不需要经过slave的确认,slave是否接收到master的binlog,master并不care。slave接收到master binlog后先写relay log,最后异步地去执行relay log中的sql应用到自身。由于master的提交不需要确保slave relay log是否被正确接受,当slave接受master binlog失败或者relay log应用失败,master无法感知。

假设master发生宕机并且binlog还没来得及被slave接收,而切换程序将slave提升为新的master,就会出现数据不一致的情况!另外,在高并发的情况下,传统的主从复制,从节点可能会与主产生较大的延迟(当然mysql后续版本陆续做了优化,推出了并行复制,以此降低异步复制的延迟)

MySQL半同步复制

基于传统异步存在的缺陷,mysql在5.5版本推出半同步复制。可以说半同步复制是传统异步复制的改进,在master事务的commit之前,必须确保一个slave收到relay log并且响应给master以后,才能进行事务的commit。但是slave对于relay log的应用仍然是异步进行的,原理如下图所示:

MySQL组复制

基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证,MySQL官方在5.7.17版本正式推出组复制(MySQL Group Replication,简称MGR)。

由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。如上图所示,由3个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发生组间通讯,由2个节点决议(certify)通过这个事务,事务才能够最终得以提交并响应。

引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案(是否真正高可用还有待商榷)。其提供的多写方案,给我们实现多活方案带来了希望。

一个复制组由若干个节点(数据库实例)组成,组内各个节点维护各自的数据副本(Share Nothing),通过一致性协议实现原子消息和全局有序消息,来实现组内实例数据的一致。

MGR的解决方案现在具备的特性

  • 数据一致性保障:确保集群中大部分节点收到日志

  • 多节点写入支持:多写模式下支持集群中的所有节点都可以写入

  • Fault Tolerance: 确保系统发生故障(包括脑裂)依然可用,双写对系统无影响

MGR的解决方案目前的影响

  • 仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;

  • 必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set

  • COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景

  • 目前一个MGR集群最多支持9个节点

  • 不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚

  • 二进制日志不支持binlog event checksum

  作者:罗阿红 出处:http://www.cnblogs.com/luoahong/ 

标签:slave,--,MySQL5.7,MGR,复制,master,MySQL,节点
From: https://www.cnblogs.com/gdjgs/p/18545293

相关文章

  • ohos 开发 flutter_module
    1.DevEco-Studio搭建原生工程使用flutter_flutter,配置相关的环境变量使用flutter_engine生成的engine产物2.搭建flutter_module工程1.创建flutter子模块工程fluttercreate-tmodulemy_flutter_module2.编译生成flutter_module.harcdmy_flutter_moduleflutte......
  • 鸿蒙 next 使用并封装富文本 hp-richtext
    鸿蒙next使用并封装富文本hp-richtext使用鸿蒙第三方富文本(https://ohpm.openharmony.cn/#/cn/detail/@ohasasugar%2Fhp-richtext),并再将其包一层实现自己的富文本组件,这样的好处是以后可以自己再里面添加一下逻辑,或者以后可以更换成其他的富文本组件。import{HPRichTe......
  • Flutter OHOS 外接纹理适配简介 - 图片显示
    FlutterOHOS外接纹理适配简介-图片显示Flutter在OHOS平台使用外接纹理,图片场景,以PixelMap的形式注册到flutterengine,与视频播放和相机预览有所区别。注:1.一般而言,为了方便复用,会将ohos对接flutter外接纹理的功能代码作为一个module模块组件单独写一个插件注册到......
  • mysql 行转列和列转行
    一、行转列1、使用case…when…then2、使用SUM(IF())生成列3、使用SUM(IF())生成列+WITHROLLUP生成汇总行4、使用SUM(IF())生成列,直接生成汇总结果,不再利用子查询5、使用SUM(IF())生成列+UNION生成汇总行,并利用IFNULL将汇总行标题显示为Total6、动态查询列值......
  • 鸿蒙开发实战:深度解析网络管理技巧与实战应用
    在鸿蒙项目开发中,网络管理扮演着举足轻重的角色。本文将深入剖析鸿蒙网络管理的核心技术,帮助开发者精准把握网络状态,打造流畅且用户友好的应用体验。在鸿蒙应用中,实时监测网络状态是确保应用稳定性和用户体验的关键。网络状态的变化,如从Wi-Fi切换到移动数据,或从有网络状态变为......
  • AD(活动目录)环境下使用kms服务自动激活域里windows
    AD(活动目录)环境下使用kms服务自动激活域里windows做基础架构运维对AD域架构和kms激活应该是比较熟悉的,关于kms激活服务器搭建,可以看看网上的相关资料,其安装在CentOS比较稳定,当然也支持其他类似的OS。安装过程不再赘述了。希望能够帮助大家!可以参考:bbs.pcbeta.com/forum.php?mod......
  • tomcat 多实例多项目部署,配置解析
    背景一台机器上,如果想要部署多个tomcat实例,而又不想安装多个tomcat的话,可以借助tomcat的Catalina_base实现共享类库和bin命令,只要自定义自己的配置即可。关于CATALINA_HOME和CATALINA_BASE官方解释:CATALINA_HOME:表示Tomcat安装的根目录,例如/home/tomcat/apache-tomcat-9......
  • 渗透测试:企业信息安全的“隐形盾牌”
    渗透测试是一种针对企业安全系统的专业测试服务,旨在通过模拟多种黑客攻击手法,逐层排查网络安全漏洞,验证企业的数据是否可被窃取或破坏,从而全面评估信息系统的安全性。产品优势:安全专家服务:我们拥有一支经验丰富、资质认证齐全的专家团队,能够为企业提供最专业的渗透测试服务。......
  • Elastic_Dev_Tools
    GET_search{"query":{"match_all":{}}}GET/_analyze{"analyzer":"ik_smart","text":"我爱北京天安门"}#创建表PUT/user{"mappings":{"properties":{......
  • 基于java和微信小程序实现投票评选系统项目【项目源码+论文说明】
    基于java和微信小程序实现投票评选系统演示【内附项目源码+LW说明】摘要越来越多信息化融入到我们生活当中的同时,也在改变着我们的生活和学习方式,当然,变化最明显的除了我们普通民众之外,要数高校学生的生活方式以及校园信息化的变革。智慧是改变生活和生产的一种来源,那么智......