MySQL Master-Master Replication Manager (MMM):一套用 Perl 編寫的腳本工具集,用於管理雙主/多主復制拓撲,提供虛擬 IP (VIP) 故障轉移、讀寫分離路由、狀態監控功能,解決標準主從/雙主架構中的單點故障 (SPOF) 問題。
名稱由來:作者戲稱 "When you eat something tasty, you say: Mmm..." (吃好東西發出的聲音)。
| 組件 | 角色 | 部署建議 |
|---|---|---|
| mmm_mond (Monitor Daemon) | 核心決策大腦:監控 MySQL 狀態、複製延遲、決定 VIP 漂移、發送控制指令。 | **獨立部署** 於管理節點 (至少 1 台,推薦 2 台高可用)。**不要**部署在 MySQL 節點上。 |
| mmm_agentd (Agent Daemon) | 運行在**每台 MySQL 服務器**上:接收 mond 指令 (掛載/卸載 VIP、設置 read_only、重啟複製)、回報本機狀態。 | 每台 MySQL (Master/Slave) 必裝。 |
| mmm_control | 命令行客戶端:人工干預 (手動切主、下線維護、查看狀態)。 | 管理節點/運維機安裝。 |
write_vip) 始終指向當前活躍 Master。Master 故障 -> 自動漂移到備選 Master。read_vip) 可配置輪詢指向多個 Slave。CHANGE MASTER TO、START/STOP SLAVE、SET GLOBAL read_only。ping、ssh 多重檢查。+----------------+ +----------------+
| Manager 1 | | Manager 2 | (mmm_mond 高可用,虛擬IP管理)
| (mmm_mond) | | (mmm_mond) |
+-------+--------+ +-------+--------+
| |
| Management Network |
v v
+-------+--------+ +-------+--------+ +-------+--------+
| Master 1 | <---> | Master 2 | <---> | Slave 1 |
| (Write VIP) | Async| (Candidate) | Async| (Read VIP) |
| mmm_agentd | | mmm_agentd | | mmm_agentd |
+----------------+ +----------------+ +----------------+
^ ^ ^
| Replication Network (私有網段) |
+-------------------------------------------------+
# 監控間隔
interval 10 # 每 10 秒檢查一次
timeout 5 # 連接超時
# 數據庫連接 (Agent 端配置 /etc/mmm/mmm_agent.conf)
db_user mmm_agent
db_password AgentPass123!
# 允許 mond 通過 SSH 重啟 mysqld (可選)
ssh_user mysql
ssh_port 22
# VIP 定義
ip 192.168.1.10
mode master
peer db2
vip_write 192.168.1.100 # 應用寫入入口
vip_read 192.168.1.101 # 讀入口 (可選)
ip 192.168.1.11
mode master
peer db1
vip_write 192.168.1.100
vip_read 192.168.1.101
ip 192.168.1.12
mode slave
vip_read 192.168.1.101
| 方案 | 狀態 | 特點 |
|---|---|---|
| MMM | 停止維護 (最後更新 2014 年) | Perl 腳本、依賴 SSH/VIP、無共識協議、分腦風險較大、不支援 GTID 複制管理。 |
| MHA (Master High Availability) | 社區維護緩慢 | 主流選擇多年,支援 GTID、自動故障轉移快、但需外部 VIP 管理 (keepalived/VRRPD)。 |
| Orchestrator | 活躍推薦 (GitHub/OpenARK) | 可視化拓撲、自動故障轉移、支援 GTID/偽 GTID、HTTP API、無 VIP 依賴 (配合 Proxy)。 |
| MySQL InnoDB Cluster / Group Replication | 官方原生方案 | Paxos 協議強一致、自動故障轉移、內建 Router (Proxy)、MySQL 8.0+ 生產就緒。 |
| ProxySQL + Orchestrator/Gtid | 主流架構 | ProxySQL 做讀寫分離/路由/熔斷,Orchestrator 做拓撲管理/故障轉移。 |
MMM 具有歷史意義,但**新項目嚴禁使用**。請直接採用 MySQL InnoDB Cluster (Group Replication) + MySQL Router 或 Orchestrator + ProxySQL 架構,獲得原生一致性協議保障、可視化運維、雲原生兼容性。