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

MySQL 高可用集群 MMM 架構部署實戰:主主同步、VIP 漂移、監控代理與自動故障切換

     編輯:MySQL 綜合教學

MySQL 高可用集群 MMM 架構部署實戰

MMM (Master-Master replication manager for MySQL) 是基於 Perl 的輕量級高可用方案,通過監控端 + 代理端架構,實現雙主同步下的單寫入 VIP 漂移、多從庫讀取 VIP 負載均衡、自動故障偵測與切換。本文記錄完整部署流程、配置細節、常見坑點與生產級優化。

一、MMM 核心架構組件

組件進程部署節點職責
監控端mmm_mond專用管理節點決策大腦:健康檢查、角色裁決、VIP 管理、故障切換編排
代理端mmm_agentd每個 MySQL 節點執行器:探針採集、執行遠端指令(設 read_only、切換 VIP、備份鎖定)
控制工具mmm_control管理節點CLI:查看集群狀態、手動切換、上下線節點

二、復制拓撲基礎:MMM 要求的主主同步

MMM 基於 Active-Passive 主主同步:同一時間僅一個節點 read_only=0 (Writer),另一個 read_only=1 (Standby)。

關鍵復制參數 (雙主 my.cnf 共用)

[mysqld]
server-id = 1 (Node1), 2 (Node2)  # 唯一
log-bin = mysql-bin
binlog-format = ROW
log-slave-updates = 1
gtid-mode = ON
enforce-gtid-consistency = ON
sync_binlog = 1
auto_increment_increment = 2
auto_increment_offset = 1 (Node1), 2 (Node2)  # 奇偶分離
replicate-do-db = business_db
replicate-ignore-db = mysql,information_schema,performance_schema

建立雙向複制

# Node1 → Node2
CHANGE MASTER TO MASTER_HOST='192.168.1.26', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1;
START SLAVE;

# Node2 → Node1
CHANGE MASTER TO MASTER_HOST='192.168.1.25', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1;
START SLAVE;

# 驗證
SHOW SLAVE STATUS\G  # 兩邊 IO/SQL Running=Yes

三、節點規劃與 VIP 設計

角色主機名IPVIP 分配
Monitormonitor192.168.1.29無
Master1 (Writer)db1192.168.1.25Writer VIP: 192.168.1.31
Master2 (Standby)db2192.168.1.26Writer VIP 備用
Slave1db3192.168.1.27Reader VIP: 192.168.1.32
Slave2db4192.168.1.28Reader VIP: 192.168.1.33

四、資料庫授權(所有 MySQL 節點執行)

-- 複制帳號
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.%' IDENTIFIED BY 'replication';

-- MMM 監控帳號
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.%' IDENTIFIED BY 'monitor_pass';

-- MMM 代理帳號(需 SUPER 執行 SET GLOBAL read_only 等)
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%' IDENTIFIED BY 'agent_pass';

-- 可選:備份工具帳號
GRANT SELECT, LOCK TABLES, RELOAD ON *.* TO 'mmm_tools'@'192.168.1.%' IDENTIFIED BY 'tools_pass';

五、核心配置檔案

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 replication
    replication_password replication
    agent_user mmm_agent
    agent_password agent



    ip 192.168.1.25
    mode master
    peer db2



    ip 192.168.1.26
    mode master
    peer db1



    ip 192.168.1.27
    mode slave



    ip 192.168.1.28
    mode slave



    hosts db1, db2
    ips 192.168.1.31
    mode exclusive      # 同一時間僅一個 host 持有



    hosts db3, db4
    ips 192.168.1.32, 192.168.1.33
    mode balanced       # 輪詢/負載均衡分發

2. 代理端配置 mmm_agent.conf (各 DB 節點修改 this)

include mmm_common.conf
this db1   # db2 改為 this db2,db3 改為 this db3...

