分布式數(shù)據(jù)庫PhxSQL設計與實現(xiàn)的實例分析
“本文詳細描述了PhxSQL的設計與實現(xiàn)。從MySQL的容災缺陷開始講起,接著闡述實現(xiàn)高可用強一致的思路,然后具體分析每個實現(xiàn)環(huán)節(jié)要注意的要點和解決方案,最后展示了PhxSQL在容災和性能上的成果。”
設計背景
互聯(lián)網(wǎng)應用中賬號和金融類關鍵系統(tǒng)要求和強調(diào)強一致性及高可用性。當面臨機器損壞、網(wǎng)絡分區(qū)、主備手工或者自動切換時,傳統(tǒng)的MySQL主備難以保證強一致性和高可用性。PhxSQL將MySQL集群構建在一致性完善的Paxos協(xié)議基礎上,保證了集群內(nèi)MySQL機器之間數(shù)據(jù)的強一致性和整個集群的高可用性。
原生MySQL的容災缺陷
MySQL容災方案
MySQL有兩種常見的復制方案,異步復制和半同步復制。
1. 異步復制方案
Master對數(shù)據(jù)進行commit操作后再將數(shù)據(jù)異步復制到Slave。
但數(shù)據(jù)無法保證成功復制,也就無法保證MySQL主備間的數(shù)據(jù)一致性,如圖1所示。
圖1 MySQL異步復制流程
2. 半同步復制方案
Master對數(shù)據(jù)進行commit操作前將數(shù)據(jù)復制到Slave,確認復制成功后再對數(shù)據(jù)進行commit操作。
絕大多數(shù)情況下,半同步復制能保證MySQL主備間的數(shù)據(jù)一致性,如圖2所示。
圖2 MySQL半同步復制流程
MySQL重啟流程
半同步方案中的“半”是指Master在等待Slave的ACK失敗時將退化成異步復制。同時,MySQL在重啟時也不會執(zhí)行半同步復制。
如圖3中的id(Gtid)=101數(shù)據(jù)是Master機器中新寫入到Binlog File的Binlog數(shù)據(jù)。但Master在復制數(shù)據(jù)到Slave的過程中MySQL宕機導致復制失敗。MySQL重啟時,數(shù)據(jù)(id=101)會被直接進行commit操作,隨后再將數(shù)據(jù)異步復制到Slave。(下文將已經(jīng)寫入到Binlog File但未進行commit操作的數(shù)據(jù)(id=101)稱為Pending Binlog。)
圖3 MySQL重啟時直接提交Pending Binlog
該情況下MySQL容易出現(xiàn)Master-Slave之間數(shù)據(jù)不一致的情況,官方也描述了該問題。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
分布式數(shù)據(jù)庫PhxSQL設計與實現(xiàn)的實例分析下載
相關電子資料下載
- 多方位優(yōu)化!憶聯(lián)分布式數(shù)據(jù)庫存儲解決方案,助力MySQL實現(xiàn)高性能、低時延 357
- **分布式數(shù)據(jù)庫|數(shù)據(jù)庫數(shù)據(jù)類型** 157
- 數(shù)字化轉型下我國分布式數(shù)據(jù)庫應用挑戰(zhàn)及發(fā)展建議 213
- 華為云新一代分布式數(shù)據(jù)庫GaussDB正式發(fā)布 521
- 華為新一代分布式數(shù)據(jù)庫GaussDB向全球客戶提供服務 223
- 華為云新一代分布式數(shù)據(jù)庫GaussDB,給世界一個更優(yōu)選擇 386
- 如何對全國分布式數(shù)據(jù)庫機房動環(huán)進行監(jiān)控和報警 59
- 美國數(shù)倉巨頭退出中國 國產(chǎn)新一代分布式數(shù)據(jù)庫開啟達夢新紀元 209
- 低延遲的分布式數(shù)據(jù)庫架構對于新興的霧應用程序至關重要 250
- 榮膺桂冠!中興GoldenDB蟬聯(lián)中國金融級分布式數(shù)據(jù)庫第一 640