第97讲:MHA高可用集群模拟主库故障以及修复过程

2024-02-05 23:44

本文主要是介绍第97讲:MHA高可用集群模拟主库故障以及修复过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.分析主库故障后哪一个从库会切换为主库
    • 2.模拟主库故障观察剩余从库的状态
      • 2.1.模拟主库故障
      • 2.3.当前主从架构
    • 3.修复故障的主库
      • 3.1.修复主库
      • 3.2.当前主从架构
      • 3.3.恢复MHA

1.分析主库故障后哪一个从库会切换为主库

在模拟MHA高可用集群主库故障之前,我们先来分析一下,主库故障后,谁会切换为新主库。

Manager组件选举新主库的过程:

Manager组件选举新主库有三种算法:

  • 当主库故障后,如果配置文件中有声明哪个节点强制为主库,该节点会强制提升为新的主库。
  • 当主库故障后,判断剩余从库谁的数据最新(根据Position或者GTID来判断),谁复制主库的数据最多,最多的节点提升为新主库。
  • 当主库故障后,如果剩余从库的Position或者GTID都一一致,也就意味着剩余从库复制的数据都一样多,那么此时就会根据配置文件中的书写顺序,从上到下,最上面的那个节点会成为新主库。

我们并没有在MHA中配置强制主库的参数,因此第一个算法不会生效,根据所有从库的信息来看,和主库的数据是一模一样的,不存在数据差异,因此第二个算法也不会生效,而在MHA的配置文件中,是根据主从从节点的顺序来书写的,mysql-1、mysql-2、mysql-3,根据第三个算法,那么当主库故障后,mysql-2这个节点的从库会提升为主库。

image-20220709161120631

在模拟故障之前,一定要保证MHA是运行的,否则不会切换主从。

2.模拟主库故障观察剩余从库的状态

2.1.模拟主库故障

1)模拟主库故障

[root@mysql-1 ~]# systemctl stop mysqld

2)观察mysql-2中的从库是否会成为新主库

mysql-2中的从库已经成为新的主库了,当查看slave的状态时,没有任何输出,就表示它是主库。

[root@mysql-2 ~]# mysql -uroot -p123456
mysql> show slave status \G;
Empty set (0.00 sec)ERROR: 
No query specified

image-20220709161813983

3)观察mysql-3从库的状态信息

此时mysql-3上的从库已经开始复制mysql-2这个新主库了,MHA故障切换成功,保障了高可用

image-20220709161853375

故障切换完成后,MHA会自动自杀,一次性高可用故障切换。

image-20220709161948336

故障切换的过程可以在MHA的日志中看到。

image-20220709163248361

2.3.当前主从架构

主库已经故障,mysql-2成为了新主库,mysql-3复制mysql-2的数据。

image-20220709163033574

3.修复故障的主库

3.1.修复主库

当我们得知主库故障,并且顺利进行故障切换,使从库成为主库,重新设置了主从关系,保证业务的高可用之后,我们就需要去修复主库了,MHA已经将mysql-2这个从库提升为新的主库了,我们也不需要去改变现有的主从关系,直接让恢复的主库复制现有的主库即可,避免破坏现有主从关系,导致业务中断。

MHA切换主库,就好比某个皇帝(大明战神 明堡宗)御驾亲征,最后被俘虏了(主库故障),他的弟弟临危受命当了皇帝(mysql-2成为了新主),结果哥哥重新回来后(主库修复),居然夺门,废了弟弟的皇位(想重新成为主),实在不地道了。

1)修复主库

[root@mysql-1 ~]# systemctl start mysqld

2)配置故障的主库复制新主库mysql-2

关于复制参数,我们可以从mha的日志中获取。

[root@mysql-3 ~]# grep 'CHANGE MASTER TO' /data/mha/logs/manager.log
Sat Jul  9 16:15:20 2022 - [info]  All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.20.12', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='replicas', MASTER_PASSWORD='xxx';

配置故障主库复制新主库。

mysql> CHANGE MASTER TOMASTER_HOST='192.168.20.12',MASTER_USER='replicas',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;
mysql> start slave;

故障的主库已经成功的修复完成,并且已经成为mysql-2新主库的从库。

image-20220709164716067

3.2.当前主从架构

mysql-2是主库,mysql-1是故障主库,恢复后成为了mysql-2的从库。

image-20220709164846865

3.3.恢复MHA

MHA在完成一次故障切换后,会自动杀死自己,因此我们需要去恢复MHA,首先将故障的主库重新添加到配置文件中,因为MHA切换时会将故障的节点从配置文件中删除,然后再启动MHA即可。

1)将故障的主库重新加入到配置文件中

[root@mysql-3 ~]# vim /data/mha/app1.cnf 
[server1]
hostname=192.168.20.11
port=3306

2)启动MHA

[root@mysql-3 ~]# nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /data/mha/logs/manager.log 2>&1 &

3)查看状态

[root@mysql-3 ~]# masterha_check_status --conf=/data/mha/app1.cnf
app1 (pid:11050) is running(0:PING_OK), master:192.168.20.12

这篇关于第97讲:MHA高可用集群模拟主库故障以及修复过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682534

相关文章

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Nacos客户端本地缓存和故障转移方式

《Nacos客户端本地缓存和故障转移方式》Nacos客户端在从Server获得服务时,若出现故障,会通过ServiceInfoHolder和FailoverReactor进行故障转移,ServiceI... 目录1. ServiceInfoHolder本地缓存目录2. FailoverReactorinit

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3