【MHA】MySQL高可用MHA介绍4-故障监控与切换具体流程

目录

一 故障监控与切换

1 验证复制设置并识别当前主服务器

2 监控主服务器

3 检测主服务器故障

4 再次验证从服务器配置

5 关闭故障的主服务器(可选)

6 恢复新主服务器

6.1 保存来自 已崩溃主服务器的二进制日志事件(如果可能)

6.2 确定新主服务器

6.3 识别最新的从服务器(接收到最新中继日志的从服务器)

6,4 恢复并提升新的主服务器

7 上线新主服务器

8 恢复其他从服务器

9 通知(可选)

二 MHA 在线(快速)主切换 流程

1 验证复制设置并确定当前主服务器

2 识别新的主服务器

3 拒绝在当前主服务器上进行写操作

4 等待所有从属服务器追赶复制进度

5 在新主服务器上授予写入权限

6 切换其他所有从属服务器上的复制


一 故障监控与切换

以下是MHA(masterha_manager)在主监控和故障转移中的基本流程。

1 验证复制设置并识别当前主服务器

  • 通过连接配置文件中描述的所有主机来识别当前主服务器。您不必指定哪个主机是当前主服务器。MHA会自动检查复制设置并识别当前主服务器。>(注意:MHA不会自行构建复制环境(例如添加/删除从属服务器)。MHA在现有复制环境中监视主服务器。)
  • 如果在此阶段有任何从服务器已经宕机,出于安全原因终止脚本(如果有任何从服务器已经宕机,MHA当然无法恢复它)。
  • 如果在每个MySQL服务器(MHA节点)上没有安装任何必要的脚本,MHA会在此阶段中止,并且不会开始监视。

2 监控主服务器

  • 等待当前主服务器死机。在这个阶段,MHA不监视从服务器。停止/重新启动/添加/删除从服务器对当前监视的MHA没有任何影响。当您添加/删除从服务器时,应更新配置文件,并最好重新启动MHA。

3 检测主服务器故障

  • 如果MHA连续三次无法连接到主服务器,则进入此阶段。
  • 如果在配置文件中设置了secondary_check_script参数,则MHA调用该脚本以双重检查主服务器是否真的死机。

4 再次验证从服务器配置

  • 重新读取配置文件,并连接到所有主机,验证当前主服务器是否已停止工作以及所有其他从服务器是否正在复制来自已停止工作的主服务器。如果检测到任何无效的复制配置(例如,某些从服务器正在复制来自不同的主服务器),MHA会在此处停止并显示错误。您可以通过在配置文件中设置ignore_fail参数来更改此行为。此步骤出于安全考虑。由于在启动masterha_manager后可能会花费很长时间(几周/几个月),复制配置可能会发生更改,因此通常建议进行双重检查。
  • 检查上次故障切换的状态 如果上次故障切换以错误结束,或者上次故障切换完成得太近,MHA会在此处停止并且不会开始故障切换。您可以通过在masterha_manager命令中设置ignore_last_failover和wait_on_failover_error参数来更改此行为。

5 关闭故障的主服务器(可选)

  • 如果您在配置文件中定义了master_ip_failover_script和/或shutdown_script,MHA会调用这些脚本。
    • 使当前主服务器的IP地址失效
  • 关闭宕机的主服务器,以避免脑裂。

6 恢复新主服务器

  • 6.1 保存来自 已崩溃主服务器的二进制日志事件(如果可能)

    • 如果已崩溃的主服务器可以通过SSH访问,从最新的从服务器的end_log_pos(Read_Master_Log_Pos)复制二进制日志。
  • 6.2 确定新主服务器

    • 基于配置文件设置和当前的MySQL设置
    • 如果您有一些主机作为候选主服务器,请在配置文件中设置candidate_master=1。
    • 如果您有一些永远不应该成为主服务器的主机,请在配置文件中设置no_master=1。
  • 6.3 识别最新的从服务器(接收到最新中继日志的从服务器)

  • 6,4 恢复并提升新的主服务器

    • 生成差异二进制/中继日志事件到主服务器
    • 将日志事件应用到新的主服务器上
    • 如果此处发生任何错误(例如重复键错误),MHA会中止,并且包括恢复其余从服务器在内的下面的恢复步骤不会发生。

7 上线新主服务器

  • 如果您在配置文件中定义了master_ip_failover_script,MHA会调用该脚本。
    • 您可以执行各种操作,例如激活当前主服务器的IP地址,创建特权用户等。

8 恢复其他从服务器

  • 恢复其他从服务器
    • 并行生成差异二进制/中继日志事件并将其应用到从服务器上,
    • 并从新主服务器开始复制。
    • 即使在此阶段发生恢复错误(例如从服务器 3 上的重复键错误),MHA也不会中止。失败的从服务器将不会从新主服务器复制数据,但其他成功恢复的从服务器可以开始复制。

9 通知(可选)

