上一篇 文章(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