MySQL MGR看着很美,却又为什么不敢用?

简介: MySQL MGR看着很美,却又为什么不敢用?

0. 前言

1. 什么是MySQL MGR

当我在群里说起MySQL MGR时,的确还有人不知道这是啥东东。有群友打趣,说这是:

  • 美国人
  • 卖狗肉
  • 蒙古人

我只能说,你们真的都是天才。

image.png

言归正传。

MySQL MGR是MySQL组复制(Group Replication)的简称。

MGR是一种基于shared-nothing的,更方便实现数据一致性高可用集群方案,此外它还支持故障自动检测多节点并行写等特性。它由一组MySQL实例构成,每个实例都有一份完整的数据,实例间通过组通讯消息系统(GCS)交互通信协同。GCS可保证消息的原子性和消息在所有组成员的整体顺序一致

MGR是MySQL自带的一个插件(plugin),可以灵活部署。

它要求组内每个MySQL实例都要基于ROW格式的binlog,并开启GTID。

MGR架构图如下所示,主要是APIs层、组件层、复制协议模块层和GCS API+Paxos引擎层构成。

屏幕快照 2021-11-19 下午3.03.16.png

屏幕快照 2021-11-19 下午3.04.06.png

事务从Server层经过MGR的APIs接口层分发到组件层,组件层去capture事务相关信息,然后经过复制协议层进行事务传输,最后经过GCS API+Paxos引擎层保证事务在各个节点数据最终一致性。

MGR具备以下技术特点:

  1. MGR是基于Paxos协议和原生复制的分布式集群,多数节点同意即可以通过事务提议(Proposed),实现数据一致性。
  2. 具备高可用、自动故障检测功能,可自动切换。
  3. 可弹性扩展,集群自动的新增和移除节点,集群最多接入9个节点。
  4. 有单主和多主模式。支持多节点写入,具备冲突检测机制,可以适应多种应用场景需求。

MySQL MGR是在2015年就已经首次出现在MySQL 5.7版本中,至今已有多年,仍在不断成熟完善中。

一个反直觉的事实是,其实国内已有数个大中型银行上线MySQL MGR,当然了,现阶段还不是应用在非常核心的系统上。此外,亦有不少其他传统企业也在尝试使用MGR,更别说是互联网企业了,更是走在尝鲜的的前列。

哦,对了,Oracle公有云上的MySQL高可用版本据称也是用MGR架构的。

2. 为什么不敢上MGR

虽然知道MGR有这么多好处,而且也有大胆的同行在使用了,但还有不少人表示不放心,不太敢正式上线。

大家到底在担心什么呢?

从平时和大家交流的反馈来看,大家主要关切的有以下几点:

第一,需求不强烈

对于已经用惯了MySQL传统异步复制,以及后来的半同步复制、增强半同步复制,再配合其他第三方的高可用工具套件,已经可以满足绝大多数场景下的需求,所以大家并不急着用上MGR,还想继续观望。

第二,对新事物的恐惧

虽说MGR也发布数年了,但相对于上述提到的传统复制功能,其架构的复杂性,以及现存BUG的数量,都说明了MGR还是不够成熟,起码还没到足以让大家安心上线的阶段。

此外,由于MGR的架构复杂性,也使得大家在使用过程中遇到问题时,如果想要向官方报告,却苦于难以复现问题场景等客观因素,也打击了用户的信心。

我们从MySQL官方bug库搜到关于MGR的bug数量居然只有区区226个,很难说是不是因为复现太难导致无法报告。另外,这其中只有26个是active状态,个人认为这个数据是不太可信的。

我也查找了InnoDB和传统复制的bug数作为参照(active/all):

  • InnoDB:475/2925
  • Replication:360/2584

第三,生态不成熟

上面我们说到,之所以大家还在坚守传统复制,是因为已有大量第三方工具打配合,就可以满足大部分业务需求了。

