本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!