MMM (Master-Master Replication Manager for MySQL) 是一套基於 Perl 的雙主複製管理工具,支援虛擬 IP (VIP) 漂移、自動故障轉移與讀寫分離,是早期 MySQL 高可用方案的經典選擇。本文記錄一次完整的 MMM 叢集部署與調優過程,包含大量實戰踩坑經驗。
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%' IDENTIFIED BY 'mmm_monitor';
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'%' IDENTIFIED BY 'mmm_agent';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.88.49.%' IDENTIFIED BY 'repl';
注意:複製密碼不得超過 32 字元,否則會導致複製啟動失敗。
在 db2 上執行 CHANGE MASTER TO 指向 db1,並啟動 Slave 執行緒;同理在 db1 上指向 db2,形成雙主結構。
wget https://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz
tar -xvf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make && cmake
yum install -y perl-* libart_lgpl rrdtool rrdtool-perl
# 或透過 CPAN 安裝核心 Perl 模組
cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::Ping Proc::Daemon Time::HiRes Params::Validate Net::ARP
實戰教訓:若啟動 Agent/Monitor 報 Can't locate Proc/Daemon.pm 或 Net/ARP.pm,必須補裝對應 Perl 模組,否則進程無法啟動。
mmm_common.conf定義叢集拓撲、資料庫帳號、VIP 映射關係等,需 分發至所有節點(含監控端)。
mmm_agent.conf各 DB 節點修改 this db1 等標識,並加入 chkconfig --add mysql-mmm-agent 設為開機自啟。
mmm_mon.conf監控節點配置 ping_ips(含網關與所有 DB IP),啟用 auto_set_online 自動上線功能。
mysql-mmm-agentmysql-mmm-monitor| 錯誤現象 | 根因 | 解決方案 |
|---|---|---|
Can't locate Proc/Daemon.pm | 缺 Perl 模組 | cpan Proc::Daemon |
Can't locate Net/ARP.pm | VIP 漂移需 ARP 模組 | cpan Net::ARP 或 yum install libuuid* |
Device "eth1" does not exist | 配置介面名錯誤 | 檢查 cluster_interface 參數,改為實際網卡名(如 eth0) |
| Reader VIP 丟包 | ARP 衝突/網路不通 | 檢查 ping_ips、網關可達性、交換機配置 |
Monitor 卡住、mmm_control show 無回應 | peer 參數錯誤或 ping_ips 配置錯誤 | 核對雙主互為 peer、ping_ips 包含所有節點與網關 |
透過 mmm_control 工具觀察角色狀態變化:
mmm_control set_online db1,角色恢復mmm_control move_role writer db2 實現優雅切換所有切換過程中,監控日誌清晰記錄角色移除、分配、孤兒角色接管等細節,滿足生產級可觀測需求。
debug 1 觀察初期運行,穩定後關閉。auto_increment_offset/increment 避免主鍵衝突。