前言
MGR全稱MySQL Group Replication(Mysql組復制),是MySQL官方于2016年12月推出的一個全新的高可用與高擴展的解決方案。MGR提供了高可用、高擴展、高可靠的MySQL集群服務。
高一致性:基于分布式paxos協議實現組復制,保證數據一致性;
高容錯性:自動檢測機制,只要不是大多數節點都宕機就可以繼續工作,內置防腦裂保護機制;
高擴展性:節點的增加與移除會自動更新組成員信息,新節點加入后,自動從其他節點同步增量數據,直到與其他節點數據一致;
高靈活性:提供單主模式和多主模式,單主模式在主庫宕機后能夠自動選主,所有寫入都在主節點進行,多主模式支持多節點寫入;
MGR支持單主模式和多主模式:
單主模式:在單主模式下,只有一個節點可以可以讀寫,其他節點只能提供讀,如果讀寫節點down掉,會自主從新推選一個新的讀寫節點,其他節點繼續保持只讀。當主節點宕掉,自動會根據服務器的server_uuid變量和group_replication_member_weight變量值,選擇下一個slave誰作為主節點,group_replication_member_weight的值最高的成員被選為新的主節點,在group_replication_member_weight值相同的情況下,group根據數據字典中 server_uuid排序,排序在最前的被選擇為主節點。
多主模式:所有節點都支持讀寫,但是不支持多節點同時對一個表進行DDL vs DDL/DML,不支持SERIALIZABLE隔離級別,不支持多級關聯外鍵。
對不支持的項進行說明:
1.多主模式不支持多節點同時對一個表進行 DDL vs DDL/DML:
解釋:在 MGR 的多主模式下,如果多個節點同時對一個表進行 DDL(數據定義語言)操作或 DDL 與 DML(數據操作語言)操作混合執行,可能會導致數據不一致或集群故障。
舉例:假設有兩個節點 A 和 B,A 正在對表 t1 進行 ALTER TABLE 操作,而 B 同時也在對表 t1 進行 INSERT 操作。這種情況下,可能會導致數據不一致或集群故障。
2.多主模式不支持 SERIALIZABLE 隔離級別:
解釋:SERIALIZABLE 是 MySQL 中最嚴格的隔離級別,但在 MGR 的多主模式下可能不被支持。
舉例:如果你在 MGR 的多主模式下嘗試設置 SERIALIZABLE 隔離級別,可能會收到錯誤或警告信息,或者該設置可能不會被尊重。
3.多主模式不支持多級關聯外鍵:
解釋:外鍵是 MySQL 中用于維護數據之間引用完整性的一種機制。但在 MGR 的多主模式下,可能不支持多級關聯的外鍵。
舉例:假設你有三個表 A、B 和 C,其中 B 是 A 的子表(通過外鍵關聯),C 是 B 的子表(也通過外鍵關聯)。在 MGR 的多主模式下,這種多級關聯的外鍵可能不會被支持或行為可能與預期不同。
注意點:
1.MGR最大支持9個節點,超過將拒絕新節點加入。
2.官方建議節點數量為奇數個。
3.表必須有顯式主鍵,否則即使可以建表也無法插入數據
4.數據庫默認是utf8mb4