MySQL高可用架構之MHA

  MHA簡介:node

  MHA是由日本人yoshinorim(原就任於DeNA現就任於FaceBook)開發的比較成熟的MySQL高可用方案。MHA可以在30秒內實現故障切換,並能在故障切換中,最大可能的保證數據一致性。mysql

  該軟件由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。MHA Manager能夠單獨部署在一臺獨立的機器上管理多個master-slave集羣,也能夠部署在一臺slave節點上。MHA Node運行在每臺mysql服務器上,MHA Manager會定時探測集羣中的master節點,當master出故障時,它能夠自動將最新數據的slave提高爲新的master,而後將全部其它的slave從新指向新的master。整個故障轉移過程對應用程序徹底透明。sql

  MHA基本機構圖以下:數據庫

  fc1ee4adf53a4222709f3559ed14f9bb.png

  以上拓撲圖展現瞭如何經過MHA Manager管理多組主從複製。能夠將MHA工做原理總結以下:centos

  (1)從宕機崩潰的master服務器中保存二進制日誌事件(binlog events)服務器

  (2)識別含有最新更新的slave架構

  (3)應用差別的中繼日誌(relay-log)到其它slaveapp

  (4)應用從master保存的二進制日誌事件(binlog events)ssh

  (5)提高一個新的slave爲masteride

  (6)使其它的slave鏈接新的master進行復制。

  1、部署環境

  大概部署環境以下:(說明:全部系統均爲centos7.3,其中server0三、server04爲server02的從) 

    角色      ip    主機名    類型
監測主機(monitor host) 172.17.5.1 server01
監控複製組
主服務器(master) 172.17.5.2 server02 寫入
備用主服務器(candicate master)
172.17.5.3 server03
從服務器(slave) 172.17.5.4 server04

  2、配置hosts本地解析

  ①四臺機器配置相同的hosts解析。(也能夠在mysql配置文件裏配置忽略名字解析skip-name-resolve)

  bafcf15f9762925a7afd995ef4fb1d6e.png

  3、配置四臺主機之間ssh免密登錄(都須要配置哦)。

  404e2b49036cc69d7d573d2687140b85.png

  4、配置mysql服務。

  ①在master(server02)主機上配置mysql主配置文件

  0753ab0675fed44e337a43a9a004e36a.png 

  ②在其它三個服務器上配置mysql主配置文件(注意:server-id不同,其它配置文件都同樣)。

  c2ef137c59efc45e3a45e3bc7ea1fcb2.png

  ③配置好主從節點以後,按MYSQL複製配置架構的配置方式將其配置完成並啓動master節點和各slave節點,以及爲各slave節點啓動其IO和SQL線程,確保主從複製運行無誤。操做以下:

  在master(server02)服務器上受權slave服務器能鏈接數據庫讀取二進制日誌事物。

  6668fcba383f3effcded6e1d651a1c8f.png  

  在其它機器上獲取master的權限,開啓複製功能。(三臺機器同樣)

  25007d70947db278acdaae05b8a80611.png

  5、搭建MHA環境和配置服務。

  ①在master(server02)服務器上建立MHA管理複製的帳號。

  98acd702715b200f8d7fe04b1c2c0ac5.png  

  ②在全部服務器上安裝mha4mysql-node(我是下載好安裝包使用rpm安裝的)

  c7fcb13b5c53ef627d022bff90612e46.png

  ③在監測主機(monitor host)上安裝mha4mysql-manager

  67b676e09bc9a1e2f5b26d942a07f436.png  

  ④定義MHA管理配置文件。

  在manager(server01)配置:

  定義一個統一管理的用戶和目錄,方便之後管理。

  mkdir -p /etc/mha_master/app1

  修改MHA配置文件以下:

  2f1a5b4159a50b61dd2ec345c21aee17.png  

  ⑤在master(server02)和slave(server0三、04)建立工做目錄

  命令:mkdir /mydata/mha_master/app1

  ⑥檢測各節點之間ssh通信是否ok(server01執行)

  3.png 

  ⑦再次在master(server02)執行mysql受權sql語句。【爲了確保各slave服務器節點正常,隨時能夠成爲master服務器】

  1.png

  ⑧masterha_check_repl工具檢查mysql主從複製是否成功 

  2.png 

  ⑨啓動MHA

  1.png

  5、測試。

  ①中止master(server02)服務器,查看manager(server01)日誌。

  systemctl stop mariadb (sserver02)

  1.png

  ②查看備用slave是否爲master了。

  1.png

  ③恢復master(server02)。

  1.png

  6、平常操做

  ①校驗ssh等效驗證
  $ masterha_check_ssh --conf=/etc/masterha/app1.cnf


  ②校驗mysql複製
  $ masterha_check_repl --conf=/etc/masterha/app1.cnf


  ③啓動mha監控,在master故障時開啓自動轉移
  $ nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log  < /dev/null 2>&1 &

  ###當有slave節點宕掉的狀況是啓動不了的,加上--ignore_fail_on_start即便有節點宕掉也能啓動mha
  $ nohup masterha_manager --conf=/etc/masterha/app1.cnf  --ignore_fail_on_start > /tmp/mha_manager.log  < /dev/null 2>&1 &


  ④檢查啓動的狀態
  $ masterha_check_status --conf=/etc/masterha/app1.cnf


  ⑤中止mha
  $ masterha_stop  --conf=/etc/masterha/app1.cnf


  ⑥屢次failover
  MHA在每次failover切換後會在管理目錄生成文件app1.failover.complete ,下次在切換的時候若是因爲間隔時間過短致使切換不成功,應手動清理掉。
  rm -rf /var/log/masterha/app1/app1.failover.complete或者經過加上參數--ignore_last_failover來忽略


  ⑦手工failover
  手工failover場景,適用於在master死掉,而masterha_manager未開啓情形,以下,指定--master_state=dead
  masterha_master_switch --conf=/etc/masterha/app1.cnf --dead_master_host=192.168.1.6 --master_state=dead --new_master_host=192.168.1.7 --ignore_last_failover


  ⑧手動在線切換,以下,指定--master_state=alive
  masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.1.6 --orig_master_is_new_slave

  masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.1.6 --orig_master_is_new_slave --running_updates_limit=10000 --orig_master_is_new_slave

  代表在切換時原master變爲新master的slave節點  --running_updates_limit=10000   切換時候選master若是有延遲的話,mha切換不能成功,加上此參數表示延遲在此時間範圍內均可切換(單位爲s),可是切換的時間長短是由recover時relay日誌的大小決定

相關文章
相關標籤/搜索