MHA的搭建与故障切换

版权声明:本文为博主原创文章,未经博主允许不得转载,转载附上原文链接即可。 https://blog.csdn.net/GX_1_11_real/article/details/87521223

前言


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




环境



系统:centos7.6
数据库:5.5.60-MariaDB
MHA软件版本:mha4mysql-manager-0.56   mha4mysql-node-0.56

master     192.168.92.139 
slave1     192.168.92.140 
slave2     192.168.92.144
manager    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.140
ssh-copy-id  192.168.92.144



五、mysql主从配置



【1】配置文件设置


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


<1>master节点配置文件

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

在这里插入图片描述



<2>slave节点配置文件

vim /etc/my.cnf

[mysqld]
server-id = 2                       #各节点的id均必须唯一
relay-log = relay-log
log-bin = master-log
read_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]                                         #节点1
hostname=192.168.92.139                           #节点1的主机ip,通常为主库IP
ssh_port=22                                       #节点1 的ssh端口
candidate_master=1                                #将来可作为master候选主节点

[server2]                                         #节点2
hostname=192.168.92.140                           #节点2的主机ip,通常为备用主库IP
ssh_port=22                                       #节点2的ssh端口
candidate_master=1                                #将来可作为master候选主节点

[server3]                                         #节点3
hostname=192.168.92.144                           #节点3的主机ip,通常为从库IP
ssh_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-log
log-bin = master-log
read_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.cnf

masterha_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)查看其他节点的主从状态

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GX_1_11_real/article/details/87521223
今日推荐