詳解MySQL雙活同步複製四種解決方案

對於數據實時同步,其核心是須要基於日誌來實現,是能夠實現準實時的數據同步,基於日誌實現不會要求數據庫自己在設計和實現中帶來任何額外的約束。git

 

基於MySQL原生複製主主同步方案 

這是常見的方案,通常來講,中小型規模的時候,採用這種架構是最省事的。github

兩個節點能夠採用簡單的雙主模式,而且使用專線鏈接,在master_A節點發生故障後,應用鏈接快速切換到master_B節點,反之也亦然。有幾個須要注意的地方,腦裂的狀況,兩個節點寫入相同數據而引起衝突,同時把兩個節點的auto_increment_increment(自增步長)和auto_increment_offset(自增起始值)設成不一樣值。其目的是爲了不master節點意外宕機時,可能會有部分binlog未能及時複製到slave上被應用,從而會致使slave新寫入數據的自增值和原先master上衝突了,所以一開始就使其錯開;固然了,若是有合適的容錯機制能解決主從自增ID衝突的話,也能夠不這麼作,使用更新的數據版本5.7+,能夠利用多線程複製的方式能夠很大程度下降複製延遲,同時,對複製延遲特別敏感的另外一個備選方案,是semi-sync半同步複製,基本上無延遲,不過事務併發性能會有不小程度的損失,特別是在雙向寫的時候,須要綜合評估再決定。sql

 

基於Galera replication方案 

Galera是Codership提供的多主數據同步複製機制,能夠實現多個節點間的數據同步複製以及讀寫,而且可保障數據庫的服務高可用及數據一致性,基於Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster(簡稱PXC)。數據庫

目前PXC用的會比較多一些,數據嚴格一致性,尤爲適合電商類應用,不過PXC也是有其侷限性的,若是併發事務量很大的話,建議採用InfiniBand網絡,下降網絡延遲,由於PXC存在寫擴大以及短板效應,併發效率會有較大損失,相似semi-sync半同步複製,Gelera實際只能用三個節點,網絡抖動形成的性能和穩定性習慣性問題網絡

 

基於Group Replication方案 

經過Paxos協議提供數據庫集羣節點數據強一致保證,MGR準確來講是MySQL官方推出的高可用解決方案,基於原生複製技術,並以插件的方式提供,而且集羣間全部節點可寫入,解決了單個集羣的寫入性能,全部節點都能讀寫,解決網絡分區致使的腦裂問題,提高複製數據的可靠性,不過現實仍是有些殘酷,目前嚐鮮的並非不少,同時僅支持InnoDB表,而且每張表必定要有一個主鍵,用於作write set的衝突檢測,必須打開GTID特性,二進制日誌格式必須設置爲ROW,用於選主與write set多線程

COMMIT可能會致使失敗,相似於快照事務隔離級別的失敗場景,目前一個MGR集羣最多支持9個節點,不支持外鍵於save point特性,沒法作全局間的約束檢測與部分部分回滾,二進制日誌不支持binlog event checksum架構

 

基於canal方案

對於數據庫的實時同步,阿里巴巴專門有一個開源項目,即otter來實現分佈式數據庫的同步複製,其核心思想仍然是經過獲取數據庫的增量數據日誌,來進行準實時的同步複製。所以otter自己又依賴於另一個開源項目即canal,該項目重點則是獲取增量數據庫同步日誌信息。併發

當前otter的重點是實現mysql間的數據庫同步複製,基本即利用的相似技術來實現兩個mysql數據庫間的雙向同步數據庫複製。要注意這個雙向自己指既能夠A->B,也能夠從B->A,在某個時間節點自己是單向的。異步

主從複製分紅三步:

master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events,能夠經過show binlog events進行查看);

slave將master的binary log events拷貝到它的中繼日誌(relay log);

slave重作中繼日誌中的事件,將改變反映它本身的數據。

canal原理相對比較簡單:

canal模擬mysql slave的交互協議,假裝本身爲mysql slave,向mysql master發送dump協議

mysql master收到dump請求,開始推送binary log給slave(也就是canal)
canal解析binary log對象(原始爲byte流)

更多參考 https://github.com/alibaba/canal

總結

以上所述是小編給你們介紹的MySQL 雙活同步複製四種解決方案,但願對你們有所幫助,若是你們有任何疑問請給我留言,小編會及時回覆你們的。在此也很是感謝你們對腳本之家網站的支持!

相關文章
相關標籤/搜索