您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

微服务架构下:MySQL5.7新特性--官方高可用方案MGR介绍

时间:2019-08-27 09:24:12  来源:  作者:
欢迎关注我的头条号:Wooola,10年JAVA软件开发及架构设计经验,专注于Java、Golang、微服务架构,致力于每天分享原创文章、快乐编码和开源技术。

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无法感知。

微服务架构下:MySQL5.7新特性--官方高可用方案MGR介绍

 

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

MySQL半同步复制

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

微服务架构下:MySQL5.7新特性--官方高可用方案MGR介绍

 

MySQL组复制

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

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

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

微服务架构下:MySQL5.7新特性--官方高可用方案MGR介绍

 

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

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

  • 数据一致性保障:确保集群中大部分节点收到日志
  • 多节点写入支持:多写模式下支持集群中的所有节点都可以写入
  • Fault Tolerance: 确保系统发生故障(包括脑裂)依然可用,双写对系统无影响

MGR的解决方案目前的影响

  • 仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;
  • 必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set
  • COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景
  • 目前一个MGR集群最多支持9个节点
  • 不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚
  • 二进制日志不支持binlog event checksum

来源:cnblogs | 罗阿红



Tags:MySQL5.7   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
搭建的环境1主1从:Mysql_1作为主服务器ip:192.168.254.129,Mysql_2作为从服务器ip:192.168.254.130首先准备好2台安装好Mysql5.7的服务器,安装过程可以查看这个链接:https://www.d...【详细内容】
2021-09-06  Tags: MySQL5.7  点击:(49)  评论:(0)  加入收藏
安装mysqlsudo apt-get updatesudo apt-get install mysql-server输出:Reading package lists... DoneBuilding dependency treeReading state information... DoneThe follo...【详细内容】
2021-07-05  Tags: MySQL5.7  点击:(88)  评论:(0)  加入收藏
前置工作-更换yum源1)打开 mirrors.aliyun.com,选择centos的系统,点击帮助2)执行命令:yum install wget -y3)改变某些文件的名称mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r...【详细内容】
2021-04-20  Tags: MySQL5.7  点击:(134)  评论:(0)  加入收藏
CentOS7下yum方式安装MySQL5.7数据库之前有介绍CentOS6下安装MySQL5.7.25二进制版本,不过有时为了方便,采用yum方式快速搭建MySQL数据库,下面简单介绍具体步骤1、配置mysql的yu...【详细内容】
2021-03-11  Tags: MySQL5.7  点击:(188)  评论:(0)  加入收藏
啰嗦的话,不多说,我们直接开始部署,我相信有点linux基础的人都能看得懂。Mysql5.7.22主从部署,既然是主从那肯定是需要至少2台服务器了,2台的安装都是一样的,请看下面!1、 创建mysq...【详细内容】
2021-01-11  Tags: MySQL5.7  点击:(127)  评论:(0)  加入收藏
对于多台服务器安装mysql数据库,采用手工安装,是非常繁琐的,如果采取脚本批量安装,就非常的方便了,具体操作方法如下:创建目录mkdir -p /appsmkdir -p /data 上传安装包 上传执行...【详细内容】
2021-01-08  Tags: MySQL5.7  点击:(189)  评论:(0)  加入收藏
前言在操作系统为centos的生产环境服务器需要进行等保2.0评测,使用绿盟科技的扫描软件扫描后检测出一大批漏洞,因此需要进行漏洞修复虽然报告中有一大堆的漏洞,但是细分下来分...【详细内容】
2020-09-25  Tags: MySQL5.7  点击:(266)  评论:(0)  加入收藏
系统:Redhat Linux 7.7MySQL版本:5.71. MySQL下载o 登录网站:https://dev.mysql.com/downloads/mysql/o 选择合适版本与系统 Select version:5.7.31 Select operating system:Red...【详细内容】
2020-09-18  Tags: MySQL5.7  点击:(98)  评论:(0)  加入收藏
​本文参考华为鲲鹏社区相关文档完成https://www.huaweicloud.com/kunpeng/系统为aarch64位的CentOS AltArch系统 1、准备如下cmake gcc相关源码包cmakehttps://cmake.org/...【详细内容】
2020-07-19  Tags: MySQL5.7  点击:(140)  评论:(0)  加入收藏
无聊想给博客搞一个自动发布文章功能,自动发布方式有很多种,一般采用计划任务的比较多,一次看到mysql的事件调度,于是想就在mysql数据库中进行定时任务自动修改要发布的文章就可...【详细内容】
2020-06-05  Tags: MySQL5.7  点击:(55)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(7)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(18)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(17)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(21)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(28)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条