1. 程式人生 > >Percona XtraDB Cluster(PXC)——架構原理

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
  •     多點寫入時的鎖衝突檢測機制
  •     等待佇列中事務的併發提交

複製模組:
轉:Percona <wbr>XtraDB <wbr>Cluster(PXC)——架構原理




    galera的group communication 層實現統一全域性資料同步策略和叢集內所有事務的排序,便於生成GTID。
對於每一個節點有2方面工作:
 

  •     完成資料同步。
  •     完成與其他節點的通訊。

    galera 的replication 層完成資料同步,由slave queue 和applier 組成,在事務的同步過程中,事務在佇列中以及應用執行緒中時於節點本地產生鎖衝突處理方式。replication 模組的效率直接影響整個叢集的寫入效能。
同步過程中,本地事務和等待佇列中的鎖衝突:
     innodb內部使用悲觀鎖,保證事務的成功進行和提交。pxc中使用樂觀鎖,以避免在每個節點獲取鎖以及網路開銷,在寫入節點上,事務在提交之前與單點的innodb一樣,到達提交點時,向叢集其他節點廣播(galera 庫完成 併發)事物並等待各節點驗證結果,如果所有節點都返回成功,則提交,反之,回滾。
     pxc 中先提交的事物成功,其他事務(本地或其他節點同步)將回滾或報死鎖錯誤。
相關狀態值:
 

  • wsrep_local_cert_failures  同步過程中節點認證失敗計數,衝突來自本地提交的事務和同步佇列中事務存在鎖衝突,則本地驗證失敗(保證全域性資料一致性)
  • wsrep_local_bf_aborts     強制放棄,本地事務和同步佇列中正在執行的事務存在鎖衝突時,將強制保證先提交的事務成功,後者回滾活報錯

驗證模組:

轉:Percona <wbr>XtraDB <wbr>Cluster(PXC)——架構原理


驗證過程中,節點在接收到其他節點writeset後,在本地做衝突驗證並返回驗證結果

節點狀態機:
Regular Transitions:

狀態機變化階段:
     1.OPEN: 節點啟動成功,嘗試連線到叢集,如果失敗則根據配置退出或建立新的叢集
     2.PRIMARY: 節點處於叢集PC中,嘗試從叢集中選取donor進行資料同步
     3.JOINER: 節點處於等待接收/接收資料檔案狀態,資料傳輸完成後在本地載入資料
     4.JOINED: 節點完成資料同步工作,嘗試保持和叢集進度一致
     5.SYNCED:節點正常提供服務:資料的讀寫,叢集資料的同步,新加入節點的sst請求
     6.DONOR:節點處於為新節點準備或傳輸叢集全量資料狀態,對客戶端不可用。
狀態機變化因素:
     1.新節點加入叢集
     2.節點故障恢復
     3.節點同步實效