MHA高可用

MHA架构

MHA(Master High Availability)是一套比较成熟的 MySQL 高可用方案,也是一款优秀的故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。MHA还支持在线快速将Master切换到其他主机,通常只需0.5-2秒。
在这里插入图片描述
MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。

  • MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。负责检测master是否宕机、控制故障转移、检查MySQL复制状况等。
  • MHA Node运行在每台MySQL服务器上,不管是Master角色,还是Slave角色,都称为Node,是被监控管理的对象节点,负责保存和复制master的二进制日志、识别差异的中继日志事件并将其差异的事件应用于其他的slave、清除中继日志。

MHA故障处理机制:

  • 把宕机master的binlog保存下来
  • 根据binlog位置点找到最新的slave
  • 用最新slave的relay log修复其它slave
  • 将保存下来的binlog在最新的slave上恢复
  • 将最新的slave提升为master
  • 将其它slave重新指向新提升的master,并开启主从复制

实验架构

角色IP主机名server_id功能
master192.168.192.130Master1主库
candidate master192.168.192.131Slave012从库+主备
slave192.168.192.132Slave023从库
MHA manager192.168.192.133Manager4监控管理

软件版本
在这里插入图片描述

准备

centos7安装mysql
MySQL 主从复制
MySQL 半主从复制
我们根据以上三篇文章配置好一个主,两个从库,采用半同步复制得方式得环境。

所有的my.cnf添加配置

不管是slave还是master都需要打开log_bin、relay_log,因为mha主备切换的功能需要。

#bin_log配置
log_bin=mysql-bin
server-id=xx 
sync-binlog=1 

 #relay_log配置 
 relay_log=mysql-relay-bin 
 log_slave_updates=1 
 relay_log_purge=0 
 read_only=1

Host配置

在所有服务器上使用命令 vi /etc/hosts 中添加ip对应域名

192.168.192.130 master
192.168.192.131 slave1
192.168.192.132 slave2
192.168.192.133 mha

ssh互通访问

在四台服务器上分别执行下面命令,生成公钥和私钥,换行回车采用默认值

ssh-keygen -t rsa

使用命令vi /etc/ssh/ssh_config,编辑文件添加StrictHostKeyChecking no。然后在三台MySQL服务器分别执行命令ssh-copy-id ip,将公钥拷到MHA Manager服务器上。
在这里插入图片描述
从MHA Manager服务器执行下面命令,向其他三台MySQL服务器分发公钥信息。

scp /root/.ssh/authorized_keys 192.168.31.199:$PWD 
scp /root/.ssh/authorized_keys 192.168.31.165:$PWD 
scp /root/.ssh/authorized_keys 192.168.31.142:$PWD

安装mha

MySQL5.7对应的MHA版本是0.5.8,三台MySQL服务器需要安装node,MHA Manager服务器需要安装manager和node。

MHA node安装

在四台服务器上安装mha4mysql-node。
MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。

yum install perl-DBD-MySQL -y 
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

MHA manager安装

在MHA Manager服务器安装mha4mysql-node和mha4mysql-manager。MHA的manager又依赖了perl-Config-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别进行安装。

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
rpm -ivh epel-release-latest-7.noarch.rpm 
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel- ForkManager -y 
wget https://github.com/yoshinorim/mha4mysql- node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
wget https://github.com/yoshinorim/mha4mysql- manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm 
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

MHA 配置文件

MHA Manager服务器需要为每个监控的 Master/Slave 集群提供一个专用的配置文件,而所有的Master/Slave 集群也可共享全局配置。

初始化配置目录
 mkdir -p /var/log/mha/app1 
 touch /var/log/mha/app1/manager.log

在这里插入图片描述

配置监控全局配置文件

vim /etc/masterha_default.cnf

[server default]
#用户名
user=root
#密码
password=root
#ssh登录账号 
ssh_user=root
#主从复制账号 
repl_user=root
#主从复制密码 
repl_password=root
#ping次数 
ping_interval=1
#二次检查的主机 
secondary_check_script=masterha_secondary_check -s 192.168.192.130 -s 192.168.192.131 -s 192.168.192.132
配置监控实例配置文件

vim /etc/mha/app1.cnf

[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1

[server1]
candidate_master=1
hostname=192.168.192.130
master_binlog_dir="/var/lib/mysql"


[server2]
candidate_master=1
hostname=192.168.192.131
master_binlog_dir="/var/lib/mysql"

[server3]
candidate_master=1
hostname=192.168.192.132
master_binlog_dir="/var/lib/mysql"

MHA 配置检测以及启动停止日志相关操作

执行ssh通信检测:

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

检测MySQL主从复制:

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

出现“MySQL Replication Health is OK.”证明MySQL复制集群没有问题。

MHA Manager启动:

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 Manager停止:

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

查看监控状态命令如下:

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

查看监控日志命令如下:

tail -f /var/log/mha/app1/manager.log

测试MHA故障转移

我们停掉master库,然后查看manager.log,会发现主库切换了。
在这里插入图片描述
在这里插入图片描述

将原主启动切换回主

当我们将master 启动后需要设置其向新主库同步

change master to master_host='192.168.31.199',master_port=3306,master_user='root',master_password ='root',master_log_file='xxx',master_log_pos=xxx; 
start slave; // 开启同步

使用MHA在线切换命令将原主切换回来

masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive -- new_master_host=192.168.31.199 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在这里插入图片描述

难点总结

  1. MHA主备切换时会自动把之前app1.cnf中master得配置删除,这样我们要重启master后准备切换主机时必须手动把配置添加过去。
  2. MHA主备切换存在一个时间限定,这段时间段内只能切换一次,所以我们反复测试得时候可能会失败,这样就需要删除一个文件再重新启动MHA manager才行。
  3. 如果一步小心动了从库得数据,从库比对binlog不过得话,slave 线程得状态就会异常,这样就相当于下线了,就无法切换了,无法同步了。

线上MYSQL同步报错故障处理方法总结(必看篇)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值