MySQL--MHA原理

##==============================================================##
MHA(Master High Availability)是一種MySQL高可用解決方案,由日本DeNA公司開發,主要用於在故障切換和主從提高時進行快速切換,並最大程度保證數據一致性。
MHA主要由兩部分組成:
一、MHA Manager(管理節點),管理節點部署在羣集以外,主要用於按期監測羣集中的主節點,並在主從切換時負責管理調度切換流程。
二、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知識點:
一、使用SHOW SLAVE STATUS獲取各從庫的複製進度,肯定擁有主庫Binlog最全的從庫
    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位置


二、在從庫每一個Relay-log的頭部,記錄主庫和從庫的版本信息,還記錄該relay-log存放的主庫binlog開始位置
 

二、從庫的Relay-log中每一個binlog事件都包含該事件在主庫上的位置信息,根據兩個主庫binlog位置點從relay-log中能夠得到兩個從庫的差別日誌。每一個binlog事務老是以BEGIN爲開始標誌,以COMMI結束,若是從庫未獲取到主庫完整的BINLOG事務,那麼該事務不會被從庫應用,以保障數據一致性。
 

三、當複製主庫實例宕機時,若是主庫服務器仍可使用SSH訪問,可使用mysqlbinlog獲取到主庫最後的BINLOG。

四、使用SELECT MASTER_POS_WAIT(master_log_file,read_master_log_pos)來等待從庫應用主庫BINLOG到指定位置。

五、MHA會默認關閉RELAYLOG的清理,若是要清理RALAYLOG,可使用下面命令:
SET GLOBAL relay_log_purge=1;
FLUSH LOGS;
SET GLOBAL relay_log_purge=0;


##==============================================================##
MHA工做原理:
 

##==============================================================##
MHA主要特性:
一、MHA切換不依賴實例使用存儲引擎和BINLOG格式;
二、MHA不會增長MySQL服務器性能開銷,除MHA管理節點外無需增長額外服務器;
三、在MySQL服務器上部署MHA數據節點不會影響當前實例運行;
四、MHA實現自動故障切換,也能夠手動觸發在線切換;
五、MHA能夠實現秒級的故障切換;
六、MHA能夠將任意slave提高master,也能夠在切換時指定master候選節點;
七、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支持和限制:
一、只支持BINLOG V4版本,要求MySQL 5.0或更高版本。
二、候選master節點必須開啓log-bin參數,若是全部從節點都爲開啓,則不進行故障轉移。
三、在MHA 0.52版本前不支持多master模式
四、MHA默認不支持多級主從複製,經過修改配置文件和設置multi_tier_slave參數
##==============================================================##mysql

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/
git

##==============================================================##github

相關文章
相關標籤/搜索