MMM (Master-Master Replication Manager) 是一款基於 Perl 的 MySQL 高可用管理工具,通過雙主異步複制 + 虛擬 IP (VIP) 漂移 實現寫入高可用。本文記錄完整部署流程、核心配置解析、故障切換實戰演練,並深度剖析其架構局限與演進方向。
mode exclusive)mode balanced)CHANGE MASTER TO、修改 read_only、掛載/卸載 VIP192.168.137.10 master 192.168.137.20 backup 192.168.137.30 slave 192.168.137.40 monitor
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDENTIFIED BY 'mmm_monitor'; GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.137.%' IDENTIFIED BY 'mmm_agent'; FLUSH PRIVILEGES;
repl 用戶為雙主複制已創建賬號。
# 所有節點安裝 epel-release rpm -ivh https://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # Monitor 節點 yum -y install mysql-mmm-monitor mysql-mmm-agent # DB 節點 (master/backup/slave) yum -y install mysql-mmm-agent
關鍵路徑:
/etc/mysql-mmm//usr/libexec/mysql-mmm//var/log/mysql-mmm//var/run/mysql-mmm/active_master_role writercluster_interface eth0 pid_path /var/run/mysql-mmm/mmm_agentd.pid bin_path /usr/libexec/mysql-mmm/ replication_user repl replication_password repl agent_user mmm_agent agent_password mmm_agent ip 192.168.137.10 mode master peer backup ip 192.168.137.20 mode master peer master ip 192.168.137.30 mode slave hosts master, backup ips 192.168.137.100 mode exclusive hosts backup, slave ips 192.168.137.120, 192.168.137.130, 192.168.137.140 mode balanced
關鍵點:
active_master_role writer:所有 DB 啟動 read_only=1,Agent 自動為 Writer 關閉 read_onlymode exclusive:Writer VIP 同一時刻僅一台持有mode balanced:Reader VIP 輪詢分發,IP 數可大於主機數peer:雙主互指,故障時 Agent 操作對端this)# master 節點 this master # backup 節點 this backup # slave 節點 this slave
include mmm_common.confip 127.0.0.1 pid_path /var/run/mysql-mmm/mmm_mond.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status ping_ips 192.168.137.10, 192.168.137.20, 192.168.137.30 auto_set_online 0 debug 0 monitor_user mmm_monitor monitor_password mmm_monitor
auto_set_online 0:故障恢復後立即上線 (默認 60s)。
# DB 節點 chkconfig mysql-mmm-agent on service mysql-mmm-agent start # Monitor 節點 chkconfig mysql-mmm-monitor on service mysql-mmm-monitor start
mmm_control show # 輸出示例 backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
mmm_control checks all # 檢查項:ping、mysql 連接、複制 IO/SQL 線程、複制延遲
mmm_control set_offline backup mmm_control set_online backup
mmm_control move_role writer backup
切換過程:
read_only、卸載 Writer VIPread_only、掛載 Writer VIPCHANGE MASTER TO MASTER_HOST='backup'[slave]# mysql -e 'SHOW SLAVE STATUS\G' Master_Host: 192.168.137.10 # master
[monitor]# mmm_control move_role writer backup OK: Role 'writer' has been moved from 'master' to 'backup'.
[slave]# mysql -e 'SHOW SLAVE STATUS\G' Master_Host: 192.168.137.20 # backup
若業務對數據一致性極度敏感,不希望主從延遲觸發 Writer 漂移,修改 mmm_common.conf:
hosts master # 移除 backup ips 192.168.137.100 mode exclusive
效果:Master 故障時 Writer VIP 無人持有,集群變為唯讀模式,需人工介入決策,避免數據分叉。
| 局限 | 影響 | 緩解/演進方向 |
|---|---|---|
| 異步複制下切換可能丟數據 | 主從延遲時,新 Master 缺少舊 Master 未同步事務 | 半同步複制 (rpl_semi_sync) + MMM;或遷移至 MGR/InnoDB Cluster |
| Monitor 單點故障 | Monitor 掛掉不影響現有 VIP,但無法處理新故障 | 雙 Monitor 主備 (需腳本協調);或用 Orchestrator + ProxySQL |
| 非搶佔模式 | 故障恢復後原 Master 不自動搶回 Writer,需人工干預 | 符合「穩定優先」原則;若需自動回切,需外部編排 |
| 不支持 GTID 自動定位 | 切換依賴文件/位置,GTID 模式下需手動處理 | 升級工具鏈支援 GTID |
| Perl 依賴、社區維護緩慢 | 新版 MySQL 兼容性風險 | 建議新架構選型:MGR (MySQL Group Replication) + ProxySQL / Router |
/var/log/mysql-mmm/mmm_agentd.log/var/log/mysql-mmm/mmm_mond.logERROR、FAIL、CHANGE MASTER、VIP、read_onlymmm_common.conf,角色定義 (writer/reader) 決定 VIP 行為,peer 決定雙主互備關係。mmm_control 是日常運維入口,show/checks/move_role 需熟練掌握。mmm_control checks、VIP 可達性告警、Binlog 同步延遲告警。參考資源:
/usr/share/doc/mysql-mmm-*/