MHA工作組件
MHA(Master High Availability)是一種MySQL高可用解決方案,由日本DeNA公司開發,主要用於在故障切換和主從提升時進行快速切換,並最大程度保證數據一致性。
MHA主要由兩部分組成:
1、MHA Manager(管理節點),管理節點部署在群集之外,主要用於定期監測群集中的主節點,並在主從切換時負責管理調度切換流程。
2、MHA Node(數據節點),數據節點部署在每個群集節點上,負責在主從切換時對比和應用差異日志。
管理節點主要包含以下工具:
masterha_check_ssh 檢查MHA的SSH配置狀況
masterha_check_repl 檢查MySQL復制狀況
masterha_manger 啟動MHA
masterha_check_status 檢測當前MHA運行狀態
masterha_master_monitor 檢測master是否宕機
masterha_master_switch 控制故障轉移(自動或者手動)
masterha_conf_host 添加或刪除配置的server信息
數據節點主要包含以下工具:
save_binary_logs 保存和復制master的二進制日志
apply_diff_relay_logs 識別差異的中繼日志事件並將其差異的事件應用於其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用這個工具)
purge_relay_logs 清除中繼日志(不會阻塞SQL線程)
MHA工作原理

對於基於BINLOG位點同步的復制,使用SHOW SLAVE STATUS獲取復制信息:
A) Master_Log_File+Read_Master_Log_Pos確定從庫讀取到主庫Binlog位置 B) Relay_Log_File+Relay_Log_Pos確定從庫存放主庫Binlog位置 C) Relay_Master_Log_File+Exec_Master_Log_Pos確定從庫執行主庫Binlog位置
對於基於GTID同步的復制,使用SHOW SLAVE STATUS獲取復制信息:
A) Retrieved_Gtid_Set確定從庫讀取到主庫的BINLOG范圍
B) Executed_Gtid_Set確定從庫執行到主庫的BINLOG范圍
MHA主要特性
1、MHA切換不依賴實例使用存儲引擎和BINLOG格式; 2、MHA不會增加MySQL服務器性能開銷,除MHA管理節點外無需增加額外服務器; 3、在MySQL服務器上部署MHA數據節點不會影響當前實例運行; 4、MHA實現自動故障切換,也可以手動觸發在線切換; 5、MHA可以實現秒級的故障切換; 6、MHA可以將任意slave提升master,也可以在切換時指定master候選節點; 7、MHA提供擴展接口,允許在MHA切換過程中的特定時間點執行用戶自定義腳本。
MHA可擴展性
A)seconary_check_script
當檢測到master節點連接失敗時調用,從多個網絡路徑判斷master是否發生宕機。
B)shutdown_script
在故障轉移前調用,可以通過SSH登錄到master節點進行數據庫關閉和服務器關機等操作。
C)master_ip_failover_script
在故障轉移前和轉移到新master節點后調用,用於切換群集使用的VIP或域名或其他操作。
D)report_script
在故障切換完成后被調用,用於通知故障切換的執行結果。
MHA支持與限制
1、只支持BINLOG V4版本,要求MySQL 5.0或更高版本。 2、候選master節點必須開啟log-bin參數,如果所有從節點都為開啟,則不進行故障轉移。 3、在MHA 0.52版本前不支持多master模式 4、MHA默認不支持多級主從復制,通過修改配置文件和設置multi_tier_slave參數
參考鏈接
MHA原理:https://code.google.com/p/mysql-master-ha/wiki/HowMHAWorks MHA原理PPT:http://www.slideshare.net/matsunobu/automated-master-failover MHA安裝包:https://github.com/linyue515/mysql-master-ha/
