MGR 的主要優點

  • 2019 年 10 月 6 日
  • 筆記

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

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是實現分散式資料庫架構,底層的分散式基礎是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. 多節點寫入支援:多寫模式下支援集群中的所有節點都可以寫入。

Tags: