首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 高可用 MMM 架構部署實戰:從安裝到故障排查全記錄

     編輯:MySQL 資料庫相關知識

MMM (Master-Master Replication Manager for MySQL) 是一套基於 Perl 的雙主複製管理工具,支援虛擬 IP (VIP) 漂移、自動故障轉移與讀寫分離,是早期 MySQL 高可用方案的經典選擇。本文記錄一次完整的 MMM 叢集部署與調優過程,包含大量實戰踩坑經驗。

一、環境規劃與前置準備

  • 資料庫節點:db1 (10.88.49.118)、db2 (10.88.49.119) 為雙主,db3 (10.88.49.122) 為從庫
  • 監控節點:monitor (10.88.49.123)
  • 虛擬 IP:Writer VIP (10.88.49.130)、Reader VIPs (10.88.49.131~135)
  • 網關:10.88.49.254(用於監控網路連通性)

二、MySQL 雙主複製建立

1. 建立複製帳號與權限

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 字元,否則會導致複製啟動失敗。

2. 資料同步與複製啟動

在 db2 上執行 CHANGE MASTER TO 指向 db1,並啟動 Slave 執行緒;同理在 db1 上指向 db2,形成雙主結構。

三、MMM 軟體安裝與依賴解決

1. 下載編譯安裝

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

2. 依賴套件安裝(關鍵)

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 模組,否則進程無法啟動。

四、配置檔案部署

1. 通用配置 mmm_common.conf

定義叢集拓撲、資料庫帳號、VIP 映射關係等,需 分發至所有節點(含監控端)。

2. Agent 配置 mmm_agent.conf

各 DB 節點修改 this db1 等標識,並加入 chkconfig --add mysql-mmm-agent 設為開機自啟。

3. Monitor 配置 mmm_mon.conf

監控節點配置 ping_ips(含網關與所有 DB IP),啟用 auto_set_online 自動上線功能。

五、服務啟動與常見報錯排查

1. 啟動順序

  1. 所有 DB 節點啟動 mysql-mmm-agent
  2. 監控節點啟動 mysql-mmm-monitor

2. 典型故障與解決

錯誤現象根因解決方案
Can't locate Proc/Daemon.pm缺 Perl 模組cpan Proc::Daemon
Can't locate Net/ARP.pmVIP 漂移需 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 工具觀察角色狀態變化:

  • 停止 db1 主庫:Writer VIP 自動漂移至 db2,db3 從庫自動切換主庫至 db2
  • 重啟 db1:需手動 mmm_control set_online db1,角色恢復
  • 切換 Writer 角色:mmm_control move_role writer db2 實現優雅切換
  • Slave 故障恢復:停止/啟動 db3,驗證 AWAITING_RECOVERY → ONLINE 流程

所有切換過程中,監控日誌清晰記錄角色移除、分配、孤兒角色接管等細節,滿足生產級可觀測需求。

七、總結與建議

  1. MMM 部署核心在於 網路互通、Perl 依賴完整、配置參數精準(特別是介面名、peer、ping_ips)。
  2. 生產環境建議啟用 debug 1 觀察初期運行,穩定後關閉。
  3. 雙主複製需嚴格控制 auto_increment_offset/increment 避免主鍵衝突。
  4. MMM 社區已不活躍,新專案建議評估 MHA、Orchestrator 或 MySQL InnoDB Cluster 等現代方案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved