MySQL 高可用之MHA(二)

前言node

上一篇《MySQL高可用之MHA 一》主要講述了MHA的相關原理以及在銅板街上線的相關細節,本篇將從安裝代碼、測試等方面進行講解MHA。mysql

版本說明git

系統版本:CentOS release 6.7 (Final)github

DB版本:官方5.6.38-log MySQL Community Server (GPL)sql

MHA軟件版本(下載地址見上篇文章):數據庫

mha4mysql-manager-0.56.tar.gz bash

mha4mysql-node-0.56.tar.gz微信

節點說明架構

manager : 192.168.1.102app

mysql-master: 192.168.1.221

mysql-master VIP: 192.168.1.220

mysql-slave1: 192.168.1.222

mysql-slave2: 192.168.1.223

架構圖(以下圖1所示):


環境配置

  1. 配置 ssh 互通,分別登陸全部節點,對其他節點配置 ssh 免密登陸,如:登陸 192.168.1.102 對 192.168.1.221 免密登陸,執行 ssh-copy-id -i 192.168.1.221, 其餘互通相似。

  2. 安裝mha-node依賴及軟件包,分別登陸全部節點,執行:

  3. 1 yum -y install gcc perl-ExtUtils-MakeMaker perl-ExtUtils-CBuilder perl-CPAN perl-DBI perl-DBD-MySQL
    2 tar xvf mha4mysql-node-0.56.tar.gz && cd mha4mysql-node-0.56 && perl Makefile.PL && make && make install && save_binary_logs --version結果提示:save_binary_logs version 0.56.  
    表示安裝正確。
    複製代碼
  4. 安裝mha-manager依賴及軟件包,登陸manager : 192.168.1.102,執行:

  5. 1 yum -y install perl-DBD-MySQL perl-Time-HiRes perl-Config-Tiny 
    2 wget http://xrl.us/cpanm --no-check-certificate 
    3 mv cpanm /usr/local/bin/ 
    4 chmod 755 /usr/local/bin/cpanm 
    5 cpanm install Log::Dispatch 
    6 cpanm install  Parallel::ForkManager 
    7
    8 tar xvf mha4mysql-manager-0.56.tar.gz && cd mha4mysql-manager-0.56 && perl Makefile.PL && make && make install && masterha_check_repl --version
    結果提示:masterha_check_repl version 0.56. 
    表示安裝正確。複製代碼
  6. 在主庫添加VIP,登陸mysql-master: 192.168.1.221 執行:

  7. 1 ip addr add 192.168.1.220/32 dev eth0;arping -q -c 2 -U -I eth0 192.168.1.220複製代碼
  8. 主從配置,主庫爲 mysql-master: 192.168.1.221,從庫爲 mysql-slave1: 192.168.1.222,mysql-slave2: 192.168.1.223,架構如上面架構圖(如圖1所示),方法略。

主庫受權

登陸到mysql-master: 192.168.1.221 進行以下受權:

1 GRANT all ON *.* TO 'mhauser'@'192.168.1.102' IDENTIFIED BY 'mhauser';
2 GRANT all ON *.* TO 'mhauser'@'192.168.1.221' IDENTIFIED BY 'mhauser';
3 GRANT all ON *.* TO 'mhauser'@'192.168.1.222' IDENTIFIED BY 'mhauser';
4 GRANT all ON *.* TO 'mhauser'@'192.168.1.223' IDENTIFIED BY 'mhauser';
5 GRANT SELECT, RELOAD, SUPER ON *.* TO 'purge_user'@'127.0.0.1' identified by 'purge_user' ;     #該受權爲後面的從庫配置pure_relay_logs所需

從庫配置 pure_relay_logs 

登陸到各個從庫 mysql-slave1: 192.168.1.222  
mysql-slave2: 192.168.1.223 執行:
複製代碼
1 cat <<'EOF' >/tmp/purge_relay_log.sh
2 /usr/local/bin/purge_relay_logs --user=purge_user --host=127.0.0.1 --port=3306  --password='purge_user' --disable_relay_log_purge --workdir=/tmp/
3 EOF
4
5 echo "0 4 * * * sh /tmp/purge_relay_log.sh &>> /tmp/purge_relay_logs_3306.log" >> /var/spool/cron/root複製代碼
MHA配置

複製代碼

登陸到manager : 192.168.1.102,執行以下:

1 mkdir /etc/masterha/
 2 mkdir -p /masterha/app1
 3 cat <<'EOF' > /etc/masterha/app1.cnf
 4 [server default]
 5 manager_workdir=/masterha/app1
 6 manager_log=/masterha/app1/manager.log
 7 master_binlog_dir=/data/mysql/3306/binlog
 8 master_ip_failover_script=/usr/local/bin/master_ip_failover
 9 master_ip_online_change_script=/usr/local/bin/master_ip_online_change
