MHA是针对与mysql的故障切换方案。其工作原理如下:
首先,MHA分为manager和node,mysql中的master和slave均为node端,相当于对其进行监控,一个master包含的slave及其本身代表集群的一个节点;manager负责对master端进行监控,每隔几秒进行故障探测,但检测到master故障时进行故障转移。
集群搭建需要四台虚拟机,一台manager负责集群管理,一台作为master,两台作为master的slave端。
MHA高可用集群的搭建要求必须是主从复制为基础。
server1--->master 172.25.3.1
server2--->slave1 172.25.3.2
server3--->slave2 172.25.3.3
server4--->manager 172.25.3.4
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
ssh-keygen
ssh-copy-id server1
ssh-copy-id server2
ssh-copy-id server3
ssh-copy-id manager
scp -r .ssh/ server1:
scp -r .ssh/ server2:
scp -r .ssh/ server3:
scp -r .ssh/ manager:
server1,server2,server3:
tar xf mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar
server4:
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
server1,server2,server3初始化mysql
systemctl start mysqld
grep password /var/log/mysqld.log #查看初始化密码
mysql_secure_installation #修改密码 有强壮度 密码为: Westos+003
进入mysql
mysql -pWestos+007 #进入mysql
server1 master授权:
grant replication slave on *.* to repl@'%' identified by 'Westos+003';
show master status;
server1/2 slave配置连接参数:
CHANGE MASTER TO MASTER_HOST='172.25.3.2',
MASTER_USER='repl',
MASTER_PASSWORD='Westos+003',
MASTER_AUTO_POSITION = 1;
CHANGE MASTER TO MASTER_HOST='172.25.3.3',
MASTER_USER='repl',
MASTER_PASSWORD='Westos+003',
MASTER_AUTO_POSITION = 1;
start slave;
show slave status\G;
创建目录,拷贝模板
mkdir /etc/masterha
cp app1.cnf /etc/masterha/
cp masterha_default.cnf /etc/masterha/
配置app1.cnf
[server default]
user=root
password=Westos+003
ssh_user=root
master_binlog_dir= /var/lib/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.3.250 -s 172.25.3.3
ping_interval=3
repl_user=repl
repl_password=Westos+003
# 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.3.1
[server2]
hostname=172.25.3.2
candidate_master=1
[server3]
hostname=172.25.3.3
no_master=1
配置完成后进行验证:
masterha_check_ssh --conf=/etc/masterha/app1.cnf #检测免密连接
masterha_check_repl --conf=/etc/masterha/app1.cnf #检测主从配置
成功后说明配置完成。
server1 切换至 server2
masterha_master_switch --conf=/etc/masterha/app1.cnf
--master_state=alive
--new_master_host=172.25.3.2
--new_master_port=3306
--orig_master_is_new_slave
--running_updates_limit=10000
masterha_master_switch --master_state=dead
--conf=/etc/masterha/app1.cnf
--dead_master_host=172.25.3.2
--dead_master_port=3306
--new_master_host=172.25.3.1
--new_master_port=3306
--ignore_last_failove
将切换脚本打入后台:
masterha_manager --conf=/etc/masterha/app1.cnf &
ps ax #查看后台进程
systemctl stop mysqld
脚本自动执行:
执行完毕脚本退出进程:
查看master是否发生改变:
切换成功
在实际应用中,脚本除了会切换master端,还会将原master 的ip转移到新的master上,即在固定ip下实现master的切换,确保不影响用户的体验。
在配置文件app1.cnf
中打开ip脚本:
脚本内容,确保要漂移的ip为同一网段:
为脚本赋予x权限:
为master添加临时ip:
执行脚本:
masterha_manager --conf=/etc/masterha/app1.cnf &
模拟宕机:
systemctl stop mysqld
脚本执行完毕查看状态:
server1 的 172.25.3.100 ip已经不存在
查看server2ip,发现临时ip 172.25.3.100,证明ip漂移成功: