MySQL-高可用架构MHA

Posted 进阶之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-高可用架构MHA相关的知识,希望对你有一定的参考价值。

第1章 主从复制架构演变

1.1 高性能架构

读写分离架构(读性能较高)
1.代码级别
mysql proxy (Atlas,mysql router,proxySQL(percona),maxscale)、
amoeba(taobao)
xx-dbproxy等。
2.分布式架构(读写性能都提高):
分库分表——cobar--->TDDL(头都大了),DRDS
Mycat--->DBLE自主研发等。
NewSQL-->TiDB

1.2 高可用架构

(1)单活:MMM架构——mysql-mmm(google)
(2)单活:MHA架构——mysql-master-ha(日本DeNa),T-MHA
(3)多活:MGR ——5.7 新特性 MySQL Group replication(5.7.17) --->Innodb Cluster  
(4)多活:MariaDB Galera Cluster架构,(PXC)Percona XtraDB Cluster、MySQL Cluster(Oracle rac)架构

第2章 MHA部署流程

1.1 重点说明

1. MHA是基于主从复制部署的,所以要先部署好主从复制
2. MHA架构中的mysql不能是多实例,必须是单独的实例
3. MHA架构必须是1主2从的架构

1.2 MHA架构图

1.3 架构规划

主机名称 IP地址
管理节点 db03 192.168.114.52
主库 db01 192.168.114.50
从库1 db02 192.168.114.51
从库2 db03 192.168.114.52
binlong-server binlong-server 192.168.114.53
这里我把管理节点安装在了db03上;在实际生产中,如果没有足够的服务器,也可以把管理节点和binlogserver装在同一个从节点上

1.4 部署主从

1.1 主库操作

第一个里程: 创建目录并授权

