【MySQL 5.7.17】从主从复制到Group Replication

时值双十二之际,MySQL官方献上了大礼,Group Replication(后文简称GR)终于正式宣布GA,组合在MySQL 5.7.17版本内部发布出来。

 

MySQL 5.7.17有很多修正,但GR的发布,却是最值得说的一个事情。

看MySQL一路改进
 在很久之前,MySQL只是一个采用statement格式作为复制格式,纯异步化复制MyISAM作为存储引擎的,可以运行SQL语句的文件管理器。 

InnoDB的改进
在InnoDB出现之前,MySQL在数据安全以及性能上是很难保证的:

MyISAM的读写表级锁

宕机不安全

著名的永远跑不完的repair table

这些问题都说明MySQL当时只能作为数据库的一个补充角色,而不能作为任何有持久化,安全要求的数据库需求的用品。

 InnoDB为MySQL带来了redo,undo,事务,行级锁等关系数据库DBA这些熟悉的概念,也是从InnoDB开始,MySQL正式作为生产业务数据库进入人们的视线。 

主从同步
MySQL若作为一个单机数据库时候,需要解决的问题有两个:

1、ACID问题

2、主从同步

很显然,InnoDB已经解决了第一个问题,接下来是第二个问题。

Statement格式的复制,虽然保证主从运行的SQL语句一致,但这并不能保证主从数据一致,尤其是一些操作系统依赖的函数调用或者一些特殊环境依赖的使用,于是,在此之上,MySQL出现了基于InnoDB的row格式复制,ROW格式可以保证数据的变更记录到日志,为保证主从数据一致性给出了巨大的贡献。

 

MySQL 5.1版本可以说是一个非常重要的版本,这个版本发布于2008年,适逢新时代互联网大潮发展,MySQL开始被广泛使用于互联网,其读写分离,从库基本上线性扩展读能力的方式,很快普及到整个行业。

异步复制不能满足业务连续性需求

但是, row格式复制提供的是异步复制。由于互联网技术发展对业务连续性的要求,主库宕机之后,及时实例可以恢复,大多数时候也会使用从库重新构建主从后直接提供服务(典型的例子为MHA),这种操作的背后,由于MySQL的异步复制,即使是在最好情况下,仍然会有临界点事务丢失的问题。

一些尝试性改进

Google为了解决这个问题引入了半同步技术,作为自己的独立发布版本在内部使用,之后,sun被Oracle收购,在随后发布的MySQL 5.5版本中,半同步被吸收入官方,为MySQL主从复制的数据安全,画上了一个不太完整的句号。

 

对于半同步技术,从MySQL 5.5到5.6,再到5.7,每个版本都会对此做做修正,半同步技术也一直在不断完善和强大的过程中,在MySQL内部,也逐渐演变出并行复制的方案。一般我们会建议使用MySQL 5.7的最新版本,保障数据安全。

盖技术的更新除了在数据安全上有了更大的保障之外, 也让主从复制的另外一个问题-SQL线程得到了相当大的缓解。

 

其实主从复制-->半同步-->并行复制这条路本身,是可以一直走下去的,但是,也会有人问,主从复制是否是唯一的一条路?


 还有一个方案,听说过的人应该不在少数,但是用过的人并不多:MySQL NDB Cluster。其工作原理是:

把MySQL作为SQL解析以及命令转发的Proxy,后端用NDB CLuster提供的分布式数据库提供服务

这个思路本身没有问题,可惜生不逢时,NDB出现得太早,管理的思路和使用的思路,都大异于传统的数据库,相比较当代的各路NoSQL的牛鬼蛇神,NDB足称可靠,但作为企业级产品上,运维以及开发的学习代价太大;而用于互联网场景,又不足以与各路NoSQL拼比专项,到目前为止,仍然没有被作为主要使用方案。

官方之外,Galera Cluster另辟蹊径
官方的道路一度到此为止,但MySQL作为开源产品,社区里面永远不乏高手,在官方之外,走出了另外一条路,Galera Cluster

Galera Cluster的思路,是在尽量不改变MySQL的运维思路的基础上,保障数据库的安全。最终出现的,是一个乍一看比较奇怪的东西:Galera是多节点可写的,节点之间share nothing,每个节点都保存当前数据库所有数据,commit发生在单个节点,节点间锁冲突延后到commit阶段处理的集群。

很多人,包括我在内,认为Galera这种方式才是一个“真正的集群”,节点之间通过分布式协议沟通,节点失败自动踢出,节点加入自动同步,这些才是一个集群应该干,并且应该干到的事情。而传统的主从复制方式,无论如何美化描述,也都需要诸多外围脚本支持才能实现这些功能,并不是一个“真正的集群”。

 

