目录
二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装
三、搭建Mysql主从复制集群(注意所有的Mysql主从复制机器都需要打开二进制日志,可以实现自动故障切换)
四、将安装包 mha4mysql-node和 脚本一键安装mha node脚本传输给Mysql主从复制集群,并运行脚本安装(下载依赖的时候最好翻墙下载)
4.1、mha_manger发送一键安装mha_node的脚本给mysql主从复制集群
4.3、mysql主从复制集群运行一键安装mha4mysql-node-0.58的脚本
5.1、mha manager对所有mysql服务器建立免密通道
5.2、master对slave1、slave2建立免密通道
5.3、slave1对master、slave2建立免密通道
5.4、slave2对master、slave1建立免密通道
6.2、所有mysql服务器新建允许manager访问的授权用户mha,密码123456
七、在mha manager节点上配置好相关脚本、管理节点服务器
7.1、mha manager节点上复制相关脚本到/usr/local/bin下
7.2、复制自动切换时vip管理的脚本到/usr/local/bin下
7.3、修改master_ip_failover文件内容,配置vip(只配置vip(192.168.2.227)相关参数,其他默认不修改)
7.4、创建 MHA 软件目录并复制配置文件,使用app1.cnf配置文件来管理 mysql 节点服务器,配置文件一般放在/etc/目录下
7.6、测试:manager节点上测试ssh免密通道,如果正常最后会输出successfully
八、故障转移效果测试,模拟matser宕机,指定slave1成为新的master
8.3、查看/etc/masterha/app1.cnf文件是否发生改变
8.4、再来看看slave2的master_info信息(确定master服务转移到了salve1上)
九、原master故障修复(原master转为slave,指向slave1)
9.2、修复主从,原master修改master_info指向新的master(原slave1)
9.3、在 manager 节点上修改配置文件/etc/masterha/app1.cnf(再把这个记录添加进去,因为master宕机后原来的server1会被自动删除)
9.4、重启mha manager,并检查此时的master
自动failover
自动故障切换(Automatic Failover)是一种系统设计和配置策略,旨在在出现故障时自动将服务从一个失败的节点转移到另一个健康的节点,以保持系统的可用性。自动故障切换通常用于分布式系统、数据库集群、高可用性架构等场景,以减少系统停机时间并确保业务连续性。
MHA:
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL主从复制架构提供了 automating master failover (自动化主故障转移)功能。MHA 在监控到 master 节点故障时,会 提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节 点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需 切换 master/slave 节点。
参考:MYSQL高可用架构之MHA实战一 数据库主从配置(真实可用)_51CTO博客_mysql数据库主从搭建
基于mycat2+mha+keepalived的半同步主从复制MySQL cluster_mb643815027e44d的技术博客_51CTO博客
MHA 服务
MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):
MHA Manager: 通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个 master/slave 集群称作一个 application,用来管理统筹整个集群。
MHA node: 运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理
logs 功能的脚本来加快故障转移: 主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲 node 就是用来收集从节点服务器上所生成的 bin-log 。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的 保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访 问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.7的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有 一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的 slave服务器上,因此可以保证所有节点的数据一致性。
由上图我们可以看出,每个复制组内部和 Manager 之间都需要ssh实现无密码互连,只有这样, 在 Master 出故障时, Manager 才能顺利的连接进去,实现主从切换功能。
[root@mysql-1 ~]# ps aux|grep mysql root 3269 0.0 0.1 115536 1688 ? S 8月12 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pid mysql 3506 0.6 27.1 1603328 270316 ? Sl 8月12 5:28 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_error.log --open-files-limit=8192 --pid-file=/data/mysql/localhost.localdomain.pid --socket=/data/mysql/mysql.sock --port=3306 root 20706 0.0 0.1 115536 1700 ? S 04:21 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql-1.pid mysql 20945 1.7 19.2 975992 191756 ? Sl 04:21 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_error.log --open-files-limit=8192 --pid-file=/data/mysql/mysql-1.pid --socket=/data/mysql/mysql.sock --port=3306 root 21042 0.0 0.1 115408 1648 ? Ss 04:22 0:00 /bin/sh /etc/rc.d/init.d/mysqld start root 21047 0.0 0.1 115536 1700 ? S 04:22 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql-1.pid mysql 21286 2.2 19.2 975992 191820 ? Sl 04:22 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_error.log --open-files-limit=8192 --pid-file=/data/mysql/mysql-1.pid --socket=/data/mysql/mysql.sock --port=3306 root 21340 0.0 0.0 112824 988 pts/1 R+ 04:22 0:00 grep --color=auto mysql
项目:搭建Mysql主从复制、MHA高可用架构
实验项目IP地址配置:
mha_manager:
manager:192.168.2.141 #用于监控管理
vip:192.168.2.227
mha_node:
master:192.168.2.150 #开启 bin-log relay-log
slave-1:192.168.2.151 #开启 bin-log relay-log
slave-2:192.168.2.152 #开启 bin-log relay-log
MHA下载地址
mha4mysql-manager-0.58.tar.gz:
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
mha4mysql-node-0.58.tar.gz:
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
mha4mysql安装包集合
链接:https://pan.baidu.com/s/1cyM1syv8NjwOW8ExR0E21Q?pwd=z52d
提取码:z52d
[root@mha_manager ~]# ls
anaconda-ks.cfg mha4mysql-manager-0.58.tar.gz mha4mysql-node-0.58.tar.gz
[root@mha_manager ~]#
项目步骤:
一、修改主机名
[root@web-3 ~]# hostnamectl set-hostname mha_manager
[root@web-3 ~]# su -
上一次登录:五 8月 11 13:28:25 CST 2023从 192.168.2.7pts/0 上
[root@mha_manager ~]#
二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装
一键安装mha node脚本
[root@mha_manager ~]# cat onekey_install_mha_node.sh
#查看可以安装或者已安装的rpm包,并且作缓存
yum list
#下载epel源
yum install epel-release --nogpgcheck -y
#下载依赖包
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
#软件包mha4mysql-node-0.58.tar.gz放入/root目录下
cd ~
tar zxvf mha4mysql-node-0.58.tar.gz
cd mha4mysql-node-0.58
#编译安装
perl Makefile.PL
make && make install
一键安装mha mangaer脚本
[root@mha_manager ~]# cat onekey_install_mha_manager.sh
#查看可以安装或者已安装的rpm包,并且作缓存
yum list
#下载epel源
yum install epel-release --nogpgcheck -y
#下载依赖包
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
#软件包mha4mysql-manager-0.58.tar.gz放入/root目录下
cd ~
tar zxvf mha4mysql-manager-0.58.tar.gz
cd mha4mysql-manager-0.58
#编译安装
perl Makefile.PL
make && make install
三、搭建Mysql主从复制集群(注意所有的Mysql主从复制机器都需要打开二进制日志,可以实现自动故障切换)
参考:Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群_Claylpf的博客-优快云博客
四、将安装包 mha4mysql-node和 脚本一键安装mha node脚本传输给Mysql主从复制集群,并运行脚本安装(下载依赖的时候最好翻墙下载)
4.1、mha_manger发送一键安装mha_node的脚本给mysql主从复制集群
[root@mha_manager ~]# scp onekey_install_mha_node.sh root@192.168.2.150:~
The authenticity of host '192.168.2.150 (192.168.2.150)' can't be established.
ECDSA key fingerprint is SHA256:rUDllK9IdVfMva40nDGHGyHLkpuXrHJyRHRPuLbkkv8.
ECDSA key fingerprint is MD5:6d:46:aa:d1:48:87:92:8b:14:ca:d2:18:af:3b:89:51.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.150' (ECDSA) to the list of known hosts.
root@192.168.2.150's password:
onekey_install_mha_node.sh 100% 481 745.0KB/s 00:00
[root@mha_manager ~]# scp onekey_install_mha_node.sh root@192.168.2.151:~
The authenticity of host '192.168.2.151 (192.168.2.151)' can't be established.
ECDSA key fingerprint is SHA256:3SsW//YjcK0UTRAlQkOUcqMcFMaQEhZ1xRSUgHRs/JQ.
ECDSA key fingerprint is MD5:58:8e:3f:27:fb:f5:4e:83:56:70:e6:fd:f7:d0:9d:17.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.151' (ECDSA) to the list of known hosts.
root@192.168.2.151's password:
onekey_install_mha_node.sh 100% 481 287.5KB/s 00:00
[root@mha_manager ~]# scp onekey_install_mha_node.sh root@192.168.2.152:~
The authenticity of host '192.168.2.152 (192.168.2.152)' can't be established.
ECDSA key fingerprint is SHA256:t7FSFcUpEOJYIGkZo1HvvfqhsezGEz7WEScc4KTgQDU.
ECDSA key fingerprint is MD5:7c:68:1c:c3:aa:a5:34:b7:f7:4b:18:0b:93:fb:a6:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.152' (ECDSA) to the list of known hosts.
root@192.168.2.152's password:
onekey_install_mha_node.sh 100% 481 397.8KB/s 00:00
[root@mha_manager ~]#
4.2、mha_manger上需要配置有mha4mysql-manager-0.58.tar.gz和mha4mysql-node-0.58.tar.gz安装包和对应的一键安装脚本,首先执行一键安装mha4mysql-node-0.58的脚本
[root@mha_manager ~]# bash onekey_install_mha_node.sh
再执行一键安装mha4mysql-manager-0.58的脚本
[root@mha_manager ~]# bash onekey_install_mha_manager.sh
最后输出 如下所示 表示成功

本文围绕搭建Mysql主从复制、MHA高可用架构展开。介绍了自动failover和MHA的概念、MHA服务角色,给出实验项目IP地址配置和MHA下载地址。详细阐述搭建步骤,包括修改主机名、安装脚本、搭建集群等,还进行故障转移测试和原master故障修复。

最低0.47元/天 解锁文章
1272

被折叠的 条评论
为什么被折叠?