mkdir /soft
mkdir /data/mysql/data -p
mkdir /data/binlog
mkdir /data/error
chown -R mysql:mysql /data/*

第二个里程: 编写配置文件

vim /etc/my.cnf
#服务端
[mysqld]
user=mysql
#软件安装路劲
basedir=/soft/mysql5726
#数据路劲
datadir=/data/mysql/data
#服务端socket文件位置
socket=/tmp/mysql.sock
#服务器ID号
server_id=27
#二进制日志
log_bin=/data/binlog/mysql-bin
#错误日志路劲
log_error=/data/error/mysql.log
log_timestamps=system
#端口号
port=3306
#GTID
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
#客户端
[mysql]
#客户端socket文件位置
socket=/tmp/mysql.sock

第三个里程:编写启动脚本

vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000

第四个里程:初始化数据库

mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726  --datadir=/data/mysql/data 

第五个里程:启动数据库

systemctl start mysqld 

第六个里程: 设置管理员密码

mysqladmin -uroot -p password 123

1.2 从库1操作

第一个里程: 创建目录并授权

mkdir /soft
mkdir /data/mysql/data -p
mkdir /data/binlog
mkdir /data/error
chown -R mysql:mysql /data/*

第二个里程: 编写配置文件

vim /etc/my.cnf
#服务端
[mysqld]
user=mysql
#软件安装路劲
basedir=/soft/mysql5726
#数据路劲
datadir=/data/mysql/data
#服务端socket文件位置
socket=/tmp/mysql.sock
#服务器ID号
server_id=28
#二进制日志
log_bin=/data/binlog/mysql-bin
#错误日志路劲
log_error=/data/error/mysql.log
log_timestamps=system
#端口号
port=3306
#GTID
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
#客户端
[mysql]
#客户端socket文件位置
socket=/tmp/mysql.sock

第三个里程:编写启动脚本

vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000

第四个里程: 初始化数据库

mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726  --datadir=/data/mysql/data 

第五个里程: 启动数据库

systemctl start mysqld

第六个里程: 设置管理员密码

mysqladmin -uroot -p password 123

1.3 从库2操作

第一个里程:创建目录并授权

mkdir /soft
mkdir /data/mysql/data -p
mkdir /data/binlog
mkdir /data/error
chown -R mysql:mysql /data/*

第二个里程:编写配置文件

vim /etc/my.cnf
#服务端
[mysqld]
user=mysql
#软件安装路劲
basedir=/soft/mysql5726
#数据路劲
datadir=/data/mysql/data
#服务端socket文件位置
socket=/tmp/mysql.sock
#服务器ID号
server_id=29
#二进制日志
log_bin=/data/binlog/mysql-bin
#错误日志路劲
log_error=/data/error/mysql.log
log_timestamps=system
#端口号
port=3306
#GTID
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
#客户端
[mysql]
#客户端socket文件位置
socket=/tmp/mysql.sock

第三个里程: 编写启动脚本

vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000

第四个里程: 初始化数据库

mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726  --datadir=/data/mysql/data 

第五个里程: 启动数据库

systemctl start mysqld

第六个里程:设置管理员密码

mysqladmin -uroot -p password 123

1.5 构建主从

第一个里程: 主库创建复制用户并授权

grant replication slave  on *.* to repl@\'192.168.114.%\' identified by \'123\';

第二个里程: 从库构建主关系(2台从库都执行)

change master to 
master_host=\'192.168.114.50\',
master_user=\'repl\',
master_password=\'123\' ,
MASTER_AUTO_POSITION=1;

第三个里程: 开启线程(2台从库都执行)

start slave;

1.6 部署MHA

第一个里程:配置关键程序软连接 (3台节点都执行)

ln -s /soft/mysql5726/bin/mysqlbinlog   /usr/bin/mysqlbinlog
ln -s /soft/mysql5726/bin/mysql           /usr/bin/mysql
#为什么要做软连接?
因为MHA调用命令的时候不读取环境变量,除非在代码里面把路劲写进去,但是MHA是基于自己环境开发的,所以我们想要用的话,要做软连接

第二个里程: 配置各节点互信

为什么要配置互信

当主机宕机的时候,主机需要通过网络把数据传输到备选的主上,这个时候需要建立SSH连接,这个过程由脚本来实现的,脚本最怕的是需要交互,所以我们要提前做好交互,这样通过脚本传输数据的时候就不需要交互了

4台机器互相通信

这里选择的是在管理节点上

rm -rf /root/.ssh 
ssh-keygen
cd /root/.ssh 
mv id_rsa.pub authorized_keys
scp  -r  /root/.ssh  192.168.114.50:/root
scp  -r  /root/.ssh  192.168.114.51:/root
scp  -r  /root/.ssh  192.168.114.52:/root
scp  -r  /root/.ssh  192.168.114.53:/root (后面配置的binlog-server那台服务器)

各节点验证(4台机器都要做)

ssh 192.168.114.50 date
ssh 192.168.114.51 date
ssh 192.168.114.52 date
ssh 192.168.114.53 date (binlog-server那台主机)

第三个里程: 3个节点安装Node软件依赖包

这里以提前下载好,传上去即可

#3台节点都要执行以下命令
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

第四个里程: 在主库中创建mha需要的用户

登录mysql执行以下命令
mysql>grant all privileges on *.* to mha@\'192.168.114.%\' identified by \'mha\';

第五个里程: Manager软件安装

在管理节点安装

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-DBD-MySQL
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

第六个里程: 管理节点编写配置文件

1. 创建配置文件目录
 mkdir -p /etc/mha
2. 创建日志目录
 mkdir -p /var/log/mha/app1
3. 编辑mha配置文件
vim /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager        
manager_workdir=/var/log/mha/app1            
master_binlog_dir=/data/binlog       
user=mha                                   
password=mha                               
ping_interval=1
repl_password=123
repl_user=repl
ssh_user=root                               
[server1]                                   
hostname=192.168.114.50
port=3306                                  
[server2]            
hostname=192.168.114.51
port=3306
[server3]
hostname=192.168.114.52
port=3306

第七个里程: 状态检查

在管理节点执行

masterha_check_ssh   --conf=/etc/mha/app1.cnf
masterha_check_repl  --conf=/etc/mha/app1.cnf
2条命名应该都显示OK
说明:这个app1在生产中就是对应的业务名字

第八个里程: 管理节点开启MHA

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

第九个里程: 查看MHA状态

#互信检查
[root@db03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:15890) is running(0:PING_OK), master:192.168.114.50
#主从状态检查
masterha_check_repl  --conf=/etc/mha/app1.cnf 

第十个里程: 配置MHA VIP功能(主库上配置)

上传脚本到管理机的/usr/local/bin

测试环境,我是传到了别的目录,移动到/usr/local/bin 这个目录可以随便是哪里,但是官方是这样的
mv master_ip_failover.txt /usr/local/bin/master_ip_failover

1.1 修改脚本内容

vi  /usr/local/bin/master_ip_failover
my $vip = \'10.0.1.55/24\';
my $key = \'1\';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
#修改内容说明:
my $vip = \'10.0.1.55/24\'; 1.选择一个MySQL对外提供服务同一个网段的地址 2. 此IP不能被别的程序占用
my $key = \'1\';  这个1 只要大于0就可以了
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";  这里要把eth0改为和服务器一样的网卡名
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";   这里要把eth0改为和服务器一样的网卡名
后面2条的内容就是主机宕机以后,调用这个脚本在新主上重新生成一个VIP
#给脚本执行权限
 chmod +x /usr/local/bin/master_ip_failover.txt
#这个脚本里面有一个中文地方用命令修改一下
 yum install dos2unix -y
 dos2unix /usr/local/bin/master_ip_failover 

1.2 管理机上修改配置文件

vi /etc/mha/app1.cnf
添加:
master_ip_failover_script=/usr/local/bin/master_ip_failover

细节(主库上执行)

#这个脚本只有在切换的时候才会去触发,所以第一次启动MHA的时候,要在主库上生成一个VIP
ifconfig eth0:1 192.168.114.55/24

1.3 重启mha (管理机上执行)

#关闭命令
masterha_stop --conf=/etc/mha/app1.cnf
#启动命令
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &   

1.4 检查MHA状态 (管理机上执行)

masterha_check_status --conf=/etc/mha/app1.cnf

第十一个里程: 配置MHA邮件提醒(以下操作都在管理机上操作)

1.1 配置文件添加邮件参数

vim /etc/mha/app1.cnf
添加:
report_script=/usr/local/bin/send

1.2 准备邮件脚本

send_report
(1)准备发邮件的脚本(上传 email_2019-最新.zip中的脚本,到/usr/local/bin/中)
(2)将准备好的脚本添加到mha配置文件中,让其调用
cp -a email/* /usr/local/bin/
cd /usr/local/bin/
chmod +x *

1.3 重启MHA

#关闭命令
masterha_stop --conf=/etc/mha/app1.cnf
#启动命令
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

1.4 检查MHA状态

masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:4153) is running(0:PING_OK), master:10.0.1.11

第十二个里程: 部署binlog server<<==>>额外的数据补偿

1.1 说明

MHA架构中binlog server是用来专门复制主库的二进制,当主库宕机以后SSH不通时,可以同步binlog server来把数据补偿给新主

1.2 binlog -server部署的前提

1. 必须和主库一样的版本
2. 支持GTID

1.3 部署binlog-server流程

第一个里程: 创建相应的目录并授权

mkdir /soft
mkdir /data/mysql/data -p
mkdir /data/binlog
mkdir /data/error
mkdir /data/mysql/binlog
chown -R mysql:mysql /data/*

第二个里程: 编写配置文件

vim /etc/my.cnf
#服务端
[mysqld]
user=mysql
#软件安装路劲
basedir=/soft/mysql5726
#数据路劲
datadir=/data/mysql/data
#服务端socket文件位置
socket=/tmp/mysql.sock
#服务器ID号
server_id=30
#二进制日志
log_bin=/data/binlog/mysql-bin
#错误日志路劲
log_error=/data/error/mysql.log
log_timestamps=system
#端口号
port=3306
#GTID
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
#客户端
[mysql]
#客户端socket文件位置
socket=/tmp/mysql.sock

第三个里程: 编写启动脚本

vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000

第四个里程: 初始化数据库

mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726  --datadir=/data/mysql/data 

第五个里程: 启动数据库

systemctl start mysqld

第六个里程: 设置管理员密码

mysqladmin -uroot -p password 123

第七个里程: 做软连接

ln -s /soft/mysql5726/bin/mysqlbinlog   /usr/bin/mysqlbinlog
ln -s /soft/mysql5726/bin/mysql           /usr/bin/mysql

第八个里程: 安装node软件包

yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

第九个里程: 修改MHA 配置文件(管理机上执行)

vim /etc/mha/app1.cnf 
[binlog1]
no_master=1                             
hostname=192.168.114.53
master_binlog_dir=/data/mysql/binlog   
#参数说明:
no_master=1                             不参加选主
hostname=192.168.114.53                 主机名称(这里用IP地址表示的)
master_binlog_dir=/data/mysql/binlog    保存主库的二进制目录
#注意
保存主库的二进制目录一定要和主库的二进制目录不一样

第十个里程: 拉取主库binlog日志(binlog server 上执行 )

#必须进入到自己创建好的目录
cd /data/mysql/binlog 
#放在后台一直监控主库的二进制,一有新的就拉取过来
mysqlbinlog  -R --host=192.168.114.50 --user=mha --password=mha --raw  --stop-never mysql-bin.000002 & 
*****************************************************************
注意:
在实际生产中拉取日志的起点,需要按照目前主库正在使用的binlog为起点
****************************************************************
#参数说明
--raw:   以binlog 格式存储日志,方便后期使用;
--host:  远程库的主机 IP 或者主机名;
--port:  远端库的端口号;
--user:  远程库上用于复制的账号;
--password: 远端库上复制账号的密码;
--stop-never: 一直连接到远程的server上读取binlog日志,直接到远程的server关闭后才会退出或是被pkill掉
--stop-never-slave-server-id:如果需要启动多个 binlog server ,需要给 binlog server 指定 server-id
--result-file: 指定存储到本地的目录,注意后缀需要加上/

第十一个里程: 重启MHA(管理节点执行)

#关闭命令
masterha_stop --conf=/etc/mha/app1.cnf
#启动命令
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

第十二个里程: 检查MHA状态(管理节点执行)

[root@db03 app1]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:20716) is running(0:PING_OK), master:192.168.114.50

第3章 故障恢复模拟

1.1 模拟场景

主库宕机
systemctl stop mysqld
故障预想:
1. 管理机MHA停止工作
2. VIP会飘到新主上
3. binlog server 停止工作

1.2 恢复故障

第一个里程:启动故障节点

systemctl start mysqld

第二个里程:重新构建主从关系

CHANGE MASTER TO 
MASTER_HOST=\'192.168.114.51\',
MASTER_PORT=3306, 
MASTER_AUTO_POSITION=1, 
MASTER_USER=\'repl\', 
MASTER_PASSWORD=\'123\';
--开启线程
start slave ;
--说明:
MHA宕机以后恢复主从的时候,只需要把宕机的那台重新构建主从关系即可,没有宕机的那一台,会自动与新的主节点构成主从关系的

第三个里程: 恢复配置文件(管理机)

因为MHA是一个一次性的高可用,它宕机以后会把原来的配置文件的主库给删除,所以我们重加进去就可以了
[server1]
hostname=10.0.1.11
port=3306
[server2]
hostname=10.0.1.12
port=3306
[server3]
hostname=10.0.1.13
port=3306

第四个里程: 启动MHA

#启动命令
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
#检查状态
[root@db03 tmp]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:20948) is running(0:PING_OK), master:192.168.114.51

第五个里程: 恢复binlogserver

cd /data/mysql/binlog    
rm -rf /data/mysql/binlog/*
mysqlbinlog  -R --host=192.168.114.51 --user=mha --password=mha --raw  --stop-never mysql-bin.000002 &

第4章 MHA介绍

1.1 介绍

1主2从1binlog server,master:db01   slave:db02   db03 binlog server ):
MHA 高可用方案软件构成
Manager软件:管理节点上安装
Node软件:所有节点都要安装

1.2 MHA软件构成

Manager工具包主要包括以下几个工具:
masterha_manger              启动MHA 
masterha_check_ssh           检查MHA的SSH配置状况 
masterha_check_repl          检查MySQL复制状况 
masterha_master_monitor      检测master是否宕机 
masterha_check_status        检测当前MHA运行状态 
masterha_master_switch       控制故障转移(自动或者手动)
masterha_conf_host           添加或删除配置的server信息

Node工具包主要包括以下几个工具:
这些工具通常由MHA Manager的脚本触发,无需人为操作
save_binary_logs             保存和复制master的二进制日志 
apply_diff_relay_logs        识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs             清除中继日志(不会阻塞SQL线程)

1.3 MHA架构工作原理

主库宕机处理过程 
1.	监控节点 (通过配置文件获取所有节点信息) 
系统,网络,SSH连接性
主从状态,重点是主库
2. 选主
(1) 如果判断从库(position或者GTID),数据有差异,最接近于Master的slave,成为备选主 
(2) 如果判断从库(position或者GTID),数据一致,按照配置文件顺序,选主. 
(3) 如果设定有权重(candidate_master=1),按照权重强制指定备选主. 
1. 默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效. 
2. 如果check_repl_delay=0的化,即使落后很多日志,也强制选择其为备选主 
3. 数据补偿 
(1) 当SSH能连接,从库对比主库GTID 或者position号,立即将二进制日志保存至各个从节点并且应用(save_binary_logs ) 
(2) 当SSH不能连接, 对比从库之间的relaylog的差异(apply_diff_relay_logs) 
4. Failover 将备选主进行身份切换,对外提供服务 其余从库和新主库确认新的主从关系 
5. 应用透明(VIP) 
6. 故障切换通知(send_reprt) 
7. 二次数据补偿(binlog_server) 
8. 自愈自治(待开发...)

第5章 Manager额外参数介绍

说明:
主库宕机谁来接管?
1. 所有从节点日志都是一致的,默认会以配置文件的顺序去选择一个新主。
2. 从节点日志不一致,自动选择最接近于主库的从库
3. 如果对于某节点设定了权重(candidate_master=1),权重节点会优先选择。
但是此节点日志量落后主库100M日志的话,也不会被选择。可以配合check_repl_delay=0,关闭日志量的检查,强制选择候选节点。

(1)  ping_interval=1
#设置监控主库,发送ping包的时间间隔,尝试三次没有回应的时候自动进行failover
(2) candidate_master=1
#设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
(3)check_repl_delay=0
#默认情况下如果一个slave落后master 100M的relay logs的话,
MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

第6章 MHA的Failover如何实现

1.1 实现流程

从启动--->故障--->转移--->业务恢复
(1) MHA通过masterha_manger脚本启动MHA的功能.
(2) 在manager启动之前,会自动检查ssh互信(masterha_check_ssh)和主从状态(masterha_check_repl)
(3) MHA-manager 通过 masterha_master_monitor脚本(每隔ping_interval秒)
(4) masterha_master_monitor探测主库3次无心跳之后,就认为主库宕机了.
(5) 进行选主过程
	算法一: 
	读取配置文件中是否有强制选主的参数?
	candidate_master=1    ===强制选主
	算法二:
	自动判断所有从库的日志量.将最接近主库数据的从库作为新主
	check_repl_delay=0
	算法三:
	按照配置文件先后顺序的进行选新主.
	
扩展一下:
candidate_master=1 应用场景
(1) MHA+KeepAlive VIP(早期MHA架构)
(2) 多地多中心
(6) 数据补偿 
判断主库SSH的连通性
情况一: SSH能连
调用 save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点,恢复
情况二: SSH无法连接
调用 apply_diff_relay_logs 脚本,计算从库的relaylog的差异,恢复到从库
(6.1) 提供额外的数据补偿的功能  
(7) 解除从库身份
(8) 剩余从库和新主库构建主从关系
(9) 应用透明  
(10) 故障节点自愈(待开发...)
(11) 故障提醒

第7章 MHA故障处理思路

1.1 处理故障的思路

 恢复MHA 故障
(1) 检查各个节点是否启动
(2) 找到主库是谁
(3) 恢复1主2从
CHANGE MASTER TO MASTER_HOST=\'192.168.114.50\', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';
(4) 检查配置文件,恢复节点信息
[server1]
hostname=10.0.0.51
port=3306
[server2]
hostname=10.0.0.52
port=3306
[server3]
hostname=10.0.0.53
port=3306
(5) 检查vip和binlogserver 
1. 检查vip是否在主库,如果不在,手工调整到主库
2. 重新启动binlogserver 拉取
[root@db03 binlog]# mysqlbinlog  -R --host=10.0.0.51 --user=mha --password=mha --raw  --stop-never mysql-bin.000004 &
(6) 启动Mananer 
[root@db03 bin]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/app1.cnf

第8章 管理员在高可用架构维护的职责

1. 搭建:MHA+VIP+SendReport+BinlogServer
2. 监控及故障处理 
3. 高可用架构的优化 核心是:尽可能降低主从的延时,让MHA花在数据补偿上的时间尽量减少。 
4. 5.7 版本,开启GTID模式,开启从库SQL并发复制。

以上是关于MySQL-高可用架构MHA的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-高可用架构MHA

MYSQL高可用集群架构-MHA架构

MYSQL高可用集群架构-MHA架构

MySQL高可用架构之MHA

Linux云计算-MySQL-高可用集群架构-MHA 架构

mysql实现高可用架构之MHA