MHA (Master High Availability) 是由日本 DeNA 工程師矢野啟造開發、現任職 Facebook 的成熟 MySQL 高可用方案,實現30 秒內自動故障轉移、最大程度保證數據一致性、無需修改 MySQL 部署。本文系統解析 MHA 架構、工作原理、核心優勢、部署要點與對比選型。
| 組件 | 部署位置 | 核心職責 |
|---|---|---|
| MHA Manager | 獨立管理節點 (1-2 台) | 監控 Master 健康、協調故障轉移、提供 CLI 工具 |
| MHA Node | 所有 MySQL 節點 (Master/Slave) | 保存二進制日志、應用差異中繼日志、清理中繼日志 |
一個 Manager 可管理數十個 Master-Slave 集群,Node 輕量無侵入。
CHANGE MASTER TO MASTER_AUTO_POSITION=1 (GTID) 或位點方式啟動 Binlog總耗時:通常 10-30 秒,DeNA 實測 4 秒完成。
| 方案 | 架構 | RTO | 數據一致性 | 部署複雜度 | 硬件成本 | 適用場景 |
|---|---|---|---|---|---|---|
| MHA | Manager+Node | <30s | 強 (半同步+差異日志) | 低 | 低 | 傳統主從、中小規模、追求性價比 |
| Heartbeat+DRBD | 共享存儲雙機 | 1-2min | 強 (同步寫入) | 高 | 高 (雙機熱備) | 極高可用性要求、數據零丟失 |
| MySQL Cluster (NDB) | 分佈式共享無 | 毫秒級 | 強 (同步復制) | 極高 | 極高 | 電信級、強一致、高併發寫入 |
| PXC (Galera) | 多主同步 | 秒級 | 強 (認證同步) | 中 | 中 | 多寫入節點、讀寫分離、地理分佈 |
| Orchestrator | 拓撲管理+自動故障轉移 | <30s | 強 (GTID) | 中 | 低 | 大規模集群、可視化運維、遷移管理 |
yum install -y mha4mysql-node (所有 MySQL 機器)yum install -y mha4mysql-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
masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1.log 2>&1 &
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 獲取殘留 Binlogmaster_auto_position=1masterha_manager 進程、故障轉移事件、復制延遲MHA 以 輕量、快速、零侵入、強一致 成為 MySQL 高可用經典方案。核心創新:差異中繼日志補全 + 選主算法 (最新 Binlog 位置) + 並行恢復。雖社區逐漸向 Orchestrator 遷移,但 MHA 仍是現存大量 5.6/5.7 集群的最佳守護者。理解其原理、掌握部署調優、建立演練機制,是 DBA 核心硬技能。