Mysql 5.7 高可用 MHA+阿里云SLB 实现故障秒级恢复

简介

Mysql 的主从结构是目前产线使用的主要架构,配合MHA可以实现故障秒级切换,但是对于应用来说,主节点的地址换了以后,应用就连接不上了。通过使用SLB可以有效的解决这个问题,数据库主从切换,应用可以很快速的连接上新的主库。架构图如下

Mysql 5.7 高可用 MHA+阿里云SLB 实现故障秒级恢复_第1张图片

 实现思路: 当主数据挂了以后,MHA侦测到以后,调用脚本,将SLB的后端地址更改为从数据库

环境准备

MHA Manager: 172.16.3.121  CentOS 7.4

Mysql Master: 172.16.3.122 CentOS 7.4

Mysql Slave: 172.16.2.196 CentOS 7.4

阿里云内部SLB 一个(172.16.3.132), 创建一个虚拟服务器组mysql,将主库加入到虚拟服务器组中,并创建3306的监听

Mysql 5.7 高可用 MHA+阿里云SLB 实现故障秒级恢复_第2张图片

Mysql 5.7 高可用 MHA+阿里云SLB 实现故障秒级恢复_第3张图片

 步骤

1. 下载MHA的rpm包,并将包上传到3台服务器上,这里显示是6的系统,7也可以用,已经亲测有效

链接:https://pan.baidu.com/s/1vI8A6TlrE7vN7jOCJ7QSOQ 
提取码:56k9

2. 在3台服务器上都安装mha node

yum install -y mha4mysql-node-0.54-0.el6.noarch.rpm 

3. 在MHA Manager 这台服务器上安装 manager的包

yum install -y mha4mysql-manager-0.54-0.el6.noarch.rpm 

 4. 配置 mysql 数据的主从 ,详细步骤参考. https://blog.csdn.net/qq_33196814/article/details/81513907

5. 配置3台服务器之间的相互ssh免密,重要!!!

我用的偷懒的方法,在mha manager这台机器上操作的,如果你不能理解下面命令的意思,请不要使用。去网上搜索一下怎么做服务器直接的免密

[mha-manager~]#cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
[mha-manager~]#scp /root/.ssh/id_rsa 172.16.3.122:/root/.ssh/
[mha-manager~]#scp /root/.ssh/id_rsa 172.16.2.196:/root/.ssh/
[mha-manager~]#scp /root/.ssh/id_rsa.pub 172.16.3.122:/root/.ssh/
[mha-manager~]#scp /root/.ssh/id_rsa.pub  172.16.2.196:/root/.ssh/
[mha-manager~]#scp /root/.ssh/authorized_keys 172.16.3.122:/root/.ssh/
[mha-manager~]#scp /root/.ssh/authorized_keys  172.16.2.196:/root/.ssh/

6. 配置mha, 登录mha manager这台机器,创建如下文件  /etc/mha_master/mha.conf 。 我的mysql安装在/data/mysql目录下

[server default] 
user=root
password=**** #数据库root的密码
manager_workdir=/etc/mha_master/app1 
manager_log=/etc/mha_master/manager.log 
master_binlog_dir=/data/mysql-data/
remote_workdir=/data/mha_master/app1
ssh_user=root 
repl_user=slave
repl_password=**** #数据库主从同步账号的密码
ping_interval=1 
report_script= /etc/mha_master/scripts/ali-api/send_report.py #这个就是替换SLB后端地址的脚本
#master_ip_failover_script=/etc/mha_master/scripts/masterha/master_ip_failover
#shutdown_script= /script/mha_master/scripts/shutdown.py
[server1] 
hostname=172.16.3.122
ssh_port=22 
candidate_master=1 
[server2]
hostname=172.16.2.196
ssh_port=22
candidate_master=1

7. 在所有机器上创建mysql 的软连接

ln -s /data/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog
ln -s /data/mysql/bin/mysql /usr/local/bin/mysql 

8. 下载和修改发送脚本,git 里面README.MD文件里面提到的每一处都要争取修改

[mha-manager~]#cd /etc/mha_master/scripts
[mha-manager~]#git clone https://github.com/kevinniu666/ali-api.git
[mha-manager~]#cd ali-api
[mha-manager~]#pip install -r requirements.txt

 

9. 运行mha并检查状态,这里有一个坑,使用nohup运行,mha过一段时间后会自动退出,将命令放入文件中就能解决。

[root@manager scripts]# cat start_mha.bash 
#!/bin/bash
/usr/bin/nohup masterha_manager -conf=/etc/mha_master/mha.cnf > /etc/mha_master/manager.log 2>&1 &
[root@manager scripts]# ./start_mha.bash 
[root@manager scripts]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:7364) is running(0:PING_OK), master:172.16.3.122

10. 手动关闭master节点,可以试试效果。我已经在产线运行了,就不试了。mha停了以后,需要手动配置主从,然后运行mha.更多mha的文档请参考:

https://github.com/yoshinorim/mha4mysql-manager/wiki/Configuration

 

你可能感兴趣的:(Mysql,mysql,mha,slb)