溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PXC / Galera Cluster集群概述及原理分析

發(fā)布時間:2020-07-04 17:56:44 來源:網(wǎng)絡 閱讀:35448 作者:jalyzjs 欄目:數(shù)據(jù)庫

mariadb的galera cluster集群抄襲percona的PXC數(shù)據(jù)庫集群,所以原理一樣


### Galera Cluster/ PXC 集群工作原理

client端向server端發(fā)送dml更新操作請求時,server的native本地進程處理請求,并返回OK準備接收,client發(fā)送commit更新事務給server,server將replicate writeset復制寫數(shù)據(jù)集發(fā)給group(cluster集群),cluster將該數(shù)據(jù)集對應產(chǎn)生的唯一的GTID(global transaction ID)發(fā)送給集群每個server(節(jié)點)。當前server節(jié)點驗證通過后,執(zhí)行commit_cd動作更新本地數(shù)據(jù)庫,并返回OK;若其他節(jié)點驗證不通過,則執(zhí)行rollback_cd,回滾剛提交的事務。其他server(other server)接收并驗證通過后,執(zhí)行apply_cd和commit_cd動作更新本地數(shù)據(jù)庫;若驗證不通過,則丟棄該數(shù)據(jù)集。

PXC / Galera Cluster集群概述及原理分析

任意節(jié)點收到sql請求,對于dml更新操作事務,在commit之前,由wsrep API調用galera庫進行集群內(nèi)部廣播,驗證當前事務是否能在所有節(jié)點中執(zhí)行,驗證通過后該事務真正提交到集群所有節(jié)點執(zhí)行,反之roll back回滾。此驗證機制則是為了保證所有節(jié)點的數(shù)據(jù)一致性。PXC / Galera Cluster集群概述及原理分析


innodb內(nèi)部使用悲觀鎖,保證事務的成功提交和執(zhí)行。

pxc/galera集群采用樂觀鎖,所有的事務都廣播給集群每個節(jié)點,驗證不通過再回滾 


### PXC/Galera Cluster集群架構

PXC / Galera Cluster集群概述及原理分析

group communication層:主要實現(xiàn)統(tǒng)一全局數(shù)據(jù)同步策略和集群內(nèi)部所有事務的排序,便于生成GTID

replication層:主要用于完成數(shù)據(jù)同步,由applier和slave queue組成。replication模塊的效率直接影響整個集群的寫入功能


### 主要名詞解釋

WS    write set寫數(shù)據(jù)集,寫/更新事務

IST   Incremental State Transfer增量同步

SST   State Snapshot Transfer增量同步。傳輸SST的幾種方法:mysqldump/xtrabackup/rsync

UUID    節(jié)點狀態(tài)改變及順序的唯一標識

GTID    Global Transaction ID,由UUID和sequence number偏移量組成。wsrep api中定義的集群內(nèi)部全局事務id,用于記錄集群中發(fā)生狀態(tài)改變的唯一標識以及隊列中的偏移量。

wsrep API    在DBMS庫和wsrep provider之間提供接口

commit       把事務所做的修改提交到數(shù)據(jù)庫,即在庫中執(zhí)行用戶的sql請求 


### PXC/Galera Cluster集群端口

3306    數(shù)據(jù)庫對外提供服務的端口

4444    鏡像數(shù)據(jù)傳輸SST,集群數(shù)據(jù)同步端口,全量同步,新節(jié)點加入時起作用

4567    集群節(jié)點間相互通信的端口

4568    增量數(shù)據(jù)同步IST,節(jié)點下線、重啟后使用該端口,增量同步數(shù)據(jù)。



### 節(jié)點狀態(tài)

PXC / Galera Cluster集群概述及原理分析

  1. OPEN    節(jié)點啟動成功,嘗試連接到集群,如果失敗則根據(jù)配置退出或創(chuàng)建新的集群

  2. PRIMARY 節(jié)點已處于集群中,在新節(jié)點加入時,選取donor進行數(shù)據(jù)同步時會產(chǎn)生的狀態(tài)

  3. JOINER  節(jié)點處于等待接收/接收同步文件時的狀態(tài)

  4. JOINED   節(jié)點完成數(shù)據(jù)同步,但有部分數(shù)據(jù)沒跟上,在嘗試保持和集群進度一致的過程狀態(tài)

         例如某個節(jié)點故障后,重新加入集群,在追趕集群進度時的狀態(tài)

5. SYNCED    節(jié)點正常提供服務的狀態(tài),表示已經(jīng)同步完成并和集群進度保持一致。

