悄悄告诉你MySQLMGR在哪里?(MySQLGroupReplication)既能保证数据一致性又能自动切换,有故障检测功能,支持多节点写入。MGR是一项被普遍看好的技术。本文介绍了MySQLMGR技术的演进过程、事务生命周期和事务冲突检测机制。2.MGR技术的演变。传统的MySQL主从复制架构是MySQL维护数据一致性最基本的架构。如下图1所示,一主一从架构。dump线程将binlog日志文件推送到从库,从库的I/O线程将接收到的数据更新到relaylog,然后从库的SQL线程将relaylog作为binlog日志应用,直到主库和从库的binlog日志文件在数据上完全一致,实现了主从同步。图1:主从复制示意图接下来我们看一下MySQL的异步复制,如下图2,一个主从架构,应用发送的事务请求执行后写入binlog,而主库master将binlog日志推送到从库salve1和slave2,主库不需要等待从库是否成功更新数据到relaylog,主库可以直接提交事务。这种模式牺牲了数据的一致性,不能保证主从数据的一致性。图2:异步复制示意图。模拟了一个异步复制场景的例子。如下图3所示,三个人在说话,一个人在不停地讲话。两个观众听不懂就不用知道了,观众也不需要回应。等演讲完了,听众可能听不懂,最后大家意识到信息可能不一致。为了解决以上问题,MySQL5.5.8有了半同步复制。图3:异步复制场景模拟图接下来我们看一下MySQL的半同步复制,如下图4,一主两从架构,应用发送的事务请求写入binlog主库执行后,将主库master的binlog日志推送到slave1和slave2。半同步主库需要等待任意一个slave成功更新数据到relaylog,并在主库提交事务前通知主库。这确保至少有一个从站同步了数据。它还缩短了延迟时间并确保数据安全。图4:半同步仿真示意图一个半同步复制场景的例子,如下图5所示,三个人在说话,一个人不停地演讲。如果任何听众响应并理解,演讲者将继续讲话,否则演讲将停止,最后当演讲结束时,至少有一名听众理解演讲者的意思,以确保信息传递的一致性。这种复制模式也存在两个问题:MySQL不能自动切换,需要借助外力切库,运维复杂。过大的库Slave读压力会导致replicationdelay不断增加。MySQL5.7的MGR技术可以解决以上问题。图5:半同步复制场景模拟3.至此MGR技术诞生!MGR(MySQLGroupReplication)是MySQL自带的插件,可以灵活部署。MySQLMGR集群是由多个MySQLServer节点组成的分布式集群。每个Server都有一份完整的副本,它是基于ROW格式和GTID特性的二进制日志文件。MGR架构图如下图6所示,主要由APIs层、组件层、复制协议模块层和GCSAPI+Paxos引擎层组成。如图6所示,应用程序发送的事务通过MGR的APIs接口层从MySQLServer分发到组件层。组件层捕获交易相关信息,然后通过复制协议层传输交易,最后通过GCSAPI+Paxos引擎层保证交易数据在各个节点上的最终一致性。这是事务进入MGR层的内部处理过程。图6:MGR架构示意图4.MGR集群中事务的整个生命周期是怎样的?接下来,从全局的角度来看事务的整个生命周期,如下图7所示,由DB1、DB2、DB3组成的MGR集群,集群中的每一个DB都有一个MGR层,作用是MGR层也可以简单理解为由Paxos模块和冲突检测Certify模块实现。Paxos模块是基于Paxos算法保证所有节点接收到相同的广播消息。交易消息是广播消息的内容结构;冲突检测Certify模块进行冲突检测以保证数据的最终一致性,认证信息是冲突检测中的内存结构。本文详细介绍了冲突检测模块的实现原理,并将Paxos算法的实现与Raft算法进行了详细对比。当DB1上有事务T1要执行时,T1对DB1来说是本地事务,对DB2和DB3来说是远程事务;事务T1在DB1上执行后,会将执行事务T1的信息广播给各个集群节点,包括DB1本身,通过Paxos模块广播给MGR集群的各个节点,超过半数节点同意,达成共识.之后,共识信息进入各节点的冲突检测验证模块,各节点进行冲突检测和验证,最终保证集群中交易的最终一致性。冲突检测通过后,可以直接在DB1中提交本地事务T1,否则直接回滚。远程事务T1先分别更新到DB2和DB3中的relaylog,再应用到binlog完成数据同步,否则直接放弃事务。图7:MGR组复制技术示意图上一节我们从全局的角度介绍了一个事务在MGR集群中从头到尾的整个处理过程,然后介绍了冲突检测机制的实现机制从局部的角度详细说明。5.什么是交易信息和认证信息?在介绍冲突检测的实现原理之前,先介绍一下广播信息事务消息和冲突检测内存认证信息的结构。(1)事务消息如图8所示,事务消息存储了事务T1要更新的行的相关信息,由三部分组成:transaction_context_log_event、gtid_log_event和log_event_group。具体构成:写集称为写集,是事务更新行相关信息的Hash值。writeset=Hash(库名+表名+主键(唯一键)字段信息)gtid_executed为已经执行的事务gtid集合,即事务快照版本。将writeset和gtid_executed打包成事务上下文信息,transaction_context_log_event。gtid_log_event是已经执行过的事务gtid集合。log_event_group是事务日志信息,后面会更新到relaylog中。将3、4、5一起打包成交易消息,广播给其他节点。图8:广播信息的内容结构(2)认证信息广播的信息到达冲突检测认证模块后是如何工作的?每个节点都有一个certificationinfo的内存结构,certificationinfo存储了通过冲突检测和gtid_executed的写入事务集合。certificationinfo相当于一个map,key是一个string结构,保存的是从writeset中提取的主键值;value是一个set集合,保存了gtid_executed事务的快照版本。例如T1事务,T1在数据库d1的表t1中更新了两行数据id=1和id=2,对应快照版本UUID_MGR:1-100,一开始认证信息为空,所以提交直接,然后在certificationinfo的快照版本直接更新为1-101。Figure9:Certificationinfostructure图6.冲突检测的核心机制!敲黑板!从上面的例子可以知道冲突检测标准是通过的:如果transactionUUID_MGR">="certificationinfoUUID_MGR,则冲突检测通过。图10:冲突检测交易执行示例根据上述标准示例,交易T2更新id=2的行,交易T2的UUID_MGR为1-102,节点冲突检测模块中认证信息中的UUID_MGR为1-101,这里T2:UUID_MGR:1-102>UUID_MGR:1-100,则T2冲突检测通过。反之,事务T3更新了id=1的行,事务T3的UUID_MGR为1-100,节点中冲突检测模块的认证信息中的UUID_MGR为1-101。很明显T3:UUID_MGR:1-100是基于单次写入来判断的,下面展示多节点模式下多个事务同时写入时的冲突检测机制。如下图,三个事务T4、T5、T6并行写入一个MySQL节点,通过Paxos协议模块达成共识。冲突检测遵循以下三个原则:多个事务修改同一个id对应的value,需要依次进行冲突检测。多个事务同时修改不同的id,可以分别修改。当不同事务修改同一个id时,需要依次进行冲突检测。图11:多事务同时写入示意图如图11所示,事务T4和事务T5同时更新id=1的行,按照先来后到的方式进行冲突检测顺序,T4按照先到先得的原则进行冲突检测。事务T4,更新id=1的行,事务T4的UUID_MGR为1-102,节点中冲突检测模块中的certificationinfo中id=1的UUID_MGR为1-101,显然T2:UUID_MGR:1-102>UUID_MGR:1-101,T4冲突检测通过,认证信息中的UUID_MGR更新为1-103。事务T5,更新id=1的行,事务T5的UUID_MGR为1-100,节点冲突检测模块中认证信息中id=1的UUID_MGR为1-102,其中T5:UUID_MGR:1-100>UUID_MGR:1-102,T5冲突检测失败。事务T6,更新id=3行,事务T6的UUID_MGR为1-100,节点冲突检测模块中的认证信息中id=3的UUID_MGR为空,其中T6:UUID_MGR:1-100>UUID_MGR,则T6冲突检测通过,认证信息中的UUID_MGR更新为1-101。如下图12所示,事务T4和事务T5并行修改id=1,T4写入成功,T5丢弃,T6写入id=3事务,写入成功。图12:多事务同时写入结果图随着写入集不断写入证书信息,内存消耗会相应增加。MGR有配套的writesetcleaningthread,用于每隔一段时间清理节点上已经应用或回放的数据。事务的写集信息。7、MGR有哪些技术特点?如下图13所示,MGR具有以下技术特点:MGR是一个基于Paxos协议和原生复制的分布式集群。多数节点同意通过发行模式,数据一致性高。具有高可用性,故障自动检测功能,可自动切换。弹性扩展,集群自动增删节点,集群最多可接入9个节点。有单主机和多主机模式。支持多节点写入,具有冲突检测机制,可以适应各种应用场景的需求。图13:MGR技术亮点MGR在功能上仍然存在一些局限和不足,但它是未来数据库发展的趋势。随着产品的不断完善,MGR必将引领数据库系统发展的潮流。8.总结与展望MySQL是目前使用最广泛的开源数据库。MGR技术可以在保证数据一致性的基础上自动检测故障并自动切换。具有防裂脑机制,多节点写入。一个很好的技术发展方向。目前部分银行MySQL应用比例较高,也开始推广线上MGR架构;G行数据库的数据库规划坚持传统数据库和开源数据库并行的使用模式,MySQL在线应用上百个。其中,分发A类系统标准的企业总线开始应用和实践MGR技术。未来,我们将继续推广这项技术,不断提升开源数据库的技术管理水平。最后想和大家一起梳理一下文章的内容。首先介绍MySQLMGR技术的演进过程,然后整体讲解事务生命周期,最后详细讲解事务冲突检测机制。中国光大银行信息技术部杜蓉在《大咖来了》分享直播:《DBA 女神带你从 0 到 1 揭秘 MGR》扫描下方二维码观看回放
