MHA的搭建与故障切换
发布日期:2021-07-01 04:12:26 浏览次数:2 分类:技术文章

本文共 7246 字,大约阅读时间需要 24 分钟。

前言


前面介绍了MHA的概念,下面要介绍的MHA的搭建及故障切换的具体操作。




环境



系统:centos7.6数据库:5.5.60-MariaDBMHA软件版本:mha4mysql-manager-0.56   mha4mysql-node-0.56master     192.168.92.139 slave1     192.168.92.140 slave2     192.168.92.144manager    192.168.92.144



一、软件安装



【1】Perl的依赖模块安装


需要所有节点安装


<1>安装epel源

yum -y install epel-release


<2>安装依赖包

yum -y install prel perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes  perl-IO-Socket-SSL


【2】mysql数据库安装


既可yum安装也可编译安装,并且还可安装mariadb。要根据需求选择。

本文为了方便,直接使用yum安装mariadb。

需要在master及slave节点安装相同版本的数据库。


<1>mariadb安装

yum -y install mariadb*


【3】MHA节点安装



<1>下载安装包

下载后,将安装包上传到相应服务器

下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

在这里插入图片描述



<2>安装node


每台被监控的节点都需安装


rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm


<2>安装manager


可单独部署在一台独立机器上,也可以部署在一台slave节点上。可用于管理多个master/slave集群, 每个master/slave集群称作一个application

在manager节点上要先安装mha4mysql-node再安装manager,可避免依赖mha4mysql-node导致的问题


rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm



二、添加解析(可跳过)


为了方便操作,便于观察,可以更改主机名和添加解析(可跳过)


vim   /etc/hostname                 改主机名,每台皆如此 vim   /etc/hosts                    添加解析       scp  /etc/hosts  IP:/etc/hosts      将解析推送到其他所有服务器



三、建立时间同步


<1>在每台执行,实现时间同步

yum -y install ntp   ntpdate cn.pool.ntp.org



四、建立多机互信


每台服务器间都要进行密钥的创建及公钥的推送


<1>创建密钥

ssh-keygen


<2>将本机的公钥复制到远程机器的authorized_keys文件中

ssh-copy-id  192.168.92.139 ssh-copy-id  192.168.92.140ssh-copy-id  192.168.92.144



五、mysql主从配置



【1】配置文件设置


各节点都要开启二进制日志及中继日志, 各从节点必须显示启用其read-only属性


<1>master节点配置文件

[mysqld] server-id = 1                #复制集群中的各节点的id均必须唯一log-bin = master-logrelay-log = relay-logskip_name_resolve = ON       #禁止mysql域名解析

在这里插入图片描述



<2>slave节点配置文件

vim /etc/my.cnf

[mysqld]server-id = 2                       #各节点的id均必须唯一relay-log = relay-loglog-bin = master-logread_only = 1                       #只读模式relay_log_purge = 0                 #自动清空不再需要的中继日志skip_name_resolve = ON              #禁止mysql域名解析

在这里插入图片描述

在这里插入图片描述



<3>启动mariadb

systemctl start mariadb


【2】主从搭建


mysql权限设置,可参考下列链接:

https://blog.csdn.net/GX_1_11_real/article/details/81200566


<1>master节点授权


在每个节点上执行。因为MHA可以切换主从,代表着每个从库都有切换为主库的可能,所以下面的授权,要在每个节点上执行。


格式:grant replication slave on *.*  to ‘slave’@‘从库的IP’ identified by ‘密码’;grant replication slave,replication  client  on *.* to 'slave'@'192.168.92.%' identified by 'centos';    #创建用于同步的用户并授权flush privileges;           #刷新权限;show master status;         #查看master现在的状态,显示的file名字及position位置编号;

在这里插入图片描述



<2>所有从库指向主库


在每个从库上执行


格式:change master to master_host = ‘主库的IP’, master_user = ‘设置主从时设定的主库的用户’, master_port=主库的端口, master_password=’主库设定的密码’, master_log_file = ‘主库状态的File’, master_log_pos=主库状态的Position;   change master to master_host='192.168.92.139',master_user='slave',master_password='centos',master_log_file='master-log.000007',master_log_pos=245; #连接指定的主库start slave;                   #开启从库show slave status \G;          #查看从库状态

在这里插入图片描述


注意:如下即为成功,如其中任意一个不为Yes即为失败。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes




六、MHA配置



【1】MHA授权


在每个节点上执行,允许所有其他节点可远程访问


grant all on *.* to 'MHA'@'192.168.%' identified by 'mhatest';


【2】MHA配置文件创建


要在mysql的主节点上配置,并创建相应目录及文件

可为每个application,创建相应配置文件,用于管理多个集群



<1>仅在manager节点上创建目录

作为工作目录,存放配置文件及日志

mkdir /etc/mha_master


<2>在所有node节点上创建目录

用于存放日志及二进制文件

mkdir  /mydata/mha_master/mha01


<3>编写MHA配置文件


在下方会利用到前几步的授权信息及创建的目录


