前言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所示):
環境配置
配置 ssh 互通,分別登陸全部節點,對其他節點配置 ssh 免密登陸,如:登陸 192.168.1.102 對 192.168.1.221 免密登陸,執行 ssh-copy-id -i 192.168.1.221, 其餘互通相似。
安裝mha-node依賴及軟件包,分別登陸全部節點,執行:
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.
表示安裝正確。
複製代碼
安裝mha-manager依賴及軟件包,登陸manager : 192.168.1.102,執行:
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.
表示安裝正確。複製代碼
在主庫添加VIP,登陸mysql-master: 192.168.1.221 執行:
1 ip addr add 192.168.1.220/32 dev eth0;arping -q -c 2 -U -I eth0 192.168.1.220複製代碼
主從配置,主庫爲 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
ssh 互通檢測
1 masterha_check_ssh --conf=/etc/masterha/app1.cnf
複製代碼
結果:[info] All SSH connection tests passed successfully. 爲正確
複製檢測
1 masterha_check_repl --conf=/etc/masterha/app1.cn複製代碼
結果:MySQL Replication Health is OK. 爲正確
開啓自動故障切換
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.
複製代碼
MHA服務手動設置
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 月加入團隊,目前主要負責公司全部業務的數據庫相關運維。
更多精彩內容,請掃碼關注 「銅板街科技」 微信公衆號。