异步复制、全同步复制与半同步复制

https://blog.csdn.net/xihuanyuye/article/details/81220524mysql

这里虽说的是Mysql数据库,但对应其余数据库,原理没有什么差别。只是在具体实现和配置上不一样。sql

1、异步复制(Asynchronous replication)
一、逻辑上数据库

MySQL默认的复制便是异步的,主库在执行完客户端提交的事务后会当即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主若是crash掉了,此时主上已经提交的事务可能并无传到从库上,若是此时,强行将从提高为主,可能致使新主上的数据不完整。安全

二、技术上网络

主库将事务 Binlog 事件写入到 Binlog 文件中,此时主库只会通知一下 Dump 线程发送这些新的 Binlog,而后主库就会继续处理提交操做,而此时不会保证这些 Binlog 传到任何一个从库节点上。异步

2、全同步复制(Fully synchronous replication)性能

一、逻辑上.net

指当主库执行完一个事务,全部的从库都执行了该事务才返回给客户端。由于须要等待全部从库执行完该事务才能返回,因此全同步复制的性能必然会收到严重的影响。插件

二、技术上线程

当主库提交事务以后,全部的从库节点必须收到、APPLY而且提交这些事务,而后主库线程才能继续作后续操做。但缺点是,主库完成一个事务的时间会被拉长,性能下降。

3、半同步复制(Semisynchronous replication)

一、逻辑上

是介于全同步复制与全异步复制之间的一种,主库只须要等待至少一个从库节点收到而且 Flush Binlog 到 Relay Log 文件便可,主库不须要等待全部从库给主库反馈。同时,这里只是一个收到的反馈,而不是已经彻底完成而且提交的反馈,如此,节省了不少时间。

二、技术上

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是马上返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提升了数据的安全性,同时它也形成了必定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。因此,半同步复制最好在低延时的网络中使用。

4、选型及设置说明

如何设置到相应的同步方式上呢?

mysql主从模式默认是异步复制的,而MySQL Cluster是同步复制的,只要设置为相应的模式便是在使用相应的同步策略。

从MySQL5.5开始,MySQL以插件的形式支持半同步复制。其实说明半同步复制是更好的方式,兼顾了同步和性能的问题。 具体配置方法及半同步遇到的问题,能够参考相关具体文档。