前言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 月加入团队,目前主要负责公司全部业务的数据库相关运维。
更多精彩内容,请扫码关注 “铜板街科技” 微信公众号。