APP下载

基于MySQL组复制技术数据备份策略实现

2018-04-11重庆电子工程职业学院计算机学院朱崇来

电子世界 2018年6期
关键词:冲突检测组内插件

重庆电子工程职业学院 计算机学院 朱崇来

0.引言

MySQL作为一款开源的关系型数据库,一直以来是中小企业的数据存储中心,MySQL采用数据复制技术实现数据备份与容灾。

MySQL5.5之前一直采用的是异步复制技术,主库在事务执行时,不会考虑从库的数据备份同步问题,一旦主库崩溃或是从库落后备份,就会造成数据不一致。

MySQL5.5引入了半同步复制技术,主库在提交客户端事务时,必须要保证至少有一个从库接收并写到relaylog中。由于MySQL半同步复制的实现是建立在MySQL异步复制的基础上的,在网络出现异常或者不稳定下,如果从库没有收到事务,也就是还没有写入到relay log 之前,此时刚好主库崩溃了,系统切换到从机,两边的数据就会出现不一致。 在此情况下,半同步复制退化成异步复制。这也是MySQL半同步复制存在的问题。

在2016年,MySQL在5.7引入了MySQL Group Replication是MySQL官方推出的一种基于Paxos协议的状态机复制。简而言之,就是“一个组提交的事务都是可以并行回滚”,这些事务都已进入到事务的prepare阶段,则说明事务之间没有任何冲突(否则就不可能提交),进一步提高数据复制的强一致性。

1.MySQLGroup Replication框架

MySQLGroup Replication是基于状态机复制机制实现的,是一个MySQL插件,它建立在现有的MySQL复制基础结构上,集成了当前的MySQL框架,它用到了binlog的缓存,slave应用器,GTID,relay log,replication线程等服务基础设施。MySQL Group Replication 的插件架构如下图1所示:

图1 MySQL Group Replication 插件架构

插件框架的最上层是隔离核心服务层的API接口层,上层用户通过访问API接口与核心层的服务功能插件通信,包括server的启动、恢复、接受连接、提交事务等,组复制插件根据相应接口的调用做出相应的响应动作。

核心服务插件层由capture、applier、recovery三个组件组成,capture组件是负责追踪正在执行的事务的信息;applier组件负责将远程事务加载到本地执行;recovery组件主要管理组内节点的最新状态,执行事务回滚,直到和组内的其他节点保持一致。

Replication协议层模块实现了replication协议的逻辑,逻辑功能包括:处理冲突检测、接收并传播事务到组内去执行。

Group communication API是通信工具集的一种高级抽象,主要提供Paxos协议变种的核心实现,绑定了corosync的接口,该接口实际上是corosync到client API的一个隐式映射。

2.MySQLGroup Replication原理

MySQL组复制是一种可用于容错系统的技术,它构建在状态机复制机制的基础之上,并利用Paxos的原子广播原理,实现多主机全更新的复制协议。复制组由多个节点构造一个数据库集群,组中的每个节点都可以独立地执行事务。所有读写(RW)事务只有在被组批准后才会提交。只读(RO)事务不需要在组内协调,可立即提交。当一个事务在一个节点上提交之前,会在组内自动进行原子性的广播,告知其他节点变更了什么内容、执行了什么事务,然后为该事务建立一个全局的序号。最终,通过Paxos来保证组内事务数据一致。

Group Replication原子广播的不是原始事务语句而是事务的Binlog Events。广播模块是嵌在事务执行流程中的,不需要和客户端交互。当事务语句执行完准备提交时,Group Replication会捕捉到事务的Binlog Events然后进行原子广播。

然而,不同的节点上执行的事务之间有可能存在资源争用,导致两个不同的节点上并发执行的事务发生冲突,因此在每个节点上都需要在Certify模块进行冲突检测,冲突检测的过程是在每个模块上单独进行的,不需要在各个节点之间交互,所有节点上的事务都是按照同样的顺序做的冲突检测。所以任何一个事务在所有节点上的冲突检测结果都是相同的。

从其工作的原理可以看出,Group Replication基于Paxos协议的一致性算法校验事务执行是否有冲突,然后顺序执行事务,达到最终的数据一致性。

3.基于Group Replication组复制实现

(1)MySQL 数据库组复制环境准备

本实验环境的操作系统为CentOS6.8操作系统,MySQL 数据库版本为 MySQL-5.7.17。三台名为master01、master02、master03机器上安装了 MySQL 数据库的服务器,每一台机器的配置如下表1所示。

表1 MySQL 数据库组复制环境配置列表

(2)数据库主配文件定义/etc/my.cnf, 下面只对主要参数作出说明。

图2 数据库主配文件参数命令

(3)通道授权,建立复制通道并授权。

图3 数据库授权命令

(4)安装组复制插件,并启动。

(5)其余节点加入集群,其他节点按照2-4的步骤配置即可。

(6)集群验证∶创建测试数据,进行集群测试。在各个节点都能看到同步的测试数据,说明集群搭建成功。

4.总结

通过MySQL5.7的组复制实验测试结果表明:组复制模式配置比异步复制、半同步复制、简单高效。在组复制环境下,3台MySQL实例组成的组复制结构下,只要有1台主机存活,整个MySQL服务就可用,在故障主机恢复之后,组复制会自动同步数据,恢复组复制状态,有效地提高了数据复制的一致性和可靠性。

[1]何小川. MySQL数据库主从复制的实现[J].广东通信技术,2017(10).

[2]管文琦.金融行业MySQL数据库可用方案的思考[J].中国金融电脑,2017(06).

[3]MySQL 5.5:Improving on the World’s Most Popular Open Source Database.Cabral,Sheeri K.Database Trends and Applications.2011:30.

猜你喜欢

冲突检测组内插件
用心说题 提高效率 培养能力
自编插件完善App Inventor与乐高机器人通信
独立学院补考安排冲突检测系统的设计与实现
计算机应用安全策略本体研究
计划协同工作中的冲突检测与消除算法研究
MapWindowGIS插件机制及应用
合作学习组内交流讨论时间的遵循原则
合作学习“组内交流讨论时间”注意问题
基于Revit MEP的插件制作探讨
合作学习组内交流讨论时间探究