如果您在配置文件中定义了report_script,MHA 将调用该脚本。您可以执行任何您喜欢的操作,例如:

  • 发送邮件
  • 禁用新主服务器上的定期备份作业
  • 更新内部管理工具状态等

二 MHA 在线(快速)主切换 流程

以下步骤可以通过 masterha_master_switch 命令完成(带有 --master_state=alive 参数)

1 验证复制设置并确定当前主服务器

  • 通过连接配置文件中描述的所有主机来确定当前主服务器(注意:MHA本身不会构建复制环境(例如添加/删除从属),而是监视现有复制环境中的主服务器)
  • 在当前主服务器上执行FLUSH TABLES操作(可选)。这是为了最小化稍后执行的FLUSH TABLES WITH READ LOCK操作的成本(时间)
  • 检查MHA主服务器监视和故障转移是否均未运行
  • 检查是否满足以下条件:
    • 所有从属服务器上的IO线程正在运行
    • 所有从属服务器上的SQL线程正在运行
    • 所有从属服务器上的Seconds_Behind_Master值都小于2秒(可以通过--running_updates_limit=(seconds)参数进行更改)
    • 在主服务器上,show processlist输出中没有任何更新查询花费超过2秒


2 识别新的主服务器

  • 新主机可以通过"--new_master_host"参数设置。否则,新的主服务器将从配置文件中自动确定。
  • 原主服务器和新主服务器必须具有相同的二进制日志过滤规则(binlog-do-db和binlog-ignore-db)。

3 拒绝在当前主服务器上进行写操作

  • 如果您在配置文件中定义了master_ip_online_change_script参数,MHA会调用该脚本。
    • 您可以在这里优雅地阻止写入(例如删除写入用户、执行SET GLOBAL read_only=1等)
  • 在当前主服务器上执行FLUSH TABLES WITH READ LOCK操作来阻止所有写入(可以通过--skip_lock_all_tables参数跳过)

4 等待所有从属服务器追赶复制进度


在此处使用MASTER_LOG_POS()函数

5 在新主服务器上授予写入权限

  • 执行SHOW MASTER STATUS来确定新主服务器的当前二进制日志文件和位置
  • 如果您在配置文件中定义了master_ip_online_change_script参数,MHA会调用该脚本。您可以创建一个写入用户,执行SET GLOBAL read_only=0等操作。

6 切换其他所有从属服务器上的复制

  • 并行执行CHANGE MASTER、START SLAVE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/573607.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式 _创建者模式_工厂模式(普通工厂和抽象工厂)

一、工厂模式 属于Java设计模式创建者模式的一种。在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 二、代码示例 场景:花店有不同的花,通过工厂模式来获取花。 1、普通工厂模式 逻辑步骤&#…

Spring - 5 ( 8000 字 Spring 入门级教程 )

一:Spring IoC&DI 1.1 方法注解 Bean 类注解是添加到某个类上的, 但是存在两个问题: 使用外部包里的类, 没办法添加类注解⼀个类, 需要多个对象, ⽐如多个数据源 这种场景, 我们就需要使用方法注解 Bean 我们先来看方法注解如何使用: public c…

AI-数学-高中-42导数的概念与意义

原作者视频:【导数】【一数辞典】1导数的概念与意义_哔哩哔哩_bilibili .a是加速度;

OpenAI 笔记:获取embedding

1 输入openai的api key from openai import OpenAIclient OpenAI(api_key**) 2 举例 response client.embeddings.create(input"Hello",model"text-embedding-3-small" )print(response.data[0].embedding) 默认情况下,text-embedding-3-s…

配置Linux【虚拟机】与 windows【宿主机】网络互通 (面向小白,简单操作)

1. 启动虚拟机,运行Linux系统 这里我使用 VMware Workstation Pro 来运行Linux系统(cent-os7)2. 鼠标右键打开终端 3. 输入 cd /etc/sysconfig/network-scripts , 然后输入ls ,查看当前目录下的网卡 一般来说,虚拟机的…

计算机网络基础认识

本篇文章是我在B站上看到关于计算机网络的介绍视频收到的启发。本篇文章的内容来自【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 一、物理层 从常理来说&#xff0c;进行连个设备之间的通讯&#xff0c;首先最容易想到的就是使用一根线连接两个设备进行通讯。但是…

Docker的数据管理、网络通信和dockerfile

目录 一、Docker的数据管理 1. 数据卷 1.1 数据卷定义 1.2 数据卷配置 2. 数据卷容器 2.1 创建数据卷容器 2.2 使用--volume-from来挂载test1 二、端口映射 三、容器互联 1. 创建容器互联 ​编辑2. 进入test2测试&#xff08;ping 容器名/别名&#xff09; 四、Dock…

【弱监督点云分割】All Points Matter:用于弱监督三维分割的熵细化分布对齐