从理论上看,虽然有一定的限制条件,但Galera所描绘的MySQL集群也已经足够漂亮。但是,为了做到这些功能,Galera对MySQL数据库本身做了不少修改,这点让很多有“官方”洁癖的人,比较担心Galera的引入对MySQL稳定性造成的影响,从如今的趋势来看,Galera方案几乎与NDB方案一样的结局,最后沦落为漂亮的花瓶。

 

虽然前面说Galera听起来多么美好,但MySQL官方由于种种缘由,没有合并Galera的工作进入官方版本。


但第三方的开发版本则没有这么多忌讳,MySQL世界的两个发行版-Percona以及MariaDB很快结合Galera方案

Percona给出了的是Percona Xtra Cluster(PXC)方案,MariaDB在新版本(现在已经是稳定版本)直接原生组合Galera进去,Galera的问题,由Percona与MariaDB分别按照自己的思路处理解决,为人们的使用创造方便。

Percona本身就是最大的开源数据库服务商,MariaDB也有基金会与商业公司支持,这两个公司的方案,在经历了一段时间的试水期之后,很快被业界接受。

 

国外姑且不论,国内的情况,Percona方案从去哪儿网开始,被广泛使用于互联网类行业,对高可用以及数据丢失敏感的业务。而另外一个MariaDB的方案,则在传统行业的“去IOE”运动中扮演着重要角色。

 

方案本身的可靠性比较是不必疑虑的,但使用场景的结果如此,MariaDB的用户更多看重的,应该还是MariaDB背后完整的开源基因吧。

 

MySQL官方呢,在这个潮流中,就只是看着吗?

当然不是,既然没有吸收Galera进入自身,那么剩下的事情,就是自己开发了。

在前段时间发布的整个MySQL InnoDBCluster计划中,MySQL官方的野心很大,包括多主集群,读写分离,读横行扩展,写横行扩展等诸多组件。对,里面提到的,多主集群,就是MySQL原生的,与Galera类似的,“真正的集群”方案。也是整个计划里面,目前第一个可用的。

 

从规划时间上看,在非常早的时间,GR就已经作为规划方案开始编写,初始于MySQL Lab,最终合并到官方分支宣布GA,历经了多年时间开发,为用户以及社区给出了MySQL自己的多主方案。

本质上,GR是一个与Galera方案类似的多主集群方案,原理上,都是分布式协议沟通,commit阶段处理节点间锁冲突等等。

在Galera方案已经大行其道的现在,GR还有什么优势或者意义呢?

  • 最直观的第一点,就是这个是MySQL的官方方案,也就是说,用户可以不必忌讳Percona以及MariaDB的“非官方感”而直接使用到更好(根据特定的benchmark)的多主集群服务。可以直接享受到多主复制,多线程复制等官方业已提供的功能而不必等纠结第三方的可靠性以及学习成本。

 

  • 第二点,Galera由于实现方式限制,只能用于linux平台,但GR是可以用于win以及mac(BSD)平台的,这点无论是对于技术本身的学习,还是小企业环境的部署,都有足够的好处。对运维技能的需求,也在一定程度上降低了不少。

 

  • 第三点,Galera的实现毕竟是外加的组件。比如,由于引入的gcache作为事务的同步缓存,造成主机资源的耗费,而GR方案则直接使用row格式的binlog做这个工作,降低了主机压力。而且,一旦待同步数据库的延迟超过gcache的限制,就会导致数据库重传(SST),GR通过binlog的复用,直接采用传统的数据库备份恢复方式就可以构建节点开始同步,这点上比Galera的实现更适合生产环境。

 

因此从长期考虑上看,GR的实现会是更好的选择!

然而,目前阶段,GR还有些问题需要逐步解决或者让人们排除顾虑。

第一点,生产环境的使用。无论是PXC还是MariaDB方案,都已经有在生产环境运行多年的案例,其稳定性,安全性,乃至运行中遇到的种种问题的解决方案手段,都有成熟,众多的积累案例,GR则是刚刚GA,并且只提供给MySQL5.7.17版本(估计后续版本都会集成),在MySQL 5.7开始进入生产环境部署的时候,如果一并纳入GR的部署,带来的运维以及使用问题相信不在少数,这些问题如何解决,最佳实践是什么,这是一个需要持续长时间维护的事情。

第二点,工具支持。到目前为止,MySQL主要使用的运维工具,相当多的程序来源是Percona公司,Percona公司对MySQL官方的态度一直是积极跟进,但是,在已经有PXC方案的现状下,Percona公司有多大兴趣以及人力维护GR相关的工具体系是一个目前存疑的问题。

第三点,使用培训。GR方案作为一个更完美的高可用以及数据安全方案,其实际使用中,DBA以及开发,必须对GR的种种限制有足够多的了解,才能在实际程序开发以及运维中,做到最合适的处理,这一点势必需要社区与官方的大力推进推动才可以。

 