vim /etc/mha_master/mha01.cnf [server default]user=MHA                                          #MHA管理用户password=mhatest                                  #MHA管理密码manager_workdir=/etc/mha_master/mha01             #mha_master的工作目录manager_log=/etc/mha_master/manager.log           #mha_master的日志文件remote_workdir=/mydata/mha_master/mha01           #每个远程主机的工作目录ssh_user=root                                     #基于ssh秘钥认证的用户repl_user=slave                                   #数据库用户名repl_password=centos                              #数据库密码ping_interval=1                                   #ping间隔时长,s为单位[server1]                                         #节点1hostname=192.168.92.139                           #节点1的主机ip,通常为主库IPssh_port=22                                       #节点1 的ssh端口candidate_master=1                                #将来可作为master候选主节点[server2]                                         #节点2hostname=192.168.92.140                           #节点2的主机ip,通常为备用主库IPssh_port=22                                       #节点2的ssh端口candidate_master=1                                #将来可作为master候选主节点[server3]                                         #节点3hostname=192.168.92.144                           #节点3的主机ip,通常为从库IPssh_port=22                                       #节点3的ssh端口candidate_master=1                                #将来可作为master候选主节点

在这里插入图片描述

本文为了演示,加了注释,生产中不可有空格,否则后面检测或报错



【3】检测配置


<1>检测各节点ssh互相是否成功

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

在这里插入图片描述

如不成功,请再次进行互信操作



<2>检查数据库是否可成功的连接

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

在这里插入图片描述

如不成功,请将MHA授权及master节点授权操作在每个数据库中执行,并检测MHA配置文件中的数据库连接的用户名及密码



【4】MHA启动


仅在manager节点上执行


<1>后台启动MHA

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


<2>查看master的状态

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

在这里插入图片描述



<3>停止MHA操作

如需要停止MHA,可使用如下命令或kill后台进程

masterha_stop -conf=/etc/mha_master/mha01.cnf

在这里插入图片描述




七、MHA故障转移



【1】MHA自动切换


启动MHA后,模拟主库故障,进行转移


<1>主库故障

进入master节点执行

pkill -9 mysql

在这里插入图片描述



<2>查看MHA状态

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

在这里插入图片描述



<3>查看MHA配置文件中的节点2的数据库

在这里插入图片描述



<4>查看MHA配置文件中的节点3的数据库

在这里插入图片描述



<5>查看MHA的manager节点的日志

tail -f manager.log

在这里插入图片描述

结论:节点3的数据库的主库自动切换为了节点2的数据库



【2】MHA原主库恢复并添加回MHA


在这里实际上有两个方法:

恢复原主库后将其变为新主库的从库
或恢复原主库后,利用MHA将主库手动切换回原主库


<1>使用原主库的数据库备份对原主库进行恢复

例如:

mysql -uroot -p‘…’ database -f < /tmp/mysql.bask.sql

也可参考下列链接:

https://blog.csdn.net/GX_1_11_real/article/details/82427205



<2>修改原主库的配置文件

按照slave节点配置文件操作修改

vim /etc/my.cnf  [mysqld]server-id = 4                       #保证各节点的id均必须唯一relay-log = relay-loglog-bin = master-logread_only = 1                       #只读模式relay_log_purge = 0                 #自动清空不再需要的中继日志skip_name_resolve = ON              #禁止mysql域名解析

在这里插入图片描述



<3>将原主库切为新主库的从库

(1)查看新主库

show master status;

在这里插入图片描述



(2)进入原主库再次授权

(此操作是为了避免MHA测试时,不成功)

grant replication slave,replication  client  on *.* to 'slave'@'192.168.92.%' identified by 'centos';grant all on *.* to 'MHA'@'192.168.%' identified by 'mhatest';


(3)进入原主库中指向新主库

change master to master_host='192.168.92.140',master_user='slave',master_password='centos',master_log_file='master-log.000009',master_log_pos=517;start slave;show slave status\G;

在这里插入图片描述



<4>MHA配置文件调整

将新主库的ip写到节点1,原主库ip调整为节点2

在这里插入图片描述



<5>启动MHA并检测状态


启动MHA前,应先进行检测,并将mha_master的工作目录中文件删除,否则当新主库故障时,MHA无法再次进行切换。

在这里插入图片描述


(1)将mha_master的工作目录中文件删除

cd /etc/mha_master/mha01/rm -rf *

(2)启动MHA

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

在这里插入图片描述

现在已经将原主库切为了新主库的从库,并启动MHA了。



【3】MHA手动切换


如无需将主库切为原主库,可跳过

注意:

手动在线切换,切换时需要将运行的MHA停掉后才能切换
切换的时间长短是由recover时的relay日志的大小决定的


命令参数:--conf                              使用的配置文件--new_master_host                   切换后的ip--new_master_port                   切换后的端口--orig_master_is_new_slave          将原master变为slave节点--running_updates_limit=10000       延迟在此时间范围内都可切换(单位为s)

<1>在线切换

下列命令在manager节点执行,遇到询问直接输入yes

masterha_stop -conf=/etc/mha_master/mha01.cnfmasterha_master_switch --conf=/etc/mha_master/mha01.cnf --master_state=alive --new_master_host=192.168.92.139 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述



(2)查看其他节点的主从状态

在这里插入图片描述

转载地址:https://moxiao.blog.csdn.net/article/details/87521223 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:阿里云实例迁移到阿里云其它国家和地区的操作
下一篇:MHA的概念

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月25日 23时53分31秒