MySQL高可用之MHA集群(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 一、MHA概述1.1 什么是 MHAMHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点故障的问题。


6、在 manager 节点上测试 ssh 无密码认证

在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully,如下所示。

masterha_check_ssh -conf=/etc/masterha/app1.cnf
 Sun Jun 12 22:44:40 2022 - [debug]  Connecting via SSH from root@192.168.72.192(192.168.72.192:22) to root@192.168.72.60(192.168.72.60:22)..
 Sun Jun 12 22:44:41 2022 - [debug]   ok.
 Sun Jun 12 22:44:41 2022 - [debug]  Connecting via SSH from root@192.168.72.192(192.168.72.192:22) to root@192.168.72.80(192.168.72.80:22)..
 Sun Jun 12 22:44:42 2022 - [debug]   ok.
 Sun Jun 12 22:44:43 2022 - [debug]
 Sun Jun 12 22:44:41 2022 - [debug]  Connecting via SSH from root@192.168.72.60(192.168.72.60:22) to root@192.168.72.192(192.168.72.192:22)..
 Sun Jun 12 22:44:42 2022 - [debug]   ok.
 Sun Jun 12 22:44:42 2022 - [debug]  Connecting via SSH from root@192.168.72.60(192.168.72.60:22) to root@192.168.72.80(192.168.72.80:22)..
 Sun Jun 12 22:44:42 2022 - [debug]   ok.
 Sun Jun 12 22:44:43 2022 - [debug]
 Sun Jun 12 22:44:41 2022 - [debug]  Connecting via SSH from root@192.168.72.80(192.168.72.80:22) to root@192.168.72.192(192.168.72.192:22)..
 Sun Jun 12 22:44:42 2022 - [debug]   ok.
 Sun Jun 12 22:44:42 2022 - [debug]  Connecting via SSH from root@192.168.72.80(192.168.72.80:22) to root@192.168.72.60(192.168.72.60:22)..
 Sun Jun 12 22:44:43 2022 - [debug]   ok.
 Sun Jun 12 22:44:43 2022 - [info] All SSH connection tests passed successfully.
复制代码


网络异常,图片无法展示
|


7、在 manager 节点上测试 mysql 主从连接情况

在 manager 节点上测试 mysql 主从连接情况,最后出现MySQL Replication Health is OK 字样说明正常。如下所示。

masterha_check_repl -conf=/etc/masterha/app1.cnf
 Sun Jun 12 22:47:28 2022 - [info] Slaves settings check done.
 Sun Jun 12 22:47:28 2022 - [info]
 192.168.72.192(192.168.72.192:3306) (current master)
  +--192.168.72.60(192.168.72.60:3306)
  +--192.168.72.80(192.168.72.80:3306)
 Sun Jun 12 22:47:28 2022 - [info] Checking replication health on 192.168.72.60..
 Sun Jun 12 22:47:28 2022 - [info]  ok.
 Sun Jun 12 22:47:28 2022 - [info] Checking replication health on 192.168.72.80..
 Sun Jun 12 22:47:28 2022 - [info]  ok.
 Sun Jun 12 22:47:28 2022 - [info] Checking master_ip_failover_script status:
 Sun Jun 12 22:47:28 2022 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.72.192 --orig_master_ip=192.168.72.192 --orig_master_port=3306
 IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.72.100===
 Checking the Status of the script.. OK
 Sun Jun 12 22:47:28 2022 - [info]  OK.
 Sun Jun 12 22:47:28 2022 - [warning] shutdown_script is not defined.
 Sun Jun 12 22:47:28 2022 - [info] Got exit code 0 (Not master dead).
 MySQL Replication Health is OK.     #出现该字样说明主从连接正常
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


8、在 manager 节点上启动 MHA

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
 ------------------------------以下都是注释-----------------------------------------------------------
 --remove_dead_master_conf   #该参数代表当发生主从切换后,老的主库的 ip 将会从配置文件中移除。
 --manger_log                #日志存放位置。
 --ignore_last_failover      #在缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机间隔不足 8 小时的话,则不会进行 Failover, 之所以这样限制是为了避免 ping-pong 效应(来回切换导致脑裂)。该参数代表忽略上次 MHA 触发切换产生的文件,默认情况下,MHA 发生切换后会在 app1.failover.complete 日志文件中记录,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换, 除非在第一次切换后删除该文件,为了方便,这里设置为--ignore_last_failover。
 -------------------------------------------------------------------------------------
 ●使用&后台运行程序:结果会输出到终端;使用Ctrl+C发送SIGINT信号,程序免疫;关闭session发送SIGHUP信号,程序关闭。
 ●使用nohup运行程序:结果默认会输出到nohup.out;使用Ctrl+C发送SIGINT信号,程序关闭;关闭session发送SIGHUP信号,程序免疫。
 ●使用nohup和&配合来启动程序 nohup ./test &:同时免疫SIGINT和SIGHUP信号。
 -------------------------------------------------------------------------------------
复制代码


网络异常,图片无法展示
|


9、在 manager 节点上查看 MHA 状态 和 MHA 日志,可以看到 master的地址

#查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点。
 masterha_check_status --conf=/etc/masterha/app1.cnf
 #查看 MHA 日志,也可以看到当前的 master 是 192.168.72.192
 cat /var/log/masterha/app1/manager.log | grep "current master"
复制代码


网络异常,图片无法展示
|


10、在Mysql1上查看 VIP 地址 192.168.72.100 是否存在

查看 Mysql1 的 VIP 地址 192.168.72.100 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。

ifconfig
 #若要关闭 manager 服务,可以使用如下命令。
 masterha_stop --conf=/etc/masterha/app1.cnf
 #或者可以直接采用 kill 进程 ID 的方式关闭。
复制代码


网络异常,图片无法展示
|


3.3 故障模拟

在Mysql1上停止mysql服务,MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。 mysql2 会自动接管 VIP,成为新的master。

##(1)在 Master 节点 Mysql1 上停止mysql服务
 systemctl stop mysqld
 pkill -9 mysql
 ##(2)在 manager 节点上监控观察日志记录
 tail -f /var/log/masterha/app1/manager.log
 Master 192.168.72.192(192.168.72.192:3306) is down!  #监控到master宕机
 Selected 192.168.72.60(192.168.72.60:3306) as a new master.  #选举mysql2成功新的master
 ##(3)正常自动切换一次后,MHA 进程会退出。MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。
 vim /etc/masterha/app1.cnf   #查看manager节点的配置文件
 ##(4)查看 mysql2 是否接管 VIP
 ifconfig
 ------------------------故障切换备选主库的算法------------------------
 故障切换备选主库的算法:
 1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
 2.数据一致的情况下,按照配置文件顺序,选择备选主库。
 3.设定有权重(candidate_master=1),按照权重强制指定备选主。
 (1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
 (2)如果 check_repl_delay=0 的话,即使落后很多日志,也强制选择其为备选主。
复制代码


(1)在 Master 节点 Mysql1 上停止mysql服务:

网络异常,图片无法展示
|


(2)在 manager 节点上监控观察日志记录,manager选举了mysql2作为新的主服务器:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


(3)查看manager节点的配置文件。MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。

网络异常,图片无法展示
|


(4) mysql2 已接管 VIP

网络异常,图片无法展示
|


3.4 故障修复

1)修复mysql1(即修复原来的主节点)

systemctl restart mysqld
复制代码


网络异常,图片无法展示
|


2)修复主从数据

