MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供automating master failover功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,MHA还提供了master节点的在线切换功能。
MHA的两种角色:MHA Manager和MHA Node
(1)MHA Manager:通常单独部署在独立机器上管理多个master/slave集群,每个master/slave集群称作一个application
(2)MHA Node:运行在每台MySQL服务器上,它通过监控具备解析和清理logs功能的脚本来加快故障转移。
MySQL主从复制简单教程
首先得配置MySQL主从复制环境,最好配置为半同步状态,MHA对MySQL复制环境有特殊要求,如各节点都要开启二进制日志及中继日志,各从节点必须显示启用其read-only属性,并关闭relay_log_purge功能。
角色分配
node1: MHA Manager
node2: mysql master
node3: mysql slave
node4: mysql slave
各个节点解析主机名,这里在/etc/hosts文件添加
192.168.6.6 node1
192.168.6.7 node2
192.168.6.8 node3
192.168.6.9 node4
初始主节点master配置/etc/my.cnf.d/server.cnf
server_id=1 #各个节点的ID要唯一
relay-log=relay-bin
log-bin=master-bin
所有slave节点依赖的配置/etc/my.cnf.d/server.cnf
server_id=2 #各个节点的ID不要重复
relay-log=relay-bin
log-bin=master-bin
relay_log_purge=0
read_only=1
(1)按照上述要求分别配置好主从节点之后,按MySQL复制配置架构的配置方式配置完成并启动master节点和各slave节点,以及为各slave节点启动其IO和SQL线程确保主从复制运行无误
(2)因为manager要管理各个节点,所以在所有MySQL节点授权拥有管理权限的用户,因为此时为主从复制环境,仅需在master节点运行如下SQL命令即可:
mysql> GRANT ALL ON *.* TO 'mhaadmin'@'192.168.6.%' IDENTIFIED BY 'mhapass';
(3)在所有MySQL节点授权复制权限的用户,如果主节点宕机,其他节点会作为主节点,所以在所有节点上要授权复制权限账号,因为此时为主从复制环境,仅需在master节点运行如下SQL命令即可:
mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.6.%' IDENTIFIED BY 'repluser';
mysql> SHOW MASTER STATUS\G; (如果还没有启动主从复制,可以记下来二进制日志位置,方便同步)
(4)MHA集群中的各个节点彼此之间均需要基于ssh通信,以实现远程控制,以下是一种简单方法,在manager节点执行:
[root@centos7 ~]# ssh-keygen
[root@centos7 ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[root@centos7 ~]# chomd go= .ssh/authorized_keys
[root@centos7 ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@node2:/root/.ssh/
[root@centos7 ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@node3:/root/.ssh/
[root@centos7 ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@node4:/root/.ssh/
注意:请先确保node2,3,4上/root/.ssh目录存在
下载MHA安装包
在manager上用yum安装manager的rpm包和noderpm包,yum安装会解决依赖性问题
在node上只装node的rpm包
Manager节点需要为每个监控的master/slave集群提供一个专用的配置文件,而所有的master/slave集群也可共享全局配置。去哪局配置文件默认为/etc/masterha_default.cnf,其为可选配置。如果仅监控一组master/slave集群,也可直接通过application的配置来提供各服务器的默认配置信息。而每个application的配置文件路径为自定义,本例子为/etc/masterha/app1.cnf。
[server default]
user=mhaadmin # mha管理账号
password=mhapass
manager_workdir=/data/masterha/app1 # 目录不存在会自动创建
manager_log=/data/masterha/app1/manager.log # 目录不存在会自动创建
remote_workdir=/data/masterha/app1 # 各个node节点工作目录
ssh_user=root # ssh连接的用户,拥有获取日志的权限
repl_user=repluser # mysql上拥有复制权限的用户
repl_password=replpass
ping_interval=1 # 健康监控间隔
ssh_port=22 # 默认ssh端口,如果不是默认端口,可在此处定义,对全局生效,如果单个不一样可在下面单独定义
[server1]
hostname=192.168.6.7
candidate_master=1 # 主节点宕机后,是否会选为主节点
[server2]
hostname=192.168.6.8
candidate_master=1
[server3]
hostname=192.168.6.9
#ssh_port=2222
no_master=1
检查各个节点ssh通信配置是否OK
[root@centos7 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
如果输出All SSH connection tests passed successfully
检查管理的MySQL复制集群的连接参数是否OK
[root@centos7 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
如果输出"Health is OK" 说明正常通过
启动MHA
[root@centos7 ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /data/masterha/app1/manager.log 2>&1 &
# 查看节点健康状态
[root@centos7 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
# 停止MHA
[root@centos7 ~]# masterha_stop --conf=/etc/masterha/app1.cnf
测试
停止master,查看manager节点日志,显示主节点故障,而后自动执行故障转移,讲新的节点提升为主,故障转移后MHA会自动停止工作。
最后
当故障转移之后,要修复宕掉的节点,加上relay_log_purge=0
read_only=1 这两项,指向新的主节点,但是从节点从哪里开始复制?应该把主节点备份之后恢复到从节点,让从节点从指定位置复制,再启动MHA即可