首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL MMM 高可用架構實戰部署:原理、配置、故障切換演練與局限分析

     編輯:MySQL 綜合教學

前言

MMM (Master-Master Replication Manager) 是一款基於 Perl 的 MySQL 高可用管理工具,通過雙主異步複制 + 虛擬 IP (VIP) 漂移 實現寫入高可用。本文記錄完整部署流程、核心配置解析、故障切換實戰演練,並深度剖析其架構局限與演進方向。

架構角色與流量路徑

  • Writer VIP:唯一寫入入口,由 Monitor 管理,同一時刻僅掛載在一台 Master 上 (mode exclusive)
  • Reader VIP 池:讀負載均衡,多個 VIP 分散在 Backup/Slave 上 (mode balanced)
  • Master / Backup:雙主互為主備,異步複制,平時 Master 持有 Writer,Backup 作為 Reader
  • Slave:掛載在 Master/Backup 下,純讀擴展,故障時自動切換複制源
  • Monitor:心跳檢測 (ping + MySQL 連接 + 複制線程 + 延遲)、指揮 Agent 執行 VIP 漂移/複制切換/read_only 切換
  • Agent (運行於每個 DB 節點):接收 Monitor 指令,執行 CHANGE MASTER TO、修改 read_only、掛載/卸載 VIP

部署前提

  • OS:CentOS 6/7 (示例 IP 段 192.168.137.0/24)
  • MySQL:已配置雙主複制 (repl 用戶) 及 Slave 複制
  • 網絡:節點間互通,Monitor 能訪問所有 DB 節點
  • 關閉防火牆/SELinux 或放行相關端口

步驟 1:統一 /etc/hosts

192.168.137.10 master
192.168.137.20 backup
192.168.137.30 slave
192.168.137.40 monitor

步驟 2:創建 MMM 專用賬號 (僅 DB 節點)

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 用戶為雙主複制已創建賬號。

步驟 3:安裝軟件包 (EPEL 源)

# 所有節點安裝 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/
  • PID:/var/run/mysql-mmm/

步驟 4:核心配置文件

4.1 通用配置 mmm_common.conf (所有節點同份)

active_master_role writer


cluster_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_only
  • mode exclusive:Writer VIP 同一時刻僅一台持有
  • mode balanced:Reader VIP 輪詢分發,IP 數可大於主機數
  • peer:雙主互指,故障時 Agent 操作對端

4.2 Agent 配置 mmm_agent.conf (每 DB 節點不同 this)

# master 節點
this master

# backup 節點
this backup

# slave 節點
this slave

4.3 Monitor 配置 mmm_mon.conf (僅 Monitor 節點)

include mmm_common.conf


ip 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)。

步驟 5:啟動服務

# DB 節點
chkconfig mysql-mmm-agent on
service mysql-mmm-agent start

# Monitor 節點
chkconfig mysql-mmm-monitor on
service mysql-mmm-monitor start

步驟 6:驗證與運維命令 (mmm_control)

6.1 查看集群狀態

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)

6.2 檢查項詳情

mmm_control checks all
# 檢查項:ping、mysql 連接、複制 IO/SQL 線程、複制延遲

6.3 手動下線/上線節點

mmm_control set_offline backup
mmm_control set_online backup

6.4 強制切換 Writer (演練/故障轉移)

mmm_control move_role writer backup

切換過程:

  1. Monitor 指揮原 Master Agent 開啟 read_only、卸載 Writer VIP
  2. Monitor 指揮 Backup Agent 關閉 read_only、掛載 Writer VIP
  3. Monitor 指揮 Slave Agent 執行 CHANGE MASTER TO MASTER_HOST='backup'
  4. 新狀態:Backup 成為 Writer,Slave 複制 Backup

故障切換實戰演練記錄

切換前:Slave 複制 Master

[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 自動切換複制到 Backup

[slave]# mysql -e 'SHOW SLAVE STATUS\G'
Master_Host: 192.168.137.20  # backup

進階配置:禁用自動 Writer 切換 (避免延遲誤切)

若業務對數據一致性極度敏感,不希望主從延遲觸發 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

日志分析與排障

  • Agent 日志:/var/log/mysql-mmm/mmm_agentd.log
  • Monitor 日志:/var/log/mysql-mmm/mmm_mond.log
  • 關鍵字:ERROR、FAIL、CHANGE MASTER、VIP、read_only

總結

  1. MMM 通過 Monitor + Agent + VIP 實現寫入高可用,部署相對輕量,適合中小規模、可容忍秒級數據風險的業務。
  2. 核心配置在 mmm_common.conf,角色定義 (writer/reader) 決定 VIP 行為,peer 決定雙主互備關係。
  3. mmm_control 是日常運維入口,show/checks/move_role 需熟練掌握。
  4. 生產必做:定期演練切換、監控 mmm_control checks、VIP 可達性告警、Binlog 同步延遲告警。
  5. 長期規劃:向 MGR (MySQL Group Replication) / InnoDB Cluster 或 Orchestrator + ProxySQL 演進,獲得強一致性、自動故障轉移、無單點架構。

參考資源:

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved