理解拓撲設計先要掌握硬性約束:
server-idlog_slave_updates 後,Slave 可作為下一級 Master(級聯)
Master (寫)
/ | \
S1 S2 S3... (讀)
優勢:架構簡單、讀擴展線性、異步延遲極低(雙線程複制後)
適用:讀多寫少、數據實時性要求非極關鍵
擴展策略:
瓶頸:Slave 過多時 Master 輸出帶寬、IO 線程成為瓶頸
Master A ⇄ Master B
核心機制:雙向開啟 log_slave_updates,靠 server-id 防止循環複制
致命缺陷:寫衝突無自動解決。例:同一行 col=1,A 執行 +1,B 執行 *2,結果 A=4, B=3,數據發散且不報錯
適用場景:地理分布雙活、各寫各業務表(無重疊)、或配合應用層路由保證單主寫入
替代方案:MySQL Cluster (NDB) 或 Group Replication (8.0+)
Master (Active, 讀寫) → Slave (Passive, 唯讀/備援)
關鍵配置:Passive 端 read_only=1(super 權限除外),防止誤寫入
優勢:無寫衝突、故障切換快(只需修改 read_only、VIP 漂移)、架構簡單
工具支援:MHA、Orchestrator、GTID + ProxySQL 自動故障轉移
Master → L1 Slaves (3-5台) → L2 Slaves (大量)
核心配置:L1 開啟 log_slave_updates=1,L2 指向 L1
優勢:Master 僅連少量 L1,減輕網路/CPU 壓力
風險:延遲累積(每級 +1-10ms)、L1 故障影響全鏈路、維護複雜度指數級上升
優化建議:優先考慮分庫分表/多集群而非深級聯;若必須級聯,限制 2 級、監控 Seconds_Behind_Master 累積值
Master A (Active) ←→ Master B (Standby)
↓ ↓
Slaves群 Slaves群
架構優勢:
潛在瓶頸:Standby 成為新的輸出瓶頸 → 可再級聯或分集群
Slave → Master A (業務庫1)
→ Master B (業務庫2)
→ Master C (日誌庫)
CHANGE MASTER TO MASTER_HOST='A' FOR CHANNEL 'biz1'| 業務特徵 | 推薦拓撲 | 關鍵技術點 |
|---|---|---|
| 讀多寫少、單中心 | 單主多從 | GTID、半同步、ProxySQL 讀寫分離 |
| 雙中心同城、RPO=0 | 主動-被動雙主 + 半同步 | MHA/Orchestrator、VIP 漂移 |
| 異地多活、業務可分片 | 分片 + 各分片雙主 | 中間件路由、分佈式事務 |
| 數據聚合分析 | Multi-Source → 單實例 | Channel 管理、衝突檢測 |
| 新建核心交易系統 | InnoDB Cluster (Group Replication) | 單主模式、MySQL Router、自動故障轉移 |
gtid_mode=ON, enforce_gtid_consistency=ON,簡化故障切換與拓撲變更pt-table-checksum + pt-table-syncMySQL 複制拓撲沒有銀彈,只有適合當前業務階段的最優解。從單主多從起步,經過主備雙主,演進至 Group Replication 多主集群,每一步都伴隨著業務複雜度提升與可用性要求增強。核心原則:簡單優於複雜、異步優於同步(除非 RPO=0)、監控優於假設、演練優於文檔。新專案建議直接採用 8.0+ GTID + Group Replication,站在巨人肩膀上避開歷史坑點。