1.MHA簡介:
MHA(Master HighAvailability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作爲MySQL高可用性環境下故障切換和主從提升的高可用軟件。在MySQL故障切換過程中,MHA能做到在0~30秒之內自動完成數據庫的故障切換操作,並且在進行故障切換的過程中,MHA能在最大程度上保證數據的一致性,以達到真正意義上的高可用。
- MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集羣,也可以部署在一臺slave節點上。MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集羣中的master節點,當master出現故障時,它可以自動將最新數據的slave提升爲新的master,然後將所有其他的slave重新指向新的master。整個故障轉移過程對應用程序完全透明。
2.MHA工作原理
- 1 從宕機崩潰的master保存二進制日誌事件(binlog events)
- 2 識別含有最新更新的slave
- 3 應用差異的中繼日誌(relay log)到其他的slave
- 4 應用從master保存的二進制日誌事件(binlog events)
- 5 提升一個slave爲新的master
- 6 使其他的slave連接新的master進行復制
- MHA軟件由兩部分組成,Manager工具包和Node工具包
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的半同步複製
3架構圖
4環境搭建
- 142爲主
- 140,143爲從
- 基於key驗證鏈接
在MHA上 root:~ # ssh-keygen root:~ # ssh-copy-id 192.168.64.141 root:~ # scp -rp .ssh 192.168.64.140:/root/ root:~ # scp -rp .ssh 192.168.64.142:/root/ root:~ # scp -rp .ssh 192.168.64.143:/root/
5在master創建賬號
grant all on *.* to repluser@'192.168.64.%' identified by 'fscx';
grant all on *.* to mhauser@'192.168.64.%' identified by 'fscx' ;
6實現MHA
安裝包在此鏈接下載
https://github.com/yoshinorim/mha4mysql-manager/releases
https://github.com/yoshinorim/mha4mysql-node/releases
- 安裝時用yum安裝(解決依賴性)
1在管理節點上安裝兩個包
mha4mysql-manager mha4mysql-node
2在被管理節點安裝:
mha4mysql-node
7在管理節點建立配置文件
root:~ # mkdir /data
root:~ # mkdir /etc/mha
root:~ # vim /etc/mha/app1.conf
[server default]
user=mhauser
password=fscx
manager_workdir=/data/mha/app1/
manager_log=/data/mha/app1/manager.log
remote_workdir=/data/mha/app1/
ssh_user=root
repl_user=repluser
repl_password=fscx
ping_interval=1
[server1]
hostname=192.168.64.142
candidate_master=1
[server2]
hostname=192.168.64.140
candidate_master=1
[server3]
hostname=192.168.64.143
8在管理節點,mha驗證和啓動
root:~ # masterha_check_ssh --conf=/etc/mha/app1.conf #祕鑰檢查
root:~ # masterha_check_repl --conf=/etc/mha/app1.conf #複製檢查
root:~ # masterha_manager --conf=/etc/mha/app1.conf #啓動
9.模擬服務器宕機
- 查看143
- 查看140
- >可以看到master 的 IP 現在爲 192.168.64.140本來是和192.168.64.142同步的,說明 MHA 已經把Candicatemaster(master2)提升爲了新的master,IO線程和SQL線程也正確運行,MHA 搭建成功!!!
- 注意:MHA爲一次性服務,所以必須將提升爲主的服務器配置文件read-only去掉,否則機器重啓後不能寫入數據
最終主從測試
-
在140上新建數據庫
- 在143查看是否同步
測試成功