MMM (Master-Master Replication Manager for MySQL) 是一套基於 Perl 的腳本工具集,提供 MySQL 主主復制環境下的監控、故障遷移與管理功能,實現讀寫分離與高可用。
| 優點 | 缺點 |
|---|---|
| 穩定性好、自動故障切換、Slave 自動重新指向新 Master、支撐讀寫分離架構 | 需多節點多 IP 成本高、讀寫極繁忙場景下復制延遲可能導致切換失效、不適合極高數據安全性與高併發寫入場景 |
| 角色 | 主機名 | 物理 IP | 虛擬 IP (VIP) |
|---|---|---|---|
| Master1 (Active Writer) | db1 | 192.168.1.210 | Writer VIP: 192.168.1.230 |
| Master2 (Standby Writer) | db2 | 192.168.1.211 | |
| Slave1 | db3 | 192.168.1.250 | Reader VIPs: 192.168.1.231~.234 |
| Slave2 | db4 | 192.168.1.209 | |
| Monitor | monitor | 192.168.1.21 |
正常態:Master1 持有 Writer VIP + 1 個 Reader VIP,Master2 持有 1 個 Reader VIP,Slave 各持有 1 個 Reader VIP。故障時 VIP 自動漂移。
mysql-mmm*;DB 節點裝 mysql-mmm-agent(需 EPEL 源)。repl。read_only=1(由 MMM 控制寫入權限)。mmm_monitor@192.168.1.%:REPLICATION CLIENTmmm_agent@192.168.1.%:SUPER, REPLICATION CLIENT, PROCESS/etc/mysql-mmm/):
mmm_common.conf:所有節點共享,定義主機、角色、VIP 映射、認證信息。mmm_mon.conf:僅 Monitor,定義監控參數、ping 節點、自動上線閾值。mmm_agent.conf:各 DB 節點,指定 this dbX 對應 common 中的 host 段。/etc/default/mysql-mmm-agent 設置 ENABLED=1;啟動 mysql-mmm-monitor(Monitor)與 mysql-mmm-agent(各 DB)。mmm_control set_online db1 等,觀察 mmm_control show 狀態轉為 ONLINE 並分配 VIP。mmm_control show 顯示 Master1 變 HARD_OFFLINE,Writer VIP 漂移至 Master2,Slave 自動重新指向 Master2 復制。mmm_control move_role writer db1。部署第 6 台服務器運行 Amoeba(Java 開發的 MySQL 代理),配置 dbServers.xml、amoeba.xml 定義寫節點(Writer VIP)與讀節點池(Reader VIPs),啟動監聽 8066 端口。測試顯示讀請求在多個 Reader VIP 間輪詢負載均衡,寫請求路由至 Writer VIP。
MMM 提供了一套成熟的主主高可用腳本框架,通過虛擬 IP 漂移實現寫入單點與讀取負載均衡。但受限於異步復制延遲與腳本級故障檢測精度,極高併發寫入場景建議評估 MHA、Galera Cluster 或 InnoDB Cluster 等更強一致性方案。