蓝盟IT外包,分布式存储 - MySQL数据库和复制事务

发布者:上海IT外包 来源:www.linemore.com

“分布式后端”包括两类:“分布式存储”和“分布式计算”。结合实际工作中遇到的问题,解剖技术以寻找答案。很多时候,我们不是在创造新技术,而是应用技术。为了更有效地使用技术,我们必须了解某些技术的原理和工作方法。从用户的角度来分析问题的技术原理,以及开源技术产品和框架作为技术实现类的参考。主要目的是解释原则,如果具体实施的技术细节没有什么特别之处,它应该尽可能短。
  交易和复制。
  最近我参与了一个与数据分发相关的项目,其中包括从MySQL数据库中分发数据。简而言之,有必要在外部数据中心实现多点写入功能,并确保分布式数据达到最终一致性。以前,向MySQL分发数据只是一种读写分离。数据库本身的主从副本可用于编写主库并读取从库。现在您需要两次编写主库,并在短暂延迟后达到最终一致性。乍一看这个问题更复杂,但最终它是数据的最终一致性。
  回到最简单的情况,当只有一个MySQL数据库时,如何保证数据的一致性?知道数据库知道这是由数据库的事务特性保证的。该交易包括四个主要特征:
  原子性原子性
  一致性一致性
  绝缘绝缘
  耐久力
  交易的ACID的四个特征不是本文的重点,因此我们不会开始给出学术解释。如果您不理解,可以阅读以下参考文献[3]中的相关文章。在这里我只想问一个问题,单个数据库事务可以保证数据的一致性,那么,当MySQL作为主从架构实现时,如何保证主站和从站之间数据的一致性?
  MySQL引入了一个名为binlog的新日志文件来提供主从复制,其中包含一组导致数据更改的事件日志。请求库从库中发送binlog并通过注册事件将数据恢复到从库,因此库的数据源是binlog。这样,主MySQL库只需要使binlog与本地数据保持一致,以确保主从数据一致(暂时忽略由网络传输引起的主从不一致)。我们知道通过数据库的事务特性来确保本地数据的一致性,以及如何实现数据库事务?让我们看看下图:
  后端分布式系列:分布式存储 -  MySQL数据库事务和复制
  MySQL不提供对事务的支持,但它确实打开了存储引擎接口,该接口由特定的存储引擎实现。具体来说,支持MySQL事务的存储引擎是InnoDB。存储引擎实现事务的一般方式是基于重做注册表和撤消注册表。简单来说,重做记录注册事务的修改数据,撤销寄存器在事务之前记录原始数据。然后,当执行事务时,实际过程简化如下:首先注册撤消/重做记录,以确保将记录刷新到磁盘以进行持久存储。
  异步更新数据记录,缓存操作和清理。
  确认交易并在重做记录中写入确认记录。
  如果在执行MySQL期间中断失败,您可以通过重做记录重做事务或通过撤消日志恢复以确保数据一致性。这一切使得事务性存储引擎,但二进制日志不是事务性存储引擎的范围之内,但MySQL服务器寄存器。然后,你必须确保二进制日志数据之间的一致性和重做日志,使交易的打开二进制日志后的实际执行中的一步,如下所示:
  首先注册撤消/重做记录,以确保将记录刷新到磁盘以进行持久存储。
  异步更新数据记录,缓存操作和清理。
  到binlog的事务日志仍然存在。
  发送交易并在重做记录中写入确认记录。
  在这种情况下,每当二进制日志没有正确写入,整个交易必须得到扭转,甚至如果MySQL崩溃成功,他们所写的二进制日志后,交易就可以恢复,并确认完成。要做到这一点,你需要将二进制日志与交易相关联的,只有BINLOG确保一致性和交易数据,以确保主从数据的一致性。因此,二进制日志写入处理应当集成到过程执行引擎店和完整交易纯两相内部分布式事务(XA事务)。没有更多细节将被扩展。
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部