天天看點

MySQL組複制MGR(一)-- 技術概述

(一)複制技術的發展

MySQL的複制技術主要經曆了異步主從複制,半同步複制,組複制(Group Replication)3個階段。

(1)傳統的異步主從複制

傳統的MySQL提供了一種簡單的主從複制方法。有1個主伺服器(master),有1個或多個從伺服器(slave),主伺服器執行事務,然後送出,從伺服器異步接收日志,并重新應用日志。

該架構存在的問題有:如果主伺服器/資料庫crash了,日志沒有完成傳送到備庫,那麼當備庫切換為主庫的時候,可能存在資料丢失的風險。

異步複制架構如下:

MySQL組複制MGR(一)-- 技術概述

                                     圖1.MySQL Asynchronous Replication

(2)半同步複制

半同步複制向同步協定添加一個步驟,這意味着主庫在執行送出的時候,需要等待從庫确認已經接收到事務,才能進行送出。

該架構存在的問題有:主庫必須等待備庫接收到日志并傳回響應才算完成事物,造成了主庫的延遲,這個延遲最少是一個TCP/IP往返的時間,是以半同步複制最好在延遲低的網絡中使用

半同步複制架構如下:

MySQL組複制MGR(一)-- 技術概述

                                    圖2.MySQL semisynchronous Replication

(3)組複制

組複制是一種可用于實施容錯系統的技術。組複制是一組伺服器,每個伺服器都有自己的完整資料副本,并通過消息傳遞互相互動。一個組複制由多個伺服器組成,該組中的每個伺服器都可以随時獨立執行事務。但是,所有讀寫事務僅在獲得組準許後才送出,換句話說,對于任何讀寫事務,該組都需要确定送出,是以送出操作不是來自原始伺服器的單方面決定。隻讀事務不需要組内協調,可以立即送出。

組複制可以是單主模式和多主模式,多主模式意味所有組成員都可以執行寫操作,這樣就可能存在事務沖突,根據組複制沖突監測機制,如果存在兩個不同的server成員更新同一行的并發事務,排在最前面的可以在所有server成員上送出,第二個事務在源server上復原,并在組中的其它server上删除。

MySQL組複制MGR(一)-- 技術概述

                                      圖3.MySQL Group Replication

關于三種複制技術,個人覺得:異步複制提供了主從方案,降低了單節點運作資料庫的風險;後續的半同步複制是異步主從複制的加強,解決了資料丢失的風險,但是依然存在網絡延遲,切換麻煩的問題(例如10個節點,1主9從,主節點當機,當把一個從節點提升為主節點後,其它節點需要手動修改master),而組複制則擁有了自動故障轉移failover的能力,當主節點發生故障(單主模式才需考慮)時,組内部會自動選擇主節點。

(二)組複制的容錯能力

組複制建立在Paxos分布式算法之上,以提供伺服器之間的分布式協調,是以,他需要

大多數伺服器

處于活動狀态才能正常工作。如果有n台伺服器,最多允許故障的伺服器數量為f,那麼n與f之間的關系為:n=2f+1。或許這麼看有些難以了解,可以看下面的關系:

組複制伺服器數量 多數 允許故障的伺服器數量
1 1
2 2
3 2 1
4 3 1
5 3 2
6 4 2
7 4 3

對組複制有了一定的了解,接下來,我們一起來搭建組複制。。。