本節提供有關 MySQL 群組複製的背景資訊。
建立容錯系統最常見的方式是求助於使組件變成冗餘,換句話說,可以移除組件,而系統應繼續按預期運作。這會產生一系列挑戰,將此類系統的複雜性提高到一個全新的層次。具體而言,複寫資料庫必須處理以下事實:它們需要維護和管理多個伺服器,而不僅僅是一個。此外,由於伺服器協同工作以建立群組,因此必須處理其他幾個典型的分散式系統問題,例如網路分割或腦裂情境。
因此,最終的挑戰是將資料庫和資料複寫的邏輯與以一致且簡單的方式協調多個伺服器的邏輯融合在一起。換句話說,讓多個伺服器同意系統的狀態以及系統中每次變更的資料。這可以歸納為讓伺服器就每個資料庫狀態轉換達成一致,以便它們都像一個單一資料庫一樣進展,或者它們最終會收斂到相同的狀態。這意味著它們需要作為(分散式)狀態機器運作。
MySQL 群組複製提供了具有伺服器之間強烈協調的分散式狀態機器複寫。伺服器在屬於同一個群組時會自動協調。該群組可以以單主模式運作,並自動選取主要伺服器,在這種模式下,一次只有一個伺服器接受更新。或者,對於更進階的使用者,該群組可以部署在多主模式中,其中所有伺服器都可以接受更新,即使它們是同時發出的。這種強大功能以應用程式必須解決此類部署所施加的限制為代價。
有一個內建的群組成員資格服務,可讓群組檢視在任何給定時間點保持一致且可供所有伺服器使用。伺服器可以離開和加入群組,並且檢視會相應更新。有時伺服器可能會意外離開群組,在這種情況下,故障偵測機制會偵測到此情況,並通知群組檢視已變更。這一切都是自動的。
為了讓交易提交,群組中的大多數必須就全球交易序列中給定交易的順序達成一致。每個伺服器會單獨決定提交或中止交易,但所有伺服器都會做出相同的決定。如果發生網路分割,導致成員無法達成一致的分割,則系統將不會進展,直到此問題得到解決。因此,還有一個內建的自動腦裂保護機制。
所有這些都由提供的群組通訊系統 (GCS) 協定提供支援。這些協定提供故障偵測機制、群組成員資格服務,以及安全且完全有序的訊息傳遞。所有這些屬性都是建立可確保資料在伺服器群組之間一致複寫的系統的關鍵。這項技術的核心在於 Paxos 演算法的實作。它充當群組通訊引擎。