#在新的主库服务器 Mysql2 中查看二进制日志文件和同步点
 show master status;
 +-------------------+----------+--------------+------------------+      
 | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |     
 +-------------------+----------+--------------+------------------+       
 | master-bin.000002 |     1745 |              |                  |                   
 +-------------------+----------+--------------+------------------+   
 #在原主库服务器 mysql1 执行同步操作,同步现在主库中的数据
 change master to master_host='192.168.72.60',master_user='myslave',master_password='123123',master_log_file='master-bin.000002',master_log_pos=1745;
 start slave;
复制代码


在新的主库服务器 Mysql2 查看二进制日志文件和同步点:

网络异常,图片无法展示
|


在原主库服务器 mysql1 执行同步操作,同步现在主库中的数据:

网络异常,图片无法展示
|


3)在 manager 节点上修改配置文件app1.cnf

重新把三台mysql节点服务器这个记录添加进去,因为它检测到主节点失效时候会自动删除主节点。

将mysql1添加为新的候选master。

vi /etc/masterha/app1.cnf
 ......
 secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.72.192 -s 192.168.72.80
 ......
 [server1]
 hostname=192.168.72.60
 port=3306
 [server2]
 candidate_master=1
 check_repl_delay=0
 hostname=192.168.72.192
 port=3306
 [server3]
 hostname=192.168.72.80
 port=3306
复制代码


网络异常,图片无法展示
|


4)在 manager 节点上启动 MHA

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
复制代码


网络异常,图片无法展示
|


小贴士

解决中英字符不兼容报错的问题,可执行如下语句:

dos2unix /usr/local/bin/master_ip_failover
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
运维 监控 关系型数据库
MySQL高可用方案:MHA与Galera Cluster对比
本文深入对比了MySQL高可用方案MHA与Galera Cluster的架构原理及适用场景。MHA适用于读写分离、集中写入的场景,具备高效写性能与简单运维优势;而Galera Cluster提供强一致性与多主写入能力,适合对数据一致性要求严格的业务。通过架构对比、性能分析及运维复杂度评估,帮助读者根据自身业务需求选择最合适的高可用方案。
|
3月前
|
SQL 监控 关系型数据库
MySQL主从复制:构建高可用架构
本文深入解析MySQL主从复制原理与实战配置,涵盖复制架构、监控管理、高可用设计及性能优化,助你构建企业级数据库高可用方案。
|
7月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
415 5
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
917 3
Mysql高可用架构方案
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
154 3
|
8月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
269 0
|
10月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
155 3

推荐镜像

更多