6. DONOR     節(jié)點處于為新節(jié)點提供全量數(shù)據(jù)數(shù)據(jù)同步時的狀態(tài)。此時該節(jié)點對客戶端不提供服務。


##節(jié)點狀態(tài)發(fā)生變化因素

  1. 新節(jié)點加入集群 

  2. 節(jié)點故障恢復,重新加入集群

  3. 節(jié)點同步失效


### PXC/Galera Cluster集群優(yōu)缺點

優(yōu)點:

    1.高可用性。集群多個節(jié)點功能平等,提供負載和冗余,避免單點故障

    2.強一致性。集群所有節(jié)點同步修改數(shù)據(jù),真正同步讀寫,不存延遲。

    3.易擴展。增加新節(jié)點,只需扔進集群,會自動完成SST全量同步,和后續(xù)IST增量同步

缺點:

    1.任何更新事務都需要全局驗證通過,才會在每個節(jié)點庫執(zhí)行。集群性能受限于性能最差的節(jié)點

    2.galera/pxc集群保證數(shù)據(jù)一致性,必須所有節(jié)點驗證通過。多點并發(fā)寫入,鎖沖突嚴重。

        例如:多臺同時有寫操作,每個更新操作時,都會鎖庫來驗證

    3.新節(jié)點或延后較大的節(jié)點重新加入時,會進行全量拷貝數(shù)據(jù)SST,作為donor(提供同步文件的節(jié)點)的節(jié)點在同步過程中無法提供讀寫,顯示狀態(tài)為donor。完成后的狀態(tài)為syncd


###當galera cluster集群單個節(jié)點或所有節(jié)點停機情況分析

  1. 單個節(jié)點停機

    節(jié)點停機重啟,重新加入集群,通過IST增量同步數(shù)據(jù),來保持集群數(shù)據(jù)的一致性。IST的實現(xiàn)由wsrep_provider_options="gcache.size=1G"參數(shù)決定,一般設置為1G。參數(shù)大小由什么決定,根據(jù)停機時間,若停機一小時,需要確認一小時產(chǎn)生多大的binlog來算出參數(shù)大小。

1.1 停機時間過長,部分數(shù)據(jù)gcache沒有,此時該節(jié)點SST全量同步數(shù)據(jù)。

2. 所有節(jié)點關閉,應采用輪巡滾動關閉的方式:a節(jié)點關閉修復,加回集群;b節(jié)點關閉修復,加回集群...

    原則就是保持cluster中最少一個成員存活,進行滾動重啟。

2.1 集群所有節(jié)點都關閉了,沒有存活的節(jié)點的情況

    每個節(jié)點數(shù)據(jù)庫關閉后,都會保存最后一個GTID,啟動集群時要先啟動最后一個關閉的節(jié)點,啟動順序和關閉順序相反。

3. 避免關閉和啟動節(jié)點時數(shù)據(jù)丟失

    3.1 原則保持cluster集群中最少有一個成員存貨,然后進行滾動重啟

    3.2 利用主從的概念,把一個從節(jié)點轉化為PXC/Galera集群中的節(jié)點


### 常見問題匯總

  1. 如果主節(jié)點(負責寫入的節(jié)點)寫入過大,apply_cd時間過長,導致數(shù)據(jù)更新操作時間過長,怎么處理?

    Wrep_slave_threads參數(shù)配置成cpu的個數(shù)或者1.5倍。

  2. 腦裂

    任何命令執(zhí)行出現(xiàn)unknown command,表示出現(xiàn)腦裂,集群中任意兩個節(jié)點間通信的4567端口不通,并且無法對外提供服務。SET GLOBAL wsrep_provider_options="pc.ignore_sb=true";

  3. 并發(fā)寫

    如果在集群多個節(jié)點進行寫/更新操作,有可能同時不同節(jié)點update同一行操作時就會出現(xiàn)鎖死問題,出現(xiàn):Error:1213 SQLSTATE:4001.解決:指定更新和寫入都在都一個節(jié)點操作。

  4. DDL全局鎖

    采用pt-online-schema-change

  5. 只支持innodb引擎,表結構必須要有主鍵,不然會造成集中每個節(jié)點的data page里的數(shù)據(jù)不一致。

    不支持表級鎖,即不能lock/unlock tables,使用行級鎖

  6. 新節(jié)點加入加入&故障節(jié)點恢復加入集群,此時不能有寫操作,不然會導致被寫入的那臺庫DDL死鎖。所以需要暫停集群業(yè)務寫操作,等數(shù)據(jù)一致后在開啟寫操作。




向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI