異步複製、全同步複製與半同步複製

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以插件的形式支持半同步複製。其實說明半同步複製是更好的方式,兼顧了同步和性能的問題。 具體配置方法及半同步遇到的問題,能夠參考相關具體文檔。  

相關文章
相關標籤/搜索