3. 監控端配置 mmm_mon.conf

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.1.25,192.168.1.26,192.168.1.27,192.168.1.28
    auto_set_online 10    # 故障恢復 10 秒後自動上線



    monitor_user mmm_monitor
    monitor_password monitor


debug 0

六、安裝與啟動

# CentOS 7+ 安裝 EPEL 並安裝 MMM
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y mysql-mmm-monitor  # Monitor 節點
yum install -y mysql-mmm-agent    # 所有 DB 節點

# 啟動代理端 (所有 DB 節點)
systemctl enable mysql-mmm-agent
systemctl start mysql-mmm-agent

# 啟動監控端 (Monitor 節點)
systemctl enable mysql-mmm-monitor
systemctl start mysql-mmm-monitor

# 查看集群狀態
mmm_control show

七、mmm_control 常用命令

命令作用
mmm_control show顯示集群狀態:角色、VIP、狀態、延遲
mmm_control set_online db1手動上線節點
mmm_control set_offline db1手動下線節點(維護時)
mmm_control move_role writer db2手動將 Writer 角色移交 db2
mmm_control checks顯示健康檢查詳情

八、常見故障與解決

故障現象原因解決
Slave_IO_Running=No, Error 1236Master binlog 已清理,Slave 找不到位點重新同步:Master 重新備份 → Slave 重建
Slave_SQL_Running=No, Can't create databaseSlave 已存在同名庫,replicate-do-db 衝突Slave 先刪除該庫,或調整 replicate-ignore-db
授權失敗 Access denied密碼錯誤、主機不匹配、權限不足檢查 mmm_agent/mmm_monitor 授權,確保 @'192.168.1.%'
VIP 未漂移mmm_mond 未運行、網絡不通、健康檢查失敗systemctl status mysql-mmm-mond、ping_ips 連通性、check_mysql.sh 腳本
雙主同時寫入 (Split-brain)監控端單點故障、網絡分區引入 Keepalived 雙機熱備監控端、或升級 Pacemaker/Corosync

九、MMM 監控端單點風險與高可用改進

痛點:mmm_mond 掛掉 → 整個集群失去決策大腦,VIP 固化、故障不切換。

改進方案:

  1. Keepalived 托管 Monitor VIP:兩台 Monitor 節點跑 Keepalived,VIP 綁定在 Active Monitor,故障秒級漂移。
  2. Pacemaker + Corosync:企業級集群管理器,資源代理管理 MMM 進程,支援資源殷勤、約束、STONITH 隔離。
  3. 外部監控介入:Zabbix/Prometheus 監控 mmm_control show 輸出,異常觸發告警 + 自動化腳本介入。

十、生產級優化建議

  1. 健康檢查腳本增強:check_mysql.sh 增加同步延遲檢查(Seconds_Behind_Master < 30)、磁碟空間檢查、InnoDB 狀態檢查。
  2. 角色切換通知:notify_master.sh 發送鉤子至 CMDB、DNS、應用配置中心,實現零感知切換。
  3. 備份整合:mmm_backup 工具配合 mmm_tools 帳號,從 Standby/Slave 進行邏輯/物理備份,不影響 Writer。
  4. 版本鎖定:生產環境鎖定 MMM 版本(如 mysql-mmm-2.2.1),避免 yum update 導致配置不兼容。
  5. 遷移建議:新架構建議直接採用 Orchestrator + GTID + Raft/ProxySQL 或 MHA/InnoDB Cluster,MMM 社區活躍度已低,僅建議存量系統維護使用。

MMM 作為早期 MySQL 高可用方案的代表,以「輕量、易懂、基於標準復制」贏得大量中小型系統青睞。但在雲原生、容器化、自動化運維的今天,其 Perl 單線程監控、單點決策、缺乏共識協議等短板日益凸顯。理解 MMM 架構原理,有助於理解現代高可用方案(Orchestrator、MHA、InnoDB Cluster、ProxySQL)的演進邏輯與設計權衡。

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