MHA介紹和基礎、原理、架構、工具介紹

一.MHA簡介
軟件簡介
MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就任於Facebook公司)開發,是一套優秀的做爲MySQL高可用性環境下故障切換和主從提高的高可用軟件。在MySQL故障切換過程當中, MHA能作到在10~30秒以內自動完成數據庫的故障切換操做 ,而且在進行故障切換的過程當中,MHA能在最大程度上保證數據的一致性,以達到真正意義上的高可用。
  MHA還提供在線主庫切換的功能,可以安全地切換當前運行的主庫到一個新的主庫中 (經過將從庫提高爲主庫),大概 0.5-2秒 內便可完成。
  該軟件由兩部分組成: MHA Manager(管理節點)和MHA Node(數據節點) 。MHA Manager能夠單獨部署在一臺獨立的機器上管理多個master-slave集羣,也能夠部署在一臺slave節點上。MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集羣中的master節點, 當master出現故障時,它能夠自動將最新數據的slave提高爲新的master,而後將全部其餘的slave從新指向新的master。 整個故障轉移過程對應用程序徹底透明。
MHA在生產環境的做用
  一主多從的環境下,MySQL的主從複製是異步或是半同步。
  Master發生故障的時候,有可能一部分(或者所有)的Slave未能獲取到最新的binlog,形成Slave之間的binlog轉發發生誤差。
以下圖所示,Master宕機以後,id=102的binlog未能被髮送到任何一個Slave上,id=101的binlog只有save2上有,slave3上未能收到id=100和id-101的binlog
若是想要正確恢復:
  • Master必須發出的ID=102的binlog
  • 還要消除各個Slave之間的差別性
MHA能夠全自動的處理以上這些
最佳方案
   在MHA自動故障切換過程當中,MHA試圖從宕機的主服務器上保存二進制日誌,最大程度的保證數據的不丟失,但這並不老是可行的。例如, 若是主服務器硬件故障或沒法經過ssh訪問,MHA無法保存二進制日誌,只進行故障轉移而丟失了最新的數據。使用MySQL 5.5的半同步複製,能夠大大下降數據丟失的風險。
  MHA能夠與半同步複製結合起來。若是隻有一個slave已經收到了最新的二進制日誌,MHA能夠將最新的二進制日誌應用於其餘全部的slave服務器上,所以能夠保證全部節點的數據一致性。
  目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另一臺充當從庫,由於至少須要三臺服務器,出於機器成本的考慮,淘寶也在該基礎上進行了改造,目前淘寶TMHA已經支持一主一從。
MHA優勢總結
1)Masterfailover and slave promotion can be done very quickly
自動故障轉移快
2)Mastercrash does not result in data inconsistency
主庫崩潰不存在數據一致性問題
3)Noneed to modify current MySQL settings (MHA works with regular MySQL)
不須要對當前mysql環境作重大修改
4)Noneed to increase lots of servers
不須要添加額外的服務器(僅一臺manager就可管理上百個replication)
5)Noperformance penalty
性能優秀,可工做在半同步複製和異步複製,當監控mysql狀態時,僅須要每隔N秒向master發送ping包(默認3秒),因此對性能無影響。你能夠理解爲MHA的性能和簡單的主從複製框架性能同樣。
6)Works with any storage engine
只要replication支持的存儲引擎,MHA都支持,不會侷限於innodb
二.工做流程
1)把宕機的master二進制日誌保存下來。
2)找到binlog位置點最新的slave。
3)在binlog位置點最新的slave上用relay log(差別日誌)修復其它slave。
4)將宕機的master上保存下來的二進制日誌恢復到含有最新位置點的slave上。
5)將含有最新位置點binlog所在的slave提高爲master。
6)將其它slave從新指向新提高的master,並開啓主從複製。
監控全部node節點 MHA功能說明:
二、自動故障切換(failover)
     前提是必須有三個節點存在,而且有兩個從庫
      (1)選主前提,按照配置文件的順序進行,可是若是此節點後主庫100M以上relay-log 就不會選
      (2)若是你設置了權重,總會切換帶此節點;通常在多地多中心的狀況下,通常會把權重設置在本地節點。
      (3)選擇s1爲新主
      (4)保存主庫binlog日誌
三、從新構建主從
      (1)將有問題的節點剔除MHA
          進行第一階段數據補償,S2缺失部分補全90
      (2)s1切換角色爲新主,將s2指向新主S1
            s2  change master to s1
      (3) 第二階段數據補償
            將保存過來的新主和原有主缺失部分的binlog,應用到新主。
      (4)虛擬IP漂移到新主,對應用透明無感知
      (5)通知管理員故障切換
三.MHA架構圖
1.manager能夠單獨裝在任意一臺機器上;
2.一個manager能夠管理多套mysql集羣;
3.建議不要將manager裝在主庫上(防止主庫斷電,斷網);
4.全部數據庫必須安裝node包;
5.manager的依賴有node
四.MHA工具介紹
MHA軟件由兩部分組成,Manager工具包和Node工具包,具體的說明以下:
masterha_check_ssh #檢查MHA的

ssh-key masterha_check_repl #檢查主從複製狀況 node

masterha_manger #啓動MHA mysql

masterha_check_status #檢測MHA的運行狀態sql

masterha_master_monitor #檢測master是否宕機 數據庫

masterha_master_switch #手動故障轉移安全

masterha_conf_host #手動添加server信息服務器

masterha_secondary_check #創建TCP鏈接從遠程服務器架構

masterha_stop #中止MHAapp

 

Node工具包主要包括如下幾個工具:

save_binary_logs #保存宕機的master的binlog apply_diff_relay_logs #識別relay log的差別對比 filter_mysqlbinlog #防止回滾事件,截取日誌 purge_relay_logs #清除中繼日誌relay_logs
相關文章
相關標籤/搜索