MHA高可用环境搭建

上一篇 文章(https://blog.csdn.net/aofavx/article/details/106783795)已Mysql主从模式部署过程。现在使用MHA实现数据库的高可用性。
​ 参考网址:https://www.cnblogs.com/keerya/p/7883766.html

1.软件版本和环境:

系统:CentOS7系统

需要软件

​ mysql5.7.30安装包:mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar

​ mha4mysql管理端文件:mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

​ mha4mysql节点文件:mha4mysql-node-0.58-0.el7.centos.noarch.rpm

2.各个机器IP和角色

​ 172.18.0.12 – master主库 --负责数据写入

​ 172.18.0.13 – slaver从库1—负责数据读取

​ 172.18.0.14 – slaver从库2 —负责数据读取

​ 172.18.0.15 – MHA服务器 —数据库节点监控和自动切换master/slave 节点。

2.MHA高可用环境搭建

1.在 master 节点上授管理员用户可以远程访问。

grant all on *.* to 'mhaadmin'@'%' identified by 'mhaadmin';

3.在各节点服务器上生成密钥

ssh-keygen -t rsa   (路径默认,密码无)

4.复制公钥到其他服务器

ssh-copy-id -i .ssh/id_rsa.pub root@172.18.0.12
ssh-copy-id -i .ssh/id_rsa.pub root@172.18.0.13
ssh-copy-id -i .ssh/id_rsa.pub root@172.18.0.14
ssh-copy-id -i .ssh/id_rsa.pub root@172.18.0.15

5.下载MHA安装包 地址https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

6.安装mha

yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm   4个节点都安装
yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha服务器安装

安装manager可能会有perl的错误。可以修改yum镜像地址,安装依赖包。
在这里插入图片描述也可以按照下面错误记录中的方法解决。

7.设置mha配置文件
先创建/etc/mha_master,/etc/mha_master/work 文件夹

[server default] 			//适用于server1,2,3个server的配置
user=mhaadmin 				//mha管理用户
password=mhaadmin 			//mha管理密码
manager_workdir=/etc/mha_master/ 		//mha_master自己的工作路径
manager_log=/etc/mha_master/manager.log 	// mha_master自己的日志文件
remote_workdir=/etc/mha_master/work		//每个远程主机的工作目录在何处
ssh_user=root 				// 基于ssh的密钥认证
repl_user=root				//数据库用户名
repl_password=root		//数据库密码
ping_interval=1 			//ping间隔时长
[server1] 					//节点2
hostname=172.18.0.12 	//节点2主机地址
ssh_port=22 				//节点2的ssh端口
candidate_master=1 			//将来可不可以成为master候选节点/主节点
[server2]
hostname=172.18.0.13
ssh_port=22
candidate_master=1
[server3]
hostname=172.18.0.14
ssh_port=22
candidate_master=1

8.检测各节点通信

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

9.检测集群连接配置

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

​ 输出 日志:

Mon Jun 15 05:55:47 2020 - [info] Checking replication health on 172.18.0.13..
Mon Jun 15 05:55:47 2020 - [info]  ok.
Mon Jun 15 05:55:47 2020 - [info] Checking replication health on 172.18.0.14..
Mon Jun 15 05:55:47 2020 - [info]  ok.
Mon Jun 15 05:55:47 2020 - [warning] master_ip_failover_script is not defined.
Mon Jun 15 05:55:47 2020 - [warning] shutdown_script is not defined.
Mon Jun 15 05:55:47 2020 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.
没有错误提示信息代表启动成功。

10.启用MHA

nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &

停止MHA命令:  masterha_stop -conf=/etc/mha_master/mha.cnf

11.查看master节点状态

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

输出日志:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
mha (pid:631) is running(0:PING_OK), master:172.18.0.12
表示MHA服务运行OK,否则, 则会显示为类似“mha is stopped(1:NOT_RUNNING)
5.测试主从节点切换
  • 关掉master服务器,模拟主节点崩溃。查看MHA日志 tail -f /etc/mha_master/manager.log

在这里插入图片描述

表示 manager 检测到172.18.0.12节点故障, 而后自动执行故障转移, 将172.18.0.13提升为主节点。

注意,故障转移完成后, manager将会自动停止, 此时使用 masterha_check_status 命令检测将会遇到错误提示, 如下所示:

在这里插入图片描述
13.在新的主库中添加记录,查看从库同步情况

在这里插入图片描述
​ 从库记录:

在这里插入图片描述
​ 从库slave状态:
在这里插入图片描述

问题整理

1.安装mysql-server报错:
	error: Failed dependencies:
	/usr/bin/perl is needed by mysql-community-server-5.7.30-1.el7.x86_64

​ 解决方法:
​ 安装依赖包 net-tools.x86_64,libaio.x86_64,perl.x86_64 ,numactl 。

yum -y install perl.x86_64
yum -y install libaio.x86_64
yum -y install net-tools.x86_64	
yum -y install numactl

参考网址:https://blog.csdn.net/u010886217/article/details/89416159

2.从库启动同步失败报错:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;

​ 问题分析

​ 问题提示主从使用了相同的server UUID,一个个的检查:

​ 检查主从server_id

show variables like 'server_id';

​ 检查主从状态:

show master status;

​ 最后检查发现他们的auto.cnf中的server-uuid是一样的.因为是从同一个msyql镜像启动的容器

​ 问题解决

​ 停止从库的mysqld服务,删除他的auto.cnf文件,再启动数据库服务即可:

 systemctl stop mysqld.service
 mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
 systemctl start mysqld.service

​ 再查看从库状态,已开启主库的同步。

show slave status\G;

​ 参考网址:https://blog.csdn.net/sunbocong/article/details/81634296

3.安装MHA-manager报错
yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
Error: Package: mha4mysql-manager-0.58-0.el7.centos.noarch (/mha4mysql-manager-0.58-0.el7.centos.noarch)
           Requires: perl(Log::Dispatch)
Error: Package: mha4mysql-manager-0.58-0.el7.centos.noarch (/mha4mysql-manager-0.58-0.el7.centos.noarch)
           Requires: perl(Log::Dispatch::File)
Error: Package: mha4mysql-manager-0.58-0.el7.centos.noarch (/mha4mysql-manager-0.58-0.el7.centos.noarch)
           Requires: perl(Log::Dispatch::Screen)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

解决方法:

解决:
更新epel 
  yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

此方法使用所有perl依赖包报错。:
1、安装
yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

​ 参考网址:https://blog.csdn.net/q936889811/article/details/80077344

​ https://fedoraproject.org/wiki/EPEL

​ https://blog.csdn.net/aeolus_pu/article/details/8991652

4.从新选举新master后,slaver的数据库连不上新的master. 执行show slave status \G; 报错
​	Last_IO_Error: error connecting to master 'root@172.18.0.13:3306' - retry-time: 60  retries: 3

​ 解决方法:
​ 在新master上授权root用户可以在其他ip访问。

	grant all privileges on *.* to 'root'@'%' identified by 'root';
	privileges
5.原掉线的master重新上线后,MHA检测报错:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RtJxEypD-1592279018087)(img/image-20200615153219614.png)]

这句话的大概意思,有两个成为主,而且两个都可写,按照原则同一时间只能有一台主机可以数据写入,不然可能会造成数据不一致的灾难性故障!
解决方法:

set global read_only=1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值