構建MHA實現MySQL高可用集羣架構配置過程總結

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架構圖

構建MHA實現MySQL高可用集羣架構配置過程總結

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     #啓動

構建MHA實現MySQL高可用集羣架構配置過程總結
構建MHA實現MySQL高可用集羣架構配置過程總結

9.模擬服務器宕機

構建MHA實現MySQL高可用集羣架構配置過程總結

  • 查看143

構建MHA實現MySQL高可用集羣架構配置過程總結

  • 查看140

構建MHA實現MySQL高可用集羣架構配置過程總結

  • >可以看到master 的 IP 現在爲 192.168.64.140本來是和192.168.64.142同步的,說明 MHA 已經把Candicatemaster(master2)提升爲了新的master,IO線程和SQL線程也正確運行,MHA 搭建成功!!!
  • 注意:MHA爲一次性服務,所以必須將提升爲主的服務器配置文件read-only去掉,否則機器重啓後不能寫入數據

最終主從測試

  • 在140上新建數據庫
    構建MHA實現MySQL高可用集羣架構配置過程總結

  • 在143查看是否同步

構建MHA實現MySQL高可用集羣架構配置過程總結

測試成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章