All Points Matter: Entropy-Regularized Distribution Alignment for Weakly-supervised 3D Segmentation 摘要&#xff1a; 伪标签被广泛应用于弱监督三维分割任务中&#xff0c;在这种任务中&#xff0c;只有稀疏的地面真实标签可供学习使用。现有方法通常依赖经验标签选择…

用立创EDA实现一个小项目

项目介绍 名称&#xff1a;蓝牙音响 功能&#xff1a;按键切换 蓝牙控制 语音控制 项目流程 市场调研产品立项----老板--经理硬件&#xff08;外观、尺寸、大小、使用环境&#xff09;软件&#xff08;代码开发环节&#xff09;产品测试 以管理员身份运行 新建文件夹&…

Python学习从0开始——项目一day02数据库连接

Python学习从0开始——项目一day02数据库连接 一、在线云数据库二、测试数据库连接三、数据库驱动介绍四、SQL执行4.1插入测试数据4.2安装数据库连接模块4.3测试SQL语句执行4.4执行SQL的固定步骤及示例 一、在线云数据库 找了一个在线数据库&#xff0c;需要邮箱注册&#xff…

使用Docker搭建Redis主从集群

文章目录 ☃️前言☃️搭建❄️❄️架构❄️❄️实例说明❄️❄️搭建第一个服务器上的两个实例❄️❄️搭建第二个服务器上的一个实例 ☃️开启主从❄️❄️改配置❄️❄️重启从节点 ☃️验证 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 …

《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制婴儿性别比例饼图

在MATLAB 中可以使用 pie 函数来创建饼图。饼图是一种展示不同部分占总体的相对比例的图表。 本示例从“婴儿出生数据.csv”文件读取婴儿出生数据&#xff0c;然后计算男性和女性婴儿的数量&#xff0c;使用MATLAB绘制饼图。 配套图书链接&#xff1a;https://item.jd.com…

【ruoyi-vue】axios的封装理解和基本使用

axios的配置 ruoyi的前端对axios进行了封装&#xff0c;让我们发get请求或者是post请求更加方便了。 ruoyi对axios的封装在下面文件中&#xff1a;打开文件&#xff0c;可以看到它有三个显眼的方法&#xff0c;分别是request拦截器、response拦截器和通用下载方法。ruoYi接口地…

MySQL主从的应用

说明&#xff1a;本文介绍MySQL主从在实际中的应用。主从搭建和问题参考下面两篇文章&#xff1a; MySQL主从结构搭建 搭建MySQL主从结构时的问题 数据迁移 当我们搭建完MySQL主从&#xff0c;第一步当然是把历史数据导入到主从结构中。有以下两种方式&#xff1a; 开启主从…

Linux 网络操作命令Telnet

Telnet 尽管 Telnet 已经逐渐被更安全的 SSH 协议所取代&#xff0c;但在某些特定场景下&#xff0c;如对旧系统的维护或教育目的&#xff0c;Telnet 仍然有其使用价值。本文将介绍如何在 Linux 系统中安装 Telnet 客户端&#xff0c;以及如何使用它进行远程登录。 用户使用 t…

什么是DTU和串口服务器的区别

在工业物联网的快速发展中&#xff0c;数据传输单元&#xff08;DTU&#xff09;和串口服务器作为两种关键设备&#xff0c;各自扮演着重要的角色。对于传统行业来说&#xff0c;了解它们的基本概念和区别&#xff0c;有助于更好地选择和应用这些技术&#xff0c;提升生产效率和…

Rust基本数据类型-切片

一、切片是什么&#xff0c;怎么用 1、切片是什么 切片并不是 Rust 独有的概念&#xff0c;在 Go 语言中就非常流行&#xff0c;它允许你引用集合中部分连续的元素序列&#xff0c;而不是引用整个集合。 对于字符串而言&#xff0c;切片就是对 String 类型中某一部分的引用&…

基于单片机的空气质量检测系统设计

摘要:随着社会经济的不断发展,人们的生活水平日益提高,健康与养生成为了全民关注的热点话题,空气质量地不断下降也引起了社会的广泛关注,如何了解家居内空气质量的情况也成了亟需解决的问题。在此背景下,本文针对室内空气的质量问题设计了基于单片机的空气质量检测系统,…

Mysql个人总结

前言 又来水字数啦&#xff0c;这次主要讲一下MySQL的常用概念&#xff0c;难点的就必须上项目讲解了&#xff0c;而且比较基础面试基本都会问一些&#xff0c;用的话&#xff0c;不少优化都从这里入手 操作数据库 1、创建数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名;…

【AI相关】《这就是ChatGPT》读书笔记

《这就是ChatGPT》 斯蒂芬沃尔弗拉姆 这本书用了两天就一口气读完了&#xff0c;通篇读完后&#xff0c;这本书主要是介绍了ChatGPT怎么能做到生成内容的一些背后的原理逻辑&#xff0c;总结一下这本书是ChatGPT通过大量的数据&#xff08;这些数据来自网络、书籍等等类似于数据…
最新文章