10 user=mhauser
11 password=mhauser
12 ssh_user=root
13 repl_user=repluser
14 repl_password='repluser'
15 ping_interval=1
16 remote_workdir=/tmp
17 report_script=/usr/local/bin/send_report
18
19 [server1]
20 hostname=192.168.1.221
21 candidate_master=1
22 check_repl_delay=0
23 port=3306
24 [server2]
25 hostname=192.168.1.222
26 candidate_master=1
27 check_repl_delay=0
28 port=3306
29 [server3]
30 hostname=192.168.1.223
3 1ignore_fail=1
32 port=3306
33 EOF複製代碼

相關腳本已經共享到 git,git clone 後替換 master_ip_failover、master_ip_online_change的vip和網卡爲本身的配置,替換send_report中的 your email、your port、your password

1 git clone https://github.com/tianyuan2018/tbj_mha.git
2 cp tbj_mha/master_ip_failover tbj_mha/master_ip_online_change tbj_mha/send_report /usr/local/bin/複製代碼
服務檢測及啓停
複製代碼

登陸到manager : 192.168.1.102

  1. ssh 互通檢測

  2. 1 masterha_check_ssh  --conf=/etc/masterha/app1.cnf
    複製代碼

    結果:[info] All SSH connection tests passed successfully. 爲正確

  3. 複製檢測

  4. 1 masterha_check_repl  --conf=/etc/masterha/app1.cn複製代碼

    結果:MySQL Replication Health is OK. 爲正確

  5. 開啓自動故障切換

  6. 1 nohup masterha_manager --conf=/etc/masterha/app1.cnf --ignore_last_failover &> /dev/null &
    2 服務開啓後,會在/masterha/app1生成日誌文件manager.log和app1.master_status.health
    3 服務狀態檢測:masterha_check_status  --conf=/etc/masterha/app1.cnf
    4 app1 (pid:22161) is running(0:PING_OK), master:192.168.1.221
    5 中止服務:masterha_stop  --conf=/etc/masterha/app1.cnf
    6 Stopped app1 successfully.
    複製代碼
  7. MHA服務手動設置

  8. 1 未開啓服務,故障手工切換
    2 masterha_master_switch --conf=/etc/masterha/app1.cnf  --master_state=dead  --dead_master_host=192.168.1.221 --dead_master_port=3306  --new_master_host=192.168.1.222 --new_master_port=3306 --ignore_last_failover
    3 未開啓服務,非故障手工在線切換
    4 masterha_master_switch --conf=/etc/masterha/app1.cnf  --master_state=alive --new_master_host=192.168.1.222 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
       
    複製代碼

MHA 自動故障切換測試

manager : 192.168.1.102 開啓服務

1 nohup masterha_manager --conf=/etc/masterha/app1.cnf --ignore_last_failover &> /dev/null &複製代碼

正常狀態下,登陸到主庫192.168.1.221發現VIP 102.168.1.220


咱們在主庫上將數據庫關閉

1 mysqladmin -uroot -h127.0.0.1 -p -P3306 shutdown
可發現主庫192.168.1.221再也不存在VIP 102.168.1.220複製代碼


登陸到從庫mysql-slave1:192.168.1.222(mha manager 配置的candidate_master=1,查看VIP已經自動設置成功。


同時收到mha切換的郵件


測試前打開另外一中端,經過對DB VIP執行查詢命令進行測試:

1 while true; do mysql -umhauser -h192.168.1.220 -pmhauser -P3306 -e "select now();";sleep 1;done
複製代碼


發現VIP對外服務終止時間爲24s。
此時登陸到 mha manager 發現服務中止( MHA 在自動故障切換後,複製集羣的狀態發生變化,因此每次自動故障切換完後,MHA都會中止),從新啓動MHA須要修改相應配置信息。
複製代碼


登陸到新的主庫192.168.1.222查看複製機器(server_id 12233306,爲原來的mysql-slave2: 192.168.1.223),能夠發現原來的從庫已經指向本身。


原主庫已經宕機,若是原主庫故障處理後能夠正常啓動,須要加入原複製集羣,能夠經過登陸到mha manager 執行grep "CHANGE MASTER TO " manager.log得到結果從新對新主庫進行復制。


至此,MHA一個完整的自動故障切換流程已經完成。

做者簡介

天元,銅板街DBA,2017 年 7 月加入團隊,目前主要負責公司全部業務的數據庫相關運維。

                                


                      更多精彩內容,請掃碼關注 「銅板街科技」 微信公衆號。

相關文章
相關標籤/搜索