Percona XtraDB Cluster(PXC)——架構原理
Percona XtraDB Cluster(PXC):Percona XtraDB Server +WSREP API(write set replication patches) + Galera(galera library)
轉自:http://blog.chinaunix.net/uid-25206403-id-3912291.html
同類基於驗證複製的叢集結構:
codership 開源產品:Galera Cluster for MySQL
mariadb 基於galera叢集:maria galera cluster
pxc是基於驗證的資料強一致性資料複製的mysql叢集,特性分析:
優點:
1.高可用性,節點不可用不影響叢集正常執行。
2.強一致性,可以將讀擴充套件到多個節點上。
3. 節點的增加資料同步自動化(IST,SST)。
4. 可實現多點讀寫,但寫壓力仍要同步到所有節點。
缺點:
1.由於ddl需全域性驗證通過,則叢集效能由叢集中最差效能節點決定。
2.為保證一致性,galera 總是優先保證資料一致性,在多點併發寫時,鎖衝突問題嚴重
3.新節點加入或延後較大的節點重新加入需全量拷貝資料(sst),作為donor的節點在同步過程中無法提供讀寫
4.資料冗餘度為節點數
名詞:
WS:write set 寫資料集
IST: Incremental State Transfer 增量同步
SST:State Snapshot Transfer 全量同步
UUID:節點狀態改變及順序的唯一標識。
GTID:Global Transaction ID ,由UUID和偏移量組成。wsrep api 中定義的叢集內全域性事務id。
PXC工作原理:
節點接收sql 請求後,對於ddl 操作,在commit之前,由wsrep API 呼叫galera 庫進行叢集內廣播,所有其他節點驗證成功後事務在叢集所有節點進行提交,反之roll back。pxc 保證整個叢集所有資料的強一致性,滿足CAP理論中滿足:Consistency 和 Availability。
WSREP API:
在DBMS和wsrep provider 之間提供介面。
GTID:Global Transaction ID. 由UUID 和 sequence number組成,用於標示叢集中發生狀態改變的唯一標示以及佇列中的偏移量。
Galera wsrep provider:
- 完成事務在叢集內的廣播:本地事務傳送給其他節點驗證,接收其他節點事件本地驗證並返回結果
- 應用從其他節點接收並全域性驗證通過的事件到本地。
- 叢集內通訊,節點存活的檢測,pc的選舉等
- 腦裂,為避免節點失效導致pc選舉失敗整個叢集不可用,建議節點數至少為3
- 多點寫入時的鎖衝突檢測機制
- 等待佇列中事務的併發提交
galera的group communication 層實現統一全域性資料同步策略和叢集內所有事務的排序,便於生成GTID。
對於每一個節點有2方面工作:
- 完成資料同步。
- 完成與其他節點的通訊。
galera 的replication 層完成資料同步,由slave queue 和applier 組成,在事務的同步過程中,事務在佇列中以及應用執行緒中時於節點本地產生鎖衝突處理方式。replication 模組的效率直接影響整個叢集的寫入效能。
同步過程中,本地事務和等待佇列中的鎖衝突:
innodb內部使用悲觀鎖,保證事務的成功進行和提交。pxc中使用樂觀鎖,以避免在每個節點獲取鎖以及網路開銷,在寫入節點上,事務在提交之前與單點的innodb一樣,到達提交點時,向叢集其他節點廣播(galera 庫完成 併發)事物並等待各節點驗證結果,如果所有節點都返回成功,則提交,反之,回滾。
pxc 中先提交的事物成功,其他事務(本地或其他節點同步)將回滾或報死鎖錯誤。
相關狀態值:
- wsrep_local_cert_failures 同步過程中節點認證失敗計數,衝突來自本地提交的事務和同步佇列中事務存在鎖衝突,則本地驗證失敗(保證全域性資料一致性)
- wsrep_local_bf_aborts 強制放棄,本地事務和同步佇列中正在執行的事務存在鎖衝突時,將強制保證先提交的事務成功,後者回滾活報錯
驗證模組:
驗證過程中,節點在接收到其他節點writeset後,在本地做衝突驗證並返回驗證結果
節點狀態機:
Regular Transitions:
狀態機變化階段:
1.OPEN: 節點啟動成功,嘗試連線到叢集,如果失敗則根據配置退出或建立新的叢集
2.PRIMARY: 節點處於叢集PC中,嘗試從叢集中選取donor進行資料同步
3.JOINER: 節點處於等待接收/接收資料檔案狀態,資料傳輸完成後在本地載入資料
4.JOINED: 節點完成資料同步工作,嘗試保持和叢集進度一致
5.SYNCED:節點正常提供服務:資料的讀寫,叢集資料的同步,新加入節點的sst請求
6.DONOR:節點處於為新節點準備或傳輸叢集全量資料狀態,對客戶端不可用。
狀態機變化因素:
1.新節點加入叢集
2.節點故障恢復
3.節點同步實效