一:MHA簡介
核心功能
二:MHA工作原理
三:MHA組件
四:MHA 架構與工具
MHA架構
Manager關鍵工具
Node工具
五:工作原理與流程
1: 故障檢測
2:? 故障切換(Failover)
3 : 切換模式
六:與其他高可用方案對比
七:實際應用場景
八: 總結
?
一:MHA簡介
MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,在MySQL故障切換過程中,MHA能做到在0~30秒之內自動完成數據庫的故障切換操作,并且在進行故障切換的過程中,MHA能在較大程度上保證主從數據庫數據的一致性,以達到真正意義上的高可用。 ?
核心功能
-
自動故障檢測與切換:主庫故障時,自動選舉最優從庫(Slave)晉升為新主庫。
-
數據一致性保障:通過應用未同步的二進制日志(Binlog)補全數據差異。
-
手動切換支持:支持人工觸發主從切換(如維護場景)。
-
多節點管理:支持管理多個主從復制集群。
二:MHA工作原理
-
當master出現故障時,通過對比slave之間I/O線程讀取master上binlog的位置,選取最接近的slave做為最新的slave(latest slave)。
-
其它的slave通過與latest slave對比生成差異中繼日志,并應用。
-
在latest slave上應用從master保存的binlog,同時將latest slave提升為master。
-
最后在其它slave上應用相應的差異中繼日志并開始從新的master開始復制.
三:MHA組件
-
MHA Manager(管理節點)
MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集群,也可以部署在一臺slave節點上。比如masterha_manager工具實現自動監控MySQL Master和實現master故障切換,其它工具手動實現master故障切換、在線mater轉移、連接檢查等等。一個Manager可以管理多 個master-slave集群
-
MHA Node(數據節點)
MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集群中的master節點,當master出現故障時,它可以自動將數據的slave提升為新的master,然后將所有其他的slave重新指向新的master。
四:MHA 架構與工具
MHA架構
-
Manager節點:核心控制節點,負責監控主庫狀態、協調故障切換。
-
Master節點:當前主庫,負責處理寫請求。
-
Slave節點:從庫,復制主庫數據,故障切換時可能晉升為新主庫。
-
VIP(虛擬IP):可選組件,用于對外提供透明的訪問入口。
Manager關鍵工具
工具 | 說明 |
---|---|
masterha_check_ssh | 檢查節點間SSH免密登錄配置 |
masterha_check_repl | 驗證主從復制配置是否正確 |
masterha_manager | 啟動MHA,主監控進程,持續檢查主庫健康狀態 |
masterha_check_status | 檢測當前MHA運行狀態 |
masterha_master_monitor | 監測master是否宕機 |
masterha_master_switch | 控制故障轉移(自動或手動) |
masterha_conf_host | 添加或刪除配置的server信息 |
Node工具
工具 | 說明 |
---|---|
save_binary_logs | 保存和復制master的二進制日志 |
apply_diff_relay_logs | 識別差異的中繼日志事件并應用于其它slave |
filter_mysqlbinlog | 去除不必要的ROLLBACK事件(MHA已不再使用這個工具) |
purge_relay_logs | 清除中繼日志(不會阻塞SQL線程) |
五:工作原理與流程
1: 故障檢測
-
Manager節點 定期通過
ping
或執行SQL命令(如SELECT 1
)檢測主庫存活狀態。 -
若主庫連續無響應,觸發 故障判定。
2:? 故障切換(Failover)
-
選舉新主庫:
-
選擇數據最接近原主庫的從庫(通過對比
SHOW SLAVE STATUS
中的Exec_Master_Log_Pos
)。 -
優先選擇已開啟
log_slave_updates
的從庫(確保其Binlog完整)。
-
-
數據補全:
-
從原主庫服務器(若可訪問)或存活的從庫獲取未同步的Binlog。
-
將缺失的Binlog事件應用到新主庫,確保數據一致性。
-
-
切換拓撲:
-
將其他從庫指向新主庫,重建復制關系。
-
更新應用連接的VIP或配置,指向新主庫。
-
3 : 切換模式
-
自動切換(Automatic Failover):主庫不可用時自動觸發。
-
手動切換(Manual Switchover):人工干預,常用于維護場景。
六:與其他高可用方案對比
方案 | MHA | Galera Cluster | InnoDB Cluster |
---|---|---|---|
架構 | 主從復制+自動切換 | 多主同步復制 | 基于Group Replication |
數據一致性 | 最終一致性 | 強一致性 | 強一致性 |
復雜度 | 低 | 高 | 中 |
適用場景 | 讀寫分離,主庫故障切換 | 多活寫入,低延遲 | 云原生集成,自動化管理 |
七:實際應用場景
-
電商大促:主庫突發故障時,快速切換保障訂單交易。
-
金融系統:通過Binlog補全確保賬戶余額一致性。
-
物聯網日志存儲:讀寫分離架構下主庫宕機不影響數據寫入。
八: 總結
MHA 是MySQL主從架構下簡單高效的高可用解決方案,尤其適合對數據一致性要求較高且運維資源有限的場景。盡管其功能不如Galera或InnoDB Cluster全面,但在傳統主從復制架構中仍具有不可替代的價值。實際使用中需結合監控工具(如Prometheus)和告警系統,形成完整的高可用保障體系。