MHA介紹
? MHA(Master High Avalilability)MySQL高可用性環(huán)境下故障切換和主從提升的高可用軟件.在MySQL故障切換過程中,MHA能做到在10~30秒之內(nèi)自動完成數(shù)據(jù)庫的故障切換操作,并且在進(jìn)行故障切換的過程中,MHA能在最大程度上保證數(shù)據(jù)的一致性,以達(dá)到真正意義上的高可用。
? MHA還提供在線主庫切換的功能,能夠安全地切換當(dāng)前運(yùn)行的主庫到一個新的主庫中(將主庫提供為主庫),大概0.5-2s內(nèi)完成。
? MHA由兩部分組成:,MHA Manager可以單獨部署在一臺獨立的機(jī)器上管理多個master-slave集群,也可以部署在一臺slave節(jié)點上。MHA Node運(yùn)行在每臺MySQL服務(wù)器上,MHA Manager會定時探測集群中的master節(jié)點,當(dāng)master出現(xiàn)故障時,它可以自動將最新數(shù)據(jù)的slave提升為新的master,然后將所有其他的slave重新指向新的master。整個故障轉(zhuǎn)移過程對應(yīng)用程序完全透明。
MHA 優(yōu)點
- 自動故障轉(zhuǎn)移快
- 主庫崩潰不存在數(shù)據(jù)一致性問題
- 不需要對當(dāng)前mysql環(huán)境做重大修改
- 不需要添加額外的服務(wù)器(僅一臺manager就可管理上百個replication)
- 性能優(yōu)秀,可工作在半同步半復(fù)制和異步復(fù)制,當(dāng)監(jiān)控mysql狀態(tài)時,僅需要每隔N秒向master發(fā)送ping包(默認(rèn)3秒),所以對性能無影響。你可以理解為MHA的性能和簡單的主從復(fù)制框架性能一樣。
- 支持所有的存儲引擎
MHA工程流程
- 把宕機(jī)的master二進(jìn)制日志保存下來
- 找到binlog位置點最新的slave
- 在binlog位置點最新的slave上用relay log修復(fù)其它slave
- 將宕機(jī)的master上保存下來的二進(jìn)制日志恢復(fù)到含有最新位置點的slave上
- 將含有最新位置點binlog所在的slave提升為master
- 將其它slave重新指向新提升的master,并開啟主從復(fù)制。(重構(gòu)主從)
MHA 架構(gòu)

工具
- manager工具
(1)masterha_check_ssh #檢查MHA的SSH配置狀況;
(2)masterha_check_repl #檢查MySQL復(fù)制狀況;
(3)masterha_manger #啟動MHA;
(4)masterha_check_status #檢測當(dāng)前MHA運(yùn)行狀態(tài);
(5)masterha_master_monitor #檢測master是否宕機(jī);
(6)masterha_master_switch #控制故障轉(zhuǎn)移(自動或者手動);
(7)masterha_conf_host #添加或刪除配置的server信息
- node 工具,這些工具通常有MHA Manager的腳本觸發(fā),無需認(rèn)為操作。
(1)save_binary_logs #保存和復(fù)制master的二進(jìn)制日志;
(2)apply_diff_relay_logs #識別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的slave;
(3)purge_relay_logs #清除中繼日志(不會阻塞SQL線程);