很幸运,我们可以生活在这个时代,可以看着MySQL从一个“可以跑SQL的文件工具”,逐渐走向为一个高可用高安全的关系数据库系统。在这个过程中,我们未必有能力或者精力去构建栋梁,但添砖加瓦,雕梁画壁的时间,却是谁都有的。

本文出自数据和云公众号,原文链接

时间: 2024-09-30 22:01:08

【MySQL 5.7.17】从主从复制到Group Replication的相关文章

分分钟搭建MySQL Group Replication测试环境(r11笔记第83天)

   最近看了下MySQL 5.7中的闪亮特性Group Replication,也花了不少做了些测试,发现有些方面的表现确实不赖.当然要模拟这么一套环境还是需要花不少的功夫的,一般来说都是3个节点的环境,实际中要找这样的环境也不是很容易.我们怎么快速模拟呢.一种方式就是在一台服务器上搭建多实例.    这样一来,服务器的问题就解决了,下面要解决的问题就要艰巨的多了,那就是部署环境.    可以看到各路博客中都有了详细的解释,而官方文档中对于搭建过程也花了不少的额篇幅来解释,每一个步骤,每个操作

mysql基于RHCS、Gtid主从复制的高性能、LB、HA集群架构

mysql基于RHCS.Gtid主从复制的高性能.LB.HA集群架构 本文基于2个角度进行 1:mysql主从复制,读写分离部分 2:RHCS实现mysql-proxy.mysql-master.lvs高可用 架构图 可能会用到的yum源 http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.r

To MGR or Not MGR? Review of MySQL Group Replication

MySQL Group Replication GA On December 12, 2016, Oracle released exciting news to the MySQL circle. It officially launched version 5.7.17 of MySQL, which includes the long-awaited MySQL Group Replication (MGR). This article provides insights on the b

Galera 将死 — MySQL Group Replication 发布

MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生可作为聊资.话说,当昨天小伙伴们沉浸于双12的买买买节奏中,孰料远在美国西海岸的Oracle官方放出了最新的MySQL 5.7.17版本.更为重要的是,MySQL Group Replication(下简称MGR)终于来了. 在之前的MySQL的一致性世界的文章中,Inside君已经表示腾讯基于Paxos的强一致方案虽好,但官方基于Paxos的方案早已箭在弦上,作

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

2016-12-14 来源:InsideMySQL 作者:姜承尧 MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生可作为聊资.话说,当昨天小伙伴们沉浸于双12的买买买节奏中,孰料远在美国西海岸的Oracle官方放出了最新的MySQL 5.7.17版本.更为重要的是,MySQL Group Replication(下简称MGR)终于来了. 在之前的MySQL的一致性世界的文章中,Inside君已经表示腾讯基于Pa

Mysql group replication复制原理

前言:          Mysql版本5.7.17推出Mysql group replication(组复制),相对以前传统的复制模式(异步复制模式async replication 及半同步复制模式semi-sync replication),一个主,对应一个或多个从,在主数据库上执行的事务通过binlog复制的方式传送给slave,slave通过 IO thread线程接收将事务先写入relay log,然后重放事务,即在slave上重新执行一次事务,从而达到主从事务一致的效果,如下图为两

MySQL · 引擎特性 · Group Replication内核解析

背景 为了创建高可用数据库系统,传统的实现方式是创建一个或多个备用的数据库实例,原有的数据库实例通常称为主库master,其它备用的数据库实例称为备库或从库slave.当master故障无法正常工作后,slave就会接替其工作,保证整个数据库系统不会对外中断服务.master与slaver的切换不管是主动的还是被动的都需要外部干预才能进行,这与数据库内核本身是按照单机来设计的理念悉悉相关,并且数据库系统本身也没有提供管理多个实例的能力,当slave数目不断增多时,这对数据库管理员来说就是一个巨大

MySQL 5.6.17/5.5.37 发布

MySQL产品线更新.5.6.17/5.5.37 2014-03-27 之前版本2013-01-31的5.6.16/5.5.36主要是Bug修正.5.1还是5.1.73. 完全改进: MySQL 5.6.17 改进记录 (2014-03-27) 新特性和各种改进 Incompatible Change: The AES_ENCRYPT() and AES_DECRYPT() functions now permit control of the block encryption mode and

MySQL Group Replication 学习笔记

作者简介 刘伟  云和开创高级顾问 题记:group replication作为mysql官方,在5.7版本阶段开发的,innodb的分布式数据库架构,从发布开始就有很多关注,下文是我对目前为止的材料以及实验的一些总结. 主要资料来源是官方blog:http://mysqlhighavailability.com/ group replication架构 group replication(后文简称GR)实现的分布式数据库架构,底层的分布式基础是Paxos(出于行文限制,此处不单独交代Paxos