天天看點

MGR 的主要優點

MGR(Mysql Group Replication)是5.7版本新加的特性,是一個MySQL插件。

MGR 是一個新的高可用與高擴充的方案,叢集中的任何節點資料都是一樣的,可以實作任何節點都可以寫入,實作了真正意義上的多主。

MGR 的主要優點

主要包含以下幾部分:

API層:負責完成和MySQL Server的互動,得到Server狀态,完成事務的管理。

元件層:主要包括3個特定元件,Capture負責收集事務執行的相關資訊,Applier負責應用叢集事務到本地,Recovery負責節點的資料恢複。

複制層:負責沖突驗證,接收和應用叢集事務。

叢集通信層:基于Paxos協定的叢集通信引擎,以及和上層元件的互動接口。

MGR組複制:

基于傳統異步複制和半同步複制的缺陷——資料的一緻性問題無法保證,MySQL官方在5.7.17版本正式推出組複制(MySQL Group Replication,簡稱MGR)。

由若幹個節點共同組成一個複制組,一個事務的送出,必須經過組内大多數節點(N / 2 + 1)決議并通過,才能得以送出。如上圖所示,由3個節點組成一個複制組,Consensus層為一緻性協定層,在事務送出過程中,發生組間通訊,由2個節點決議(certify)通過這個事務,事務才能夠最終得以送出并響應。

引入組複制,主要是為了解決傳統異步複制和半同步複制可能産生資料不一緻的問題。組複制依靠分布式一緻性協定(Paxos協定的變體),實作了分布式下資料的最終一緻性,提供了真正的資料高可用方案(是否真正高可用還有待商榷)。其提供的多寫方案,給我們實作多活方案帶來了希望。

MGR 的主要優點

MGR是實作分布式資料庫架構,底層的分布式基礎是Paxos協定。通過Paxos來保證分布式資料庫系統中事務的送出順序。雖然MGR會使用Slave的通道,但隻是使用這個通道的執行線程(Applier Thread)來執行遠端發送過來的Binlog Event,并沒有使用這個通道來傳輸Binlog Event。MGR沒有使用異步複制的Binlog Event傳輸機制,也不使用MySQL的服務端口來進行通信。MGR建立了一個獨立的TCP端口來進行通信,各個MySQL伺服器上的Group Replication插件通過這個端口連接配接在一起,兩兩之間可以直接通信。

Binlog Event的傳輸并不像異步複制那樣是簡單的點到點之間的傳輸。MGR在傳輸資料時,使用了Paxos協定。Paxos協定保證了資料傳輸的一緻性和原子性。MGR基于Paxos協定建構了一個分布式的狀态機複制機制,這是實作多主複制的核心技術。

三個主要優點:

1. 避免腦裂:MGR中不會出現腦裂的現象(但要注意可能出現網絡分區的情況,MGR根據參數group_replication_unreachable_majority_timeout=0/N設定的不同,行為稍有不同)。

2. 資料一緻性保障:MGR的備援能力很好,能夠保證Binlog Event至少被複制到超過一半的成員上,隻要同時當機的成員不超過半數便不會導緻資料丢失。MGR還保證隻要Binlog Event沒有被傳輸到半數以上的成員,本地成員不會将事務的Binlog Event寫入Binlog檔案和送出事務,進而保證當機的伺服器上不會有組内線上成員上不存在的資料。是以,當機的伺服器重新開機後,不再需要特殊的處理就可以加入組。

3. 多節點寫入支援:多寫模式下支援叢集中的所有節點都可以寫入。