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

MySQL 高可用方案 MHA 原理、架構、優勢與落地實踐:Master HA 自動故障轉移

     編輯:MySQL 綜合教學

MySQL 高可用方案 MHA 原理、架構、優勢與落地實踐:Master HA 自動故障轉移

MHA (Master High Availability) 是由日本 DeNA 工程師矢野啟造開發、現任職 Facebook 的成熟 MySQL 高可用方案,實現30 秒內自動故障轉移、最大程度保證數據一致性、無需修改 MySQL 部署。本文系統解析 MHA 架構、工作原理、核心優勢、部署要點與對比選型。

一、MHA 架構組件

組件部署位置核心職責
MHA Manager獨立管理節點 (1-2 台)監控 Master 健康、協調故障轉移、提供 CLI 工具
MHA Node所有 MySQL 節點 (Master/Slave)保存二進制日志、應用差異中繼日志、清理中繼日志

一個 Manager 可管理數十個 Master-Slave 集群,Node 輕量無侵入。

二、故障轉移工作流程

  1. 檢測故障:Manager 定期 (默認 3 秒) SSH Ping Master,連續 3 次失敗判定故障 (≈9-10 秒)
  2. 避免裂腦:可選關閉 Master 電源 (IPMI/PDU) 或封鎖網絡 (7-10 秒)
  3. 選主:對比所有 Slave I/O 線程讀取 Master Binlog 位置 (Relay_Log_Pos),選擇最接近 Master (Relay_Log_Pos 最大) 的 Slave 為 New Master
  4. 補全日志:Manager 嘗試 SSH 連接故障 Master 獲取殘留 Binlog (非硬件故障時),最大程度保數據
  5. 差異同步:在 New Master 上生成差異中繼日志,其他 Slave 應用差異追平
  6. 提升主庫:New Master 執行 CHANGE MASTER TO MASTER_AUTO_POSITION=1 (GTID) 或位點方式啟動 Binlog
  7. 重建拓撲:其他 Slave 指向 New Master,啟動復制
  8. 並行恢復:Slave 並行應用差異日志,不阻塞 New Master 對外服務

總耗時:通常 10-30 秒,DeNA 實測 4 秒完成。

三、MHA 核心優勢 (官方總結)

  1. 故障轉移極快:秒級檢測、秒級切換、並行恢復,RTO < 30s
  2. 數據一致性強:差異中繼日志補全 + GTID/半同步復制配合,接近零數據丟失
  3. 零侵入部署:不修改 MySQL 配置、不重啟 MySQL、兼容 5.0+/5.1/5.5/5.6/5.7/8.0 原生復制
  4. 無額外硬件:Node 部署在現有 MySQL 機器,Manager 僅需 1-2 台廉價機器,可複用 Slave
  5. 零性能損耗:監控僅 SSH Ping,無業務查詢干擾,性能同原生復制
  6. 引擎無關:InnoDB/MyISAM/TokuDB/MyRocks 任意引擎均支持
  7. 平滑升級:替換 Manager 二進制、重啟進程即可,無需停機

四、對比主流高可用方案

方案架構RTO數據一致性部署複雜度硬件成本適用場景
MHAManager+Node<30s強 (半同步+差異日志)低低傳統主從、中小規模、追求性價比
Heartbeat+DRBD共享存儲雙機1-2min強 (同步寫入)高高 (雙機熱備)極高可用性要求、數據零丟失
MySQL Cluster (NDB)分佈式共享無毫秒級強 (同步復制)極高極高電信級、強一致、高併發寫入
PXC (Galera)多主同步秒級強 (認證同步)中中多寫入節點、讀寫分離、地理分佈
Orchestrator拓撲管理+自動故障轉移<30s強 (GTID)中低大規模集群、可視化運維、遷移管理

五、部署關鍵步驟

  1. 環境準備:所有節點互信 SSH、同步時間 (ntp)、關閉防火牆/SELinux
  2. 安裝 Node:yum install -y mha4mysql-node (所有 MySQL 機器)
  3. 安裝 Manager:yum install -y mha4mysql-manager (管理機)
  4. 配置 Manager /etc/masterha/app1.cnf:
    [server default]
    user=root
    password=xxx
    ssh_user=root
    repl_user=repl
    repl_password=xxx
    ping_interval=3
    
    [server1]
    hostname=192.168.1.10
    port=3306
    candidate_master=1
    
    [server2]
    hostname=192.168.1.11
    port=3306
    candidate_master=1
  5. 啟動監控:
    masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1.log 2>&1 &
  6. 驗證:masterha_check_ssh --conf=...、masterha_check_repl --conf=...、masterha_check_status --conf=...

六、生產落地建議

  • 必開半同步復制:rpl_semi_sync_master=ON、rpl_semi_sync_slave=ON,Manager 配置 master_binlog_dir 獲取殘留 Binlog
  • GTID 模式優先:簡化切換邏輯,master_auto_position=1
  • Manager 高可用:部署 2 台 Manager + VIP 漂移 (Keepalived) 或容器化部署
  • 監控告警:對接 Prometheus/Grafana,監控 masterha_manager 進程、故障轉移事件、復制延遲
  • 定期演練:月度故障轉移演練,驗證 RTO、數據完整性、應用重連邏輯
  • 遷移路徑:新架構建議直接上 Orchestrator + GTID + 半同步,MHA 維護模式,社區活躍度下降

七、總結

MHA 以 輕量、快速、零侵入、強一致 成為 MySQL 高可用經典方案。核心創新:差異中繼日志補全 + 選主算法 (最新 Binlog 位置) + 並行恢復。雖社區逐漸向 Orchestrator 遷移,但 MHA 仍是現存大量 5.6/5.7 集群的最佳守護者。理解其原理、掌握部署調優、建立演練機制,是 DBA 核心硬技能。

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