一、組復制(MGR)核心概念
1. 定義與定位
- 目標:解決傳統主從復制的單點故障、數據不一致問題,提供高可用、高擴展的分布式數據庫方案。
- 基于 GTID:依賴全局事務標識符(GTID)實現事務一致性,確保跨節點事務唯一且有序。
- 分布式協議:基于?Paxos 協議實現節點間數據共識,保證事務在多數節點提交后才生效。
2. 核心優勢
傳統主從復制 | 組復制(MGR) |
單主節點,存在單點故障 | 多節點集群,支持單主或多主模式 |
異步復制,可能丟數據 | 半同步或強一致性(取決于配置) |
手動故障轉移 | 自動選主(單主模式) |
從節點只讀 | 多主模式下節點可讀寫 |
3. 應用場景
- 高可用性集群:金融、電商等不能容忍單點故障的場景。
- 多活數據中心:支持多主寫入,適合跨地域數據同步。
- 讀寫高并發:多主模式下分攤寫壓力(需解決沖突)。
二、組復制模式與原理
1. 單主模式(推薦)
- 特點:
- 集群中僅有一個主節點(Primary)接受寫請求,其余節點為從節點(Secondary,只讀)。
- 主節點故障時,自動選舉新主節點(基于 Paxos 協議)。
- 適用場景:大多數業務場景,避免多主寫入沖突。
2. 多主模式
- 特點:
- 所有節點均可讀寫,適合分布式事務或跨地域寫入。
- 需啟用?沖突檢測(如?
group_replication_enforce_update_everywhere_checks=ON
),避免主鍵沖突。
- 風險:寫入沖突可能導致事務回滾,需謹慎設計業務邏輯。
3. 核心組件
- Group Replication 插件:實現節點間通信、事務認證和復制。
- GTID 集合:記錄已執行的事務,確保節點數據一致。
- 分布式恢復機制:新節點加入時,通過全量備份+增量 GTID 同步數據。
三、單主模式部署步驟(基于 Docker)
1. 環境規劃
節點角色 | server_id | 端口 | 配置文件 |
mgr-node1(主) | 1 | 3321 | custom.cnf(主節點配置) |
mgr-node2(從) | 2 | 3322 | custom.cnf(從節點配置) |
mgr-node3(從) | 3 | 3323 | custom.cnf(從節點配置) |
2. 關鍵配置文件(custom.cnf
)
[mysqld]
# 基礎配置
server_id=1 # 唯一節點ID
gtid_mode=ON # 啟用GTID
enforce_gtid_consistency=ON # 強制GTID一致性
log-bin=mysql-bin # 二進制日志
default-time_zone='+8:00' # 時區# 組復制配置
plugin_load_add='group_replication.so' # 加載組復制插件
group_replication_group_name="117dc7ea-b9bd-11ee-9bdb-0242ac120002" # 統一組名(UUID格式)
group_replication_local_address="mgr-node1:33061" # 內部通信地址(端口自定義)
group_replication_group_seeds="mgr-node1:33061,mgr-node2:33061,mgr-node3:33061" # 種子節點列表
group_replication_bootstrap_group=OFF # 非引導節點設為OFF
3. 創建復制用戶
-- 在所有節點執行
CREATE USER 'fox'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, GROUP_REPLICATION_STREAM ON *.* TO 'fox'@'%';
FLUSH PRIVILEGES;
4. 啟動組復制
- 引導主節點(mgr-node1):
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
- 加入從節點(mgr-node2/mgr-node3):
START GROUP_REPLICATION;
5. 驗證集群狀態
-- 查看組成員
SELECT MEMBER_HOST, MEMBER_ROLE, MEMBER_STATE FROM performance_schema.replication_group_members;-- 查看主節點
SHOW STATUS LIKE 'group_replication_primary_member';
四、多主模式關鍵調整
- 關閉單主模式:
SET GLOBAL group_replication_single_primary_mode=OFF;
- 啟用沖突檢測:
SET GLOBAL group_replication_enforce_update_everywhere_checks=ON;
- 注意事項:
- 避免跨節點更新同一數據(如共享主鍵表)。
- 使用中間件(如 MySQL Router)路由讀寫請求。
五、與傳統主從復制的對比
維度 | 傳統主從復制 | 組復制(MGR) |
復制協議 | 異步/半同步 | 基于 Paxos 的共識協議 |
故障轉移 | 手動或依賴外部工具(如 MHA) | 自動選舉(單主模式) |
數據一致性 | 最終一致(異步) | 強一致(多節點確認) |
寫擴展性 | 單主寫入 | 多主寫入(需處理沖突) |
部署復雜度 | 較低 | 較高(需配置插件和分布式協議) |
六、注意事項與最佳實踐
- 節點數量:建議奇數節點(如 3/5 個),確保多數派共識(
N ≥ 2f+1
,f 為允許故障節點數)。 - 網絡要求:低延遲、高可靠網絡,避免腦裂(Split-Brain)。
- 監控告警:
- 跟蹤?
Seconds_Behind_Master
(單主模式)或沖突日志。 - 使用 Prometheus + MySQL Exporter 監控集群狀態。
- 跟蹤?
- 備份與恢復:
- 新節點加入需全量備份(如?
mysqldump
)+ GTID 增量同步。 - 避免在復制中直接刪除數據文件,可能導致 GTID 空洞。
- 新節點加入需全量備份(如?
七、總結
組復制(MGR)是 MySQL 官方提供的高可用解決方案,通過 GTID 和分布式協議解決了傳統復制的痛點。單主模式適合大多數場景,而多主模式需謹慎評估業務沖突風險。實際應用中,建議結合中間件(如 MySQL Router)和監控工具,構建健壯的分布式數據庫集群。