而可以和MGR配合的第三方工具生态还不够完善,除了MySQL官方的InnoDB Cluster套件(MySQL Router + MySQL Shell + MGR)之外,几乎没有随手拿来就能用于构建整套高可用架构的解决方案。想要线上更大规模使用MGR,还需要有足够的生态建设才行。

第四,MGR还不够可靠

从各方面多个渠道反馈的情况来看,大家在测试及使用MGR的过程中,或多或少都出现异常宕机、事务挂起、节点异常退出、性能抖动等大大小小的问题。MGR现阶段给大家的感觉,还是不那么可靠、令人放心。

不过我们参考并行复制的进程,也是一开始从database级别并行,再到事务级别并行,现在又支持WRITESET并行,都有个先从0到1,再从1到99的过程,这些都是必经之路,MGR还有一段路需要走。

写在后面

任何新事物被大众所接受都要有个过程,大多数人也会习惯性批判新事物,因为能看懂的毕竟还是少数。

是时候再温习下MySQL官方的产品计划路线图了,以此加强对MGR的信心:


此外,最近业界发布的GreatSQL也给了我们更多上线(起码进一步试用)MGR的信心。GreatSQL是源于Percona server的分支版本,除了Percona server已有的稳定可靠、高效、管理更方便等优势外,特别是进一步提升了MGR(MySQL Group Replication)的性能及可靠性,以及众多bug修复。

还有,我也想趁这个机会了解大家在使用MGR过程中遇到哪些问题、痛点,或者希望MGR在哪些方面做出改善。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 缓存 JSON
实战干货 | 分布式多级缓存设计方案
分布式多级缓存设计方案,解决海量数据读取的性能问题,包含多级缓存的存储设计,流程设计;利用多数据副本保证数据的可用性,同时通过不同数据源特点提供更高性能、更多场景数据差异化的支持
1949 0
实战干货 | 分布式多级缓存设计方案
|
Linux
Linux下安装中文输入法总结
Linux下安装中文输入法总结
5068 0
|
存储 Web App开发 JSON
OpenTelemetry Log规范解读
本文主要介绍OpenTelemetry Log规范,这一规范来自于Google、Microsoft、AWS、Splunk、DataDog、ES、Fluntd等众多优秀的公司和项目成员,其中有很多点是我们在平时开发、运维需要关注的知识和经验,值得大家一观。
7177 0
OpenTelemetry Log规范解读
|
9月前
|
安全 Java 数据安全/隐私保护
数组越界可能导致哪些安全问题?
数组越界可能导致哪些安全问题?
416 57
EMQ
|
缓存 数据可视化 物联网
在 Windows 上搭建 MQTT 消息服务器
本文将以NanoMQ为例,演示如何通过安装包和源代码编译两种安装方式,在Windows系统中快速搭建一个可以支持多协议连接的物联网MQTT消息服务器。
EMQ
927 0
|
Web App开发 机器人
公众号爆文仿写RPA机器人,采集,仿写,发布一条龙服务
公众号爆文仿写RPA机器人,采集,仿写,发布一条龙服务
979 1
|
区块链 Python
最详细Python打包exe教程,并修改图标,只需30秒
最详细Python打包exe教程,并修改图标,只需30秒
943 4
最详细Python打包exe教程,并修改图标,只需30秒
|
机器学习/深度学习 监控 计算机视觉
聊一聊计算机视觉中的KL散度
KL散度(Kullback-Leibler Divergence)是一种衡量两个概率分布差异的非对称度量,在计算机视觉中有广泛应用。本文介绍了KL散度的定义和通俗解释,并详细探讨了其在变分自编码器(VAE)、生成对抗网络(GAN)、知识蒸馏、图像分割、自监督学习和背景建模等领域的具体应用。通过最小化KL散度,这些模型能够更好地逼近真实分布,提升任务性能。
1165 1
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
277 1
|
小程序 JavaScript Java
实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
407 0