天天看點

【MySQL】galera叢集原理簡介

【MySQL】galera叢集原理簡介

特性

基于行複制的完全并行同步複制

實時多主架構,任意節點可讀寫

無延遲複制,事務零丢失,可靠健壯的讀寫體驗。

自動化節點關系控制:節點故障自動摘除,節點加入自動協調

接近原生的MySQL資料庫連接配接的體驗

2.應用

percona分支的PXC叢集,

Maria分支的MariaDB Cluster叢集

3.原理簡析

當一個事務在目前寫入的節點送出後,通過wsrep API(write set replication API)将這個事務變成

寫集(write set)廣播到同叢集的其他節點中,其他節點收到寫集事務後,對這個事務進行可行性檢查,

并傳回結果給wsrep API。

若大多數節點都預估自己可以成功執行這個事務,則wsrep API會做出仲裁,通知所有可以成功執行這

個事務的節點送出這個事務,并将事務成功送出的消息傳回給用戶端,同時根據需要剔除沒有成功執行

事務的節點

4.galera共享庫

galera本身是作為一個插件式的共享庫檔案,MySQL通過調用galera寫集複制API挂鈎,獲得galera叢集

特性。

4.1 galera共享庫組成部分

galera庫是一個提供準備,複制,應用寫集事務功能的協定棧,其重要組成部分為:

wsrep API:寫集複制功能元件,負責提供關系型資料庫管理與複制服務,定義接口

wsrep hooks:在資料庫引擎中的內建寫集元件

Gelera Provider:将共享庫轉化為wsrep API

Certification Layer:保護寫集并完整性,驗證寫集完整性

replication:管理複制協定,提供完整的指令系統

GCS framwork:為叢集組通信提供插件架構

5.優勢

與異步複制相比:

資料一緻性強,傳統異步複制并不能保證主從資料一緻性,這是由于一般情況下,主庫多線程并發執行

事務,但從庫卻隻有一個線程重做事務,在高壓力情況下必然會導緻主從延遲。

與使用半同步複制或分布式鎖實作的同步複制相比:

性能高,擴充性好,半同步複制在高負載甚至從庫性能較差的情況下,難以保證其性能。即使自動的

從半同步複制切換到異步複制,也會犧牲其最大的優點:一緻性。其擴充友好度也較差

galera叢集的獨特優勢:

1.叢集中的每個節點都儲存着一份完整的資料副本,資料備份安全性高

2.叢集擴充性強,可以自适應的增加或者下線節點:

新節點上線時,可以空庫狀态直接從叢集中擷取全量資料傳輸(SST),也可以選擇從恢複最新備份狀

态加入叢集,擷取差量資料傳輸(IST)

下線維護其中一個節點時,直接關閉執行個體,叢集就會自動踢出這個節點。維護完畢上線後,會根據自身

資料與叢集資料的落後程度決定通過SST或者IST傳輸資料。

3.高效的同步效率,提供了高性能的讀寫狀态(相對于同步複制)。由于同步機制的原因,甚至可以

通過增加slave線程的辦法更進一步提高節點同步效率

4.更加友好的軟硬體相容性:MySQL官方的NDB,雖然也可以實作同樣功能,但因對軟硬體要求較高,

導緻其使用量與galera叢集不在一個數量級,其增加節點容易,但無法不停機移除節點

7.缺點:

DDL操作會嚴重阻塞同步線程,線上大動作DDL會導緻有可能導緻節點堵塞無響應,更進一步會導緻

部分節點下線。實際使用中需要搭配pt-osc或者gh-osc等線上DDL工具來進行操作DDL。

附:無延遲複制是指寫集同一時間送出,但實際環境中可能因為部分原因導緻節點間執行速度有差異,但從理念上已經比半同步複制更先進了一些

<a href="http://galeracluster.com/">本文部分内容參考了galera官方網站的内容,與其《Minimizing downtime and maximizing elasticity with Galera Cluster for MySQL》白皮書</a>

 本文轉自 angry_frog 51CTO部落格,原文連結:http://blog.51cto.com/l0vesql/2044262