技能开发 频道

关于不同的MySQL仿制解决方案概述

  【IT168 技能】我在解决方案团队作业多年,发现数据库仿制总是被误解,乃至有些人底子彻底不理解,所以本文将来回忆一下MySQL环境中的仿制概念,而且弄清一些咱们关于仿制的误解。

  什么是仿制?

  仿制:确保信息被仿制并有目的地填充到另一个环境中,而不是仅存储在一个方位(根据源环境的业务)。假如更文言一点来说就是在您的根底架构上运用辅佐服务器来读取或运用其他办理解决方案。

  下图展现了MySQL仿制环境的示例。

  假如咱们把规模缩小到MySQL中,那么在仿制时咱们有几种挑选呢?

  规范异步仿制

  异步仿制意味着业务彻底在本地环境中完结,而且不受仿制隶属自身的影响。完结更改后,主服务器将运用数据修正或实践句子(根据行的仿制或根据句子的仿制之间的差异会在之后讲)填充二进制日志。此转储线程读取二进制日志并将其发送到从IO线程。从站运用其IO线程将其置于自己的预处理行列(称为中继日志)中。从站运用SQL线程履行从站数据库上的每个更改。

  半同步仿制

  半同步仿制意味着从设备和主设备彼此通讯以确保业务的正确传输。主设备仅填充binlog并持续其会话,其间一个从设备承认业务已正确放置在从设备的中继日志中。

  半同步仿制可确保正确仿制业务,但不确保实践产生从设备上的提交。

  需求留意的是,半同步仿制可确保主服务器等候持续处理特定会话中的业务,直到至少有一个从服务器承认接纳到业务(或到达超时)。这与异步仿制不同,因为半同步答应额定的数据完整性。

  请记住,半同步仿制会影响功用,因为它需求等候来自从站的实践ACK的往复。

  组仿制

  这是MySQL Community Edition 5.7中引进的新概念,而且在MySQL 5.7.17中进行了GA。这是一个用于虚拟同步仿制的新插件。

  每当在节点上履行业务时,插件都会测验与其他节点达到一致,然后再将其回来给客户端。 尽管与规范MySQL仿制比较,该解决方案是彻底不同的概念,但它根据运用binlog生成和处理日志事情。

  以下是组仿制的示例体系结构。

  假如对Group Replication感兴趣,请参阅以下文章:

  http://mysqlhighavailability.com/mysql-group-replication-its-in-5-7-17-ga/

  http://mysqlhighavailability.com/performance-evaluation-mysql-5-7-group-replication/

  Percona XtraDB Cluster/ Galera Cluster

  另一种答应将信息仿制到其他节点的解决方案是Percona XtraDB Cluster。此解决方案侧重于供给一致性,运用认证进程来确保业务防止抵触并正确履行。在这种状况下,咱们谈论的是集群解决方案,每个环境都受相同数据的束缚,而且节点之间存在通讯以确保一致性。

  Percona XtraDB Cluster有多个组件:

  Percona Server for MySQL

  Percona XtraBackup用于履行正在运转的集群的快照(正在康复或增加节点)。

  wsrep patches/Galera Library

  该解决方案几乎是同步的,可与组仿制相媲美。可是,它还具有运用多主仿制的功用。像Percona XtraDB Cluster这样的解决方案是进步数据库根底架构可用性的一个组件。

  根据行的仿制与根据句子的仿制

  运用根据句子的仿制,SQL查询自身将写入二进制日志。例如,从站履行彻底相同的INSERT / UPDATE / DELETE句子。

  该办法有许多优缺陷:

  因为实践句子记录在二进制日志中,因而审阅数据库要简单得多

  经过线路传输的数据更少

  非确定性查询或许会在隶属环境中形成实践损坏

  某些查询存在功用下风,例如根据SELECT的INSERT

  因为SQL优化和履行,根据句子的仿制速度较慢

  根据行的仿制是自MySQL 5.7.7以来的默许挑选,具有许多长处。行更改记录在二进制日志中,而且不需求上下文信息,消除了非确定性查询的影响。

  其它长处包含:

  包含少数行更改的高并发查询的功用改善

  明显的数据一致性改善

  其缺陷包含:

  假如有修正很多行的查询,那么网络流量或许会大得多

  审阅数据库的更改愈加困难

  在某些状况下,根据行的仿制或许比根据句子的仿制慢

  关于仿制的误解

  仿制是集群

  规范异步仿制不是同步集群。请记住,规范和半同步仿制不确保环境服务于同一数据集。运用Percona XtraDB Cluster时,每个服务器实践上需求别离处理每个更改。假如不是,则从群会集删去受影响的节点。异步仿制不具有此毛病安全性,在不一致的状况下,依然能够承受读操作。

  从理论上讲,环境应具有可比性。可是,有许多参数会影响数据传输的功率和一致性。只需运用异步仿制,就无法确保业务正确产生。运用者能够经过增强装备的持久性来防止这种状况,但这会带来功用丢失。

  运用pt - table - checksum东西验证主服务器和从服务器的一致性 。

  有仿制就不需求备份了

  没错,仿制是一个很好的解决方案,能够获得数据集的可拜访副本(例如陈述问题,读取查询,生成备份)。但其并不能代替备份解决方案。经过异地备份,能够在产生严重灾祸、用户过错或其他原因时能够重建环境。有些人运用 delayed slaves ,但它也不能替代恰当的灾祸康复程序。

  有仿制,所以环境将负载平衡业务

  尽管经过运用相同数据集运转辅佐实例或许会进步环境的可用性,但仍或许需求将读取查询指向隶属服务器,而将写查询指向主服务器。你能够运用署理东西或在自己的应用程序中界说此功用。

  仿制会明显减慢速度

  仿制对主服务器的功用影响很小。 Peter Zaitsev在一篇文章中曾谈论过从服务器对主服务器的潜在影响。请记住,写入二进制日志或许会影响功用,尤其是当您有许多小业务,然后被多个从服务器转储和接纳时。

  当然,除此之外还有许多其他参数都或许会影响实践主从设置的功用。

0
相关文章