簡介node
MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就任於Facebook公司)開發,是一套優秀的做爲MySQL高可用性環境下故障切換和主從提高的高可用軟件。在MySQL故障切換過程當中,MHA能作到在0~30秒以內自動完成數據庫的故障切換操做,而且在進行故障切換的過程當中,MHA能在最大程度上保證數據的一致性,以達到真正意義上的高可用。mysql
該軟件由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。MHA Manager能夠單獨部署在一臺獨立的機器上管理多個master-slave集羣,也能夠部署在一臺slave節點上。MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集羣中的master節點,當master出現故障時,它能夠自動將最新數據的slave提高爲新的master,而後將全部其餘的slave從新指向新的master。整個故障轉移過程對應用程序徹底透明。linux
在MHA自動故障切換過程當中,MHA試圖從宕機的主服務器上保存二進制日誌,最大程度的保證數據的不丟失,但這並不老是可行的。例如,若是主服務器硬件故障或沒法經過ssh訪問,MHA無法保存二進制日誌,只進行故障轉移而丟失了最新的數據。使用MySQL 5.5的半同步複製,能夠大大下降數據丟失的風險。MHA能夠與半同步複製結合起來。若是隻有一個slave已經收到了最新的二進制日誌,MHA能夠將最新的二進制日誌應用於其餘全部的slave服務器上,所以能夠保證全部節點的數據一致性。sql
目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另一臺充當從庫,由於至少須要三臺服務器,出於機器成本的考慮,淘寶也在該基礎上進行了改造,目前淘寶TMHA已經支持一主一從。MHA 適合任何存儲引擎, 只要能主從複製的存儲引擎它都支持,不限於支持事物的 innodb 引擎。數據庫
官方介紹:https://code.google.com/p/mysql-master-ha/服務器
下圖展現如何經過MHA Manager管理多組主從複製架構
能夠將MHA工做原理總結爲以下:app
(1)從宕機崩潰的master保存二進制日誌事件(binlog events); (2)識別含有最新更新的slave; (3)應用差別的中繼日誌(relay log)到其餘的slave; (4)應用從master保存的二進制日誌事件(binlog events); (5)提高一個slave爲新的master; (6)使其餘的slave鏈接新的master進行復制;
MHA軟件由兩部分組成,Manager工具包和Node工具包,具體的說明以下。ssh
Manager工具包主要包括如下幾個工具:工具
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信息
Node工具包(這些工具一般由MHA Manager的腳本觸發,無需人爲操做)主要包括如下幾個工具:
save_binary_logs 保存和複製master的二進制日誌
apply_diff_relay_logs 識別差別的中繼日誌事件並將其差別的事件應用於其餘的slave
filter_mysqlbinlog 去除沒必要要的ROLLBACK事件(MHA已再也不使用這個工具)
purge_relay_logs 清除中繼日誌(不會阻塞SQL線程)
注意:
爲了儘量的減小主庫硬件損壞宕機形成的數據丟失,所以在配置MHA的同時建議配置成MySQL 5.5的半同步複製。關於半同步複製原理各位本身進行查閱。(不是必須)
1.部署MHA
接下來部署MHA,具體的搭建環境以下(全部操做系統均爲CentOS7.4 64bit):
IP地址 |
主機名 |
角色 |
軟件 |
192.168.1.30 |
linzi |
manager |
mha4mysql-manager、mha4mysql-node |
192.168.1.25 |
KVM1 |
master |
mha4mysql-node |
192.168.1.26 |
KVM2 |
Slave1,Candicate master |
mha4mysql-node |
192.168.1.27 |
KVM3 |
Slave2 |
mha4mysql-node |
其中master對外提供寫服務,備選Candicate master(實際爲slave1)提供讀服務,slave2也提供讀服務,一旦master宕機,將會把備選master提高爲新的master,slave指向新的master
(1)在全部節點安裝MHA node所需的perl模塊(DBD:mysql),安裝腳本以下:
先要安裝epel源,
Centos6安裝源:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Centos7安裝源: rpm -ivh http://www.rpmfind.net/linux/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
如下設置爲CentOS6操做:
[epel] name=Extra Packages for Enterprise Linux 6 - $basearch baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #將註釋的#去掉 #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch#前面加上#
yum clean all yum list
使用yum安裝所有依賴
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken
(2)上傳MHA相關包,在全部的節點安裝mha-node: