MHA简介:
在前面的学习中,我们学习了如何去配置mysql的主从复制,但是如果master主机down掉后,只能手动去CHANGE MASTER,这在企业运维中是十分不理想的解决方案。
MHA是针对与mysql的故障切换方案。其工作原理如下:
首先,MHA分为manager和node,mysql中的master和slave均为node端,相当于对其进行监控,一个master包含的slave及其本身代表集群的一个节点;manager负责对master端进行监控,每隔几秒进行故障探测,但检测到master故障时进行故障转移。
需要四台虚拟机进行实验环境,其中一台负责manager,其余三台配置mysql主从复制且必须是一主二从。
具体要求:四台机器必须SSH免密登录,node端安装node相关包和依赖包,manager安装所有依赖包。
首先我们准备四台虚拟机
vm4、vm5、vm6、vm7
vm4、5、6负责配置mysql主从复制,一主二从
vm7负责配置manager
vm4\5\6 共同操作:
配置四台机器互相免密登陆
master端
ssh-keygen
ssh-copy-id server4
ssh-copy-id server5
ssh-copy-id server6
ssh-copy-id server7
scp -r .ssh/ server5:
scp -r .ssh/ server6:
scp -r .ssh/ server7:
保证四台机器之间互通
解压安装所需包
tar xf mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.33-1.el7.x86_64.rpm mysql-community-common-5.7.33-1.el7.x86_64.rpm mysql-community-libs-5.7.33-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.33-1.el7.x86_64.rpm mysql-community-server-5.7.33-1.el7.x86_64.rpm
编辑主配置文件
vim /etc/my.cnf
server-id=1
log-bin=binlog
#log-slave-updates=ON
gtid_mode=ON
enforce-gtid-consistency=ON
初始化mysql并修改密码
systemctl start mysqld
grep password /var/log/mysqld.log #查看初始化密码
mysql_secure_installation #修改密码 有强壮度
mysql -pWestos+007 #进入mysql
vm4 master端需要授权
grant replication slave on *.* to repl@'%' identified by 'Westos+007';
show master status;
vm5\6 slave端需要配置参数
change master to master_host='172.25.9.4',master_user='repl',master_password='Westos+007',master_auto_position=1;
start slave;
show slave status\G;
注意:
以上操作,SSH密钥需要四台机器均互通,一主二从需要授权并修改参数(详细可以看之前博客的配置过程)。
manager主机vm7编辑主配置文件,对master端进行监控,
mkdir /etc/masterha
cp app1.cnf /etc/masterha/
vim /etc/masterha/app1.cnf
[server default]
user=root
password=Westos+007
ssh_user=root
master_binlog_dir= /var/lib/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.9.5 -s 172.25.9.6
ping_interval=3
repl_user=repl
repl_password=Westos+007
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
[server1]
hostname=172.25.9.4
[server2]
hostname=172.25.9.5
candidate_master=1
[server3]
hostname=172.25.9.6
no_master=1
配置完成后进行验证:
manager端:
检测ssh免密登陆是否正常
masterha_check_ssh --conf=/etc/masterha/app1.cnf #检测ssh
检测一主二从配置是否正常
masterha_check_repl --conf=/etc/masterha/app1.cnf #检测授权
若未授权,进入master主机msyql 给root用户远程登陆的权限
grant all on *.* to root@'%' identified by 'Westos+007';
当前master处于alive模式时,在manager端进行
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.9.5 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
成功显示:
也可进入mysql数据库show slave status\G;
查看故障解决结果。
当前master处于dead模式时
masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.9.5 --dead_master_port=3306 --new_master_host=172.25.9.4 --new_master_port=3306 --ignore_last_failover
可将之前的vm4mysql服务区关闭掉,模拟master down掉的情景。
masterha_manager --conf=/etc/masterha/app1.cnf &
ps ax #查看后台进程
执行脚本读取文件 并打入后台,模拟master服务区down掉,
将当前master关闭后,脚本自动后台运行,
完成后,查看进程,脚本执行完毕