浅谈mysql的半同步复制

浅谈mysql的半同步复制
简介

MySQL通过复制(复制)实现了存储系统的高可用性,目前MySQL支持的复制方法是:

异步复制(异步复制):最简单的原理和最好的性能。但主要的准备之间的数据不一致的概率是非常大的。
半同步复制(半同步复制):与异步复制相比,半同步复制牺牲了某些性能,提高了主机和主机之间的数据一致性。
组(组复制复制):分布式基于Paxos算法的数据复制的一致性强。只要大多数的机器是活的,制度是保证可用。半同步复制相比,数据的一致性和系统可用性高复制组。

本文主要讨论MySQL的半同步复制。

半同步复制的基本过程

MySQL的半同步复制的实现是基于mysql.mysql异步复制支持两个稍微不同的半同步复制:after_sync和after_commit(受rpl_semi_sync_master_wait_wait_point)。

当半同步复制打开,主人会等待奴隶的响应或超时才返回。当Slave随着时间的推移,半同步复制退化为异步复制。这也是一个问题,在MySQL的半同步复制的存在。本文不讨论Salve超时的情况(不讨论了异步复制)。

对after_sync模式半同步复制的基本过程

的after_sync模式是半同步复制是由MySQL 5.7的支持,也是默认的半同步复制模式的mysql5.7:

在存储引擎中准备事务。
写交易的binlog,冲binlog磁盘。
等待至少一个奴隶确认接收
将事务提交给存储引擎(s)。

对after_commit模式半同步复制的基本过程

MySQL 5.5和5.6的半同步复制仅支持after_commit:

在存储引擎中准备事务。
写交易的binlog,冲binlog磁盘。
将事务提交给存储引擎(s)。
等待至少一个奴隶确认接收

对after_sync和after_commit两方法的总结

after_sync:在日志复制到主是奴隶,然后提交。

对主提交的所有事务都已复制到奴隶。

所有已复制到主事务中的奴隶事务都不提交(例如,在提交之前,主文件将复制到从属日志)。
然后复制日志的奴隶后after_commit:主犯。

所有主机上的所有提交事务不一定都复制到奴隶。(例如,主提交,还没有登录到从属副本)。

所有复制到奴隶的事务都在主进程上提交。

显然,在after_commit掌握的情况下,不能保证数据的一致性(主犯,没有能够登录到奴隶抄下来)。本文遵循只有after_sync模式。

mysql5.7.3开始支持配置半同步副本等待奴隶的反应数:rpl_semi_sync_master_wait_slave_count。
在after_sync模式异常情况分析

1:主延时开关的异常。

主执行,在binlog刷T事务到硬盘,总停机时间。Slave升级为主人。主人什么时候重启,崩溃恢复回滚T.主数据的一致性的交易。

主执行T的binlog刷交易到硬盘后,奴隶主在收到ACK(pendinglog)停机。Slave升级到大师。

2.1奴隶也未收到该交易的binlog然而,当主人重新启动,崩溃恢复将pendinglog直接的主要数据是不一致的。

2.2从已收到的交易中心主数据的binlog是一致的。

2的异常:主机关闭,而不是切换主机。仅考虑异常1的2.1。

当主人重新启动,pendinglog是直接提交。这时,主要数据是不一致的:

从连接到主并获取该交易的binlog异步复制的主要数据是一致的。

在奴隶可以复制交易binlog,如果主人发生宕机,硬盘损坏,数据不一致,对交易数据丢失。

异常处理

从以上异常情况的简单分析我们得知半同步复制处理主下来后重启(从没有pendinglog响应binlog)特殊情况。

主人下来了,不要换箱:
在崩溃恢复,主人等待连接和从复制到至少一个从副本binlog所有事务已提交。(对大师的地位和选择master_pos_wait()对奴隶)。

主人掉了,主动待机开关的情况:
当老法师重启的pendinglog回滚在崩溃恢复时间。(手动截断的硕士binlog不复制吗部分)

反射

为什么大师重启,崩溃恢复的过程中,是直接提交pendinglog,而不是重试请求的奴隶的反应吗

异步和半MySQL同步复制所引发的奴隶,而奴隶是主动连接主同步binlog。

没有主切换发生,机器重启后无法知道哪个机器是从机。

如果有一个切换,它不再是主人,那么将不会有更多的奴隶。如果你继续等待,它不能正常工作。
总结

MySQL半同步复制存在以下问题:

随着时间的推移,Slave将退化为异步复制。
当主位下降时,数据的一致性不能得到保证,需要进行人工处理。
副本是串行的。
因为在这些问题的主要数据一致性的MySQL的高可用性服务的互联网服务7×24的影响,因此企业纷纷使出自己的补丁:腾讯tdsql,WeChat PhxSQL,Ali AliSQL,网易innosql。

MySQL的官员纷纷推出MySQL组复制mysql5.7 -一个新的复制模式。

参考

MySQL半同步复制的数据一致性

MySQL高可用性解决方案

损失少半同步复制MySQL 5.7.2

增强semisync复制

tag:同步复制浅谈电脑软件mysql

相关内容