Mysql主从模式下搭建MHA
Posted Lossdate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql主从模式下搭建MHA相关的知识,希望对你有一定的参考价值。
一、简介
-
MHA(Master High Availability)目前在 mysql 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司的 youshimaton(现就职于 Facebook 公司)开发,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。
-
该软件由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)
MHA Manager:
MHA Manager 可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave 节点上
MHA node:
MHA Node 运行在每台 MySQL 服务器上,MHA Manager 会定时探测集群中的 master 节点,当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明
二、环境
准备四台服务器,版本为centos7, 主库master和两个从库slave_A和slave_B都已经安装号mysql,并且实现了主从同步配置和半同步复制。
mysql安装传送门:centos安装mysq5.7.33
主从同步配置和半同步复制传送门:Mysql5.7配置主从同步
三、准备
-
为了方便操作,在各节点的/etc/hosts文件配置内容中添加如下内容:
192.168.200.135 node1.keer.com node1 192.168.200.134 node2.keer.com node2 192.168.200.133 node3.keer.com node3 192.168.200.132 node4.keer.com node4
这样,在建立ssh互通时,可以通过host 解析节点来打通私钥访问 -
master 的配置
需要修改 master 的数据库配置文件来对其进行初始化配置:
my.conf配置添加:#开启二进制日志 log-bin=master-log #开启日志 relay-log=mysql-relay-bin #关闭名称解析(非必须) skip_name_resolve
然后重启service mysql restart
-
slave 的配置
修改两个 slave 的数据库配置文件binlog-ignore-db=performance_schema binlog-ignore-db=information_schema binlog-ignore-db=sys #开启日志 relay-log = mysql-relay-bin #开启二进制日志 log-bin = mysql-bin #启用只读属性 read_only = 1 #是否自动清空不再需要中继日志 relay_log_purge = 0 #关闭名称解析(非必须) skip_name_resolve #使得更新的数据写进二进制日志中 log_slave_updates = 1
这里的binlog-ignore-db配置主库和从库要一致
然后重启service mysql restart
四、SSH互通
- 在 master 上进行授权
授权拥有管理权限的用户可在本地网络中有其他节点上远程访问所有 Mysql 节点mysql> grant all on *.* to 'mharoot'@'192.168.%.%' identified by '123456';
- ssh 互通
MHA各个节点之间需要ssh通信,因此在manager服务器上生成ssh密钥ssh-keygen -t rsa
这里的密码什么的全部点跳过即可ssh-copy-id -i .ssh/id_rsa.pub root@node1
接着进入.ssh/
可以看到:cd .ssh/ ls
然后在其余三台主从服务器也分别执行相同的操作
之后在manager服务器里执行cat authorized_keyscat authorized_keys
可以看到四组公钥
最后,把authorized_keys这个文件发送到其它三个主从服务器里scp authorized_keys root@node2:~/.ssh/ scp authorized_keys root@node3:~/.ssh/ scp authorized_keys root@node4:~/.ssh/
这样,ssh互通就完成了
五、MHA 安装
-
安装
manager、master和两个slave都需安装:mha4mysql-node-0.56-0.el6.norch.rpm
manager还需安装:mha4mysql-manager-0.56-0.el6.noarch.rpm
下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
安装mha4mysql-manager-0.56-0.el6.noarch.rpm 需要perl依赖#安装epel源(国内有墙) wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo #安装perl yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y
安装
yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm
-
配置
在manager上进行配置mkdir /etc/mha_master vim /etc/mha_master/mha.cnf
配置文件如下:
[server default] #MHA管理mysql的用户名 user=mharoot #MHA管理mysql的密码 password=123456 #mha的工作路径 manager_workdir=/etc/mha_master/app1 #mha的日志文件 manager_log=/etc/mha_master/manager.log #master二进制日志路径 master_binlog_dir=/usr/local/mysql/mysql-5.7.33/data #每个远程主机的工作目录在何处 remote_workdir=/mydata/mha_master/app1 #ssh登陆的用户名 ssh_user=root #数据库用户名 repl_user=root #数据库密码 repl_password=123456 #ping间隔时长 ping_interval=1 #配置manager管理的主从服务server1,2,3 #节点2 [server1] #节点2主机地址 hostname=192.168.200.134 #节点2的ssh端口 ssh_port=22 #master down掉的时候,可不可以竞选成为新的master(主库) candidate_master=1 [server2] hostname=192.168.200.133 ssh_port=22 candidate_master=1 [server3] hostname=192.168.200.132 ssh_port=22 candidate_master=1
-
检测配置是否生效
1)检测 ssh 通信
在 manager服务器上输入:masterha_check_ssh -conf=/etc/mha_master/mha.cnf
如果最后一行显示为[info]All SSH connection tests passed successfully. 则表示成功
2)检查MySQL复制集群的连接配置参数masterha_check_repl -conf=/etc/mha_master/mha.cnf
可能出现的问题:
问题1:Slave configurations is not valid
解决:my.conf里配置的binlog-ignore-db主库和从库要一致
问题2:Binlog setting check failed
解决:修正manage配置文件(/etc/mha_master/mha.cnf)里的主库二进制日志路径:master_binlog_dir=/usr/local/mysql/mysql-5.7.33/data
问题3:Slaves settings check failed
解决:在slave和master服务器bashrc文件的末尾添加:vi /etc/bashrc # PATH="$PATH:/usr/local/mysql/mysql-5.7.33/bin" export PATH
成功如下:
-
启动 MHA
在 manager 服务器上执行:nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
查看状态:
masterha_check_status -conf=/etc/mha_master/mha.cnf
如果想要停止 MHA:masterha_stop -conf=/etc/mha_master/mha.cnf
六、测试
- 在主服务器master上关闭mysql服务,模拟主节点down
service mysql stop
- 在manger服务器上查看日志
tail -200 /etc/mha_master/manager.log
可以看到,主服务器master failover并且将主服务器由192.168.200.134(原master)切换至192.168.200.133(原slave)
此时,manager将会自动停止,查看状态会提示:mha is stopped
七、出问题的主库恢复为从库
- 重新启动在测试步骤down掉的主库(192.168.200.134)
- 原本的 slave_B(192.168.200.133) 已经成为了新的主库,所以,在slaveB对其进行完全备份,接着把备份的数据发送到恢复后的原主库(192.168.200.134)(node2)上
mkdir /backup mysqldump --all-databases > /backup/mysql-backup-`date +%F-%T`-all.sql -uroot -p scp /backup/mysql-backup-2021-04-04-03\\:08\\:06-all.sql root@node2:~ mkdir /backup mysqldump --all-databases > /backup/mysql-b
- 然后在原master(192.168.200.134)上,对数据进行恢复
mysql < mysql-backup-2021-04-04-03\\:08\\:06-all.sql -uroot -p
- 接着在原master(192.168.200.134)上进行主从配置(原master192.168.200.134先已降级为从库)
mysql> change master to master_host='192.168.200.133', master_user='root', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos=925; mysql> start slave;
- manager重新做启动前的检查
如果没问题则重新启动managermasterha_check_repl -conf=/etc/mha_master/mha.cnf
查看状态masterha_manager -conf=/etc/mha_master/mha.cnf > /etc/mha_master/manager.log 2>&1 &
mha (pid:9561) is running(0:PING_OK), master:192.168.37.133masterha_check_status -conf=/etc/mha_master/mha.cnf
状态上可以看到,此时已启动成功,并且主库为192.168.37.133(slave_B)
P.S. 参考来源:
MySQL高可用架构之MHA
mysql实现高可用架构之MHA
MHA MySQL 高可用解决方案
以上是关于Mysql主从模式下搭建MHA的主要内容,如果未能解决你的问题,请参考以下文章