mariadb的galera cluster集群抄襲percona的PXC數(shù)據(jù)庫集群,所以原理一樣
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雙峰,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575### Galera Cluster/ PXC 集群工作原理
client端向server端發(fā)送dml更新操作請求時,server的native本地進程處理請求,并返回OK準(zhǔn)備接收,client發(fā)送commit更新事務(wù)給server,server將replicate writeset復(fù)制寫數(shù)據(jù)集發(fā)給group(cluster集群),cluster將該數(shù)據(jù)集對應(yīng)產(chǎn)生的唯一的GTID(global transaction ID)發(fā)送給集群每個server(節(jié)點)。當(dāng)前server節(jié)點驗證通過后,執(zhí)行commit_cd動作更新本地數(shù)據(jù)庫,并返回OK;若其他節(jié)點驗證不通過,則執(zhí)行rollback_cd,回滾剛提交的事務(wù)。其他server(other server)接收并驗證通過后,執(zhí)行apply_cd和commit_cd動作更新本地數(shù)據(jù)庫;若驗證不通過,則丟棄該數(shù)據(jù)集。
任意節(jié)點收到sql請求,對于dml更新操作事務(wù),在commit之前,由wsrep API調(diào)用galera庫進行集群內(nèi)部廣播,驗證當(dāng)前事務(wù)是否能在所有節(jié)點中執(zhí)行,驗證通過后該事務(wù)真正提交到集群所有節(jié)點執(zhí)行,反之roll back回滾。此驗證機制則是為了保證所有節(jié)點的數(shù)據(jù)一致性。
innodb內(nèi)部使用悲觀鎖,保證事務(wù)的成功提交和執(zhí)行。
pxc/galera集群采用樂觀鎖,所有的事務(wù)都廣播給集群每個節(jié)點,驗證不通過再回滾
### PXC/Galera Cluster集群架構(gòu)
group communication層:主要實現(xiàn)統(tǒng)一全局數(shù)據(jù)同步策略和集群內(nèi)部所有事務(wù)的排序,便于生成GTID
replication層:主要用于完成數(shù)據(jù)同步,由applier和slave queue組成。replication模塊的效率直接影響整個集群的寫入功能
### 主要名詞解釋
WS write set寫數(shù)據(jù)集,寫/更新事務(wù)
IST Incremental State Transfer增量同步
SST State Snapshot Transfer增量同步。傳輸SST的幾種方法:mysqldump/xtrabackup/rsync
UUID 節(jié)點狀態(tài)改變及順序的唯一標(biāo)識
GTID Global Transaction ID,由UUID和sequence number偏移量組成。wsrep api中定義的集群內(nèi)部全局事務(wù)id,用于記錄集群中發(fā)生狀態(tài)改變的唯一標(biāo)識以及隊列中的偏移量。
wsrep API 在DBMS庫和wsrep provider之間提供接口
commit 把事務(wù)所做的修改提交到數(shù)據(jù)庫,即在庫中執(zhí)行用戶的sql請求
### PXC/Galera Cluster集群端口
3306 數(shù)據(jù)庫對外提供服務(wù)的端口
4444 鏡像數(shù)據(jù)傳輸SST,集群數(shù)據(jù)同步端口,全量同步,新節(jié)點加入時起作用
4567 集群節(jié)點間相互通信的端口
4568 增量數(shù)據(jù)同步IST,節(jié)點下線、重啟后使用該端口,增量同步數(shù)據(jù)。
### 節(jié)點狀態(tài)
OPEN 節(jié)點啟動成功,嘗試連接到集群,如果失敗則根據(jù)配置退出或創(chuàng)建新的集群
PRIMARY 節(jié)點已處于集群中,在新節(jié)點加入時,選取donor進行數(shù)據(jù)同步時會產(chǎn)生的狀態(tài)
JOINER 節(jié)點處于等待接收/接收同步文件時的狀態(tài)
JOINED 節(jié)點完成數(shù)據(jù)同步,但有部分數(shù)據(jù)沒跟上,在嘗試保持和集群進度一致的過程狀態(tài)
例如某個節(jié)點故障后,重新加入集群,在追趕集群進度時的狀態(tài)
5. SYNCED 節(jié)點正常提供服務(wù)的狀態(tài),表示已經(jīng)同步完成并和集群進度保持一致。
6. DONOR 節(jié)點處于為新節(jié)點提供全量數(shù)據(jù)數(shù)據(jù)同步時的狀態(tài)。此時該節(jié)點對客戶端不提供服務(wù)。
##節(jié)點狀態(tài)發(fā)生變化因素
新節(jié)點加入集群
節(jié)點故障恢復(fù),重新加入集群
節(jié)點同步失效
### PXC/Galera Cluster集群優(yōu)缺點
優(yōu)點:
1.高可用性。集群多個節(jié)點功能平等,提供負載和冗余,避免單點故障
2.強一致性。集群所有節(jié)點同步修改數(shù)據(jù),真正同步讀寫,不存延遲。
3.易擴展。增加新節(jié)點,只需扔進集群,會自動完成SST全量同步,和后續(xù)IST增量同步
缺點:
1.任何更新事務(wù)都需要全局驗證通過,才會在每個節(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
###當(dāng)galera cluster集群單個節(jié)點或所有節(jié)點停機情況分析
單個節(jié)點停機
節(jié)點停機重啟,重新加入集群,通過IST增量同步數(shù)據(jù),來保持集群數(shù)據(jù)的一致性。IST的實現(xiàn)由wsrep_provider_options="gcache.size=1G"參數(shù)決定,一般設(shè)置為1G。參數(shù)大小由什么決定,根據(jù)停機時間,若停機一小時,需要確認一小時產(chǎn)生多大的binlog來算出參數(shù)大小。
1.1 停機時間過長,部分數(shù)據(jù)gcache沒有,此時該節(jié)點SST全量同步數(shù)據(jù)。
2. 所有節(jié)點關(guān)閉,應(yīng)采用輪巡滾動關(guān)閉的方式:a節(jié)點關(guān)閉修復(fù),加回集群;b節(jié)點關(guān)閉修復(fù),加回集群...
原則就是保持cluster中最少一個成員存活,進行滾動重啟。
2.1 集群所有節(jié)點都關(guān)閉了,沒有存活的節(jié)點的情況
每個節(jié)點數(shù)據(jù)庫關(guān)閉后,都會保存最后一個GTID,啟動集群時要先啟動最后一個關(guān)閉的節(jié)點,啟動順序和關(guān)閉順序相反。
3. 避免關(guān)閉和啟動節(jié)點時數(shù)據(jù)丟失
3.1 原則保持cluster集群中最少有一個成員存貨,然后進行滾動重啟
3.2 利用主從的概念,把一個從節(jié)點轉(zhuǎn)化為PXC/Galera集群中的節(jié)點
### 常見問題匯總
如果主節(jié)點(負責(zé)寫入的節(jié)點)寫入過大,apply_cd時間過長,導(dǎo)致數(shù)據(jù)更新操作時間過長,怎么處理?
Wrep_slave_threads參數(shù)配置成cpu的個數(shù)或者1.5倍。
腦裂
任何命令執(zhí)行出現(xiàn)unknown command,表示出現(xiàn)腦裂,集群中任意兩個節(jié)點間通信的4567端口不通,并且無法對外提供服務(wù)。SET GLOBAL wsrep_provider_options="pc.ignore_sb=true";
并發(fā)寫
如果在集群多個節(jié)點進行寫/更新操作,有可能同時不同節(jié)點update同一行操作時就會出現(xiàn)鎖死問題,出現(xiàn):Error:1213 SQLSTATE:4001.解決:指定更新和寫入都在都一個節(jié)點操作。
DDL全局鎖
采用pt-online-schema-change
只支持innodb引擎,表結(jié)構(gòu)必須要有主鍵,不然會造成集中每個節(jié)點的data page里的數(shù)據(jù)不一致。
不支持表級鎖,即不能lock/unlock tables,使用行級鎖
新節(jié)點加入加入&故障節(jié)點恢復(fù)加入集群,此時不能有寫操作,不然會導(dǎo)致被寫入的那臺庫DDL死鎖。所以需要暫停集群業(yè)務(wù)寫操作,等數(shù)據(jù)一致后在開啟寫操作。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。