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

embedded/2024/9/23 11:43:58/

目录

一 故障监控与切换

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

2 监控主服务器

3 检测主服务器故障

4 再次验证从服务器配置

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

6 恢复新主服务器

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

6.2 确定新主服务器

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

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

7 上线新主服务器

8 恢复其他从服务器

9 通知(可选)

MHA%20%E5%9C%A8%E7%BA%BF%EF%BC%88%E5%BF%AB%E9%80%9F%EF%BC%89%E4%B8%BB%E5%88%87%E6%8D%A2%20%E6%B5%81%E7%A8%8B-toc" style="margin-left:0px;">二 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%20%E5%9C%A8%E7%BA%BF%EF%BC%88%E5%BF%AB%E9%80%9F%EF%BC%89%E4%B8%BB%E5%88%87%E6%8D%A2%20%E6%B5%81%E7%A8%8B">二 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.ppmy.cn/embedded/23834.html

相关文章

第11章 Android特色开发——基于位置的服务

第11章 Android特色开发——基于位置的服务 本章中,将要学习一些全新的Android技术,这些技术有别于传统的PC或Web领域的应用技术,是只有在移动设备上才能实现的。 基于位置的服务(Location Based Service)。由于移动…

Ansible一键部署zabbix+grafana+agent

目录 IP地址规划ansible安装分开部署安装zabbix-mysql安装zabbix-server安装zabbix-agent安装zabbix-grafana 一键部署自动发现 IP地址规划 名字地址主要安装软件ansible-server192.168.40.137zabbix-server、ansible、zabbix-mysqlzabbix-agent1192.168.40.138zabbix-agentza…

c++ new delete 相关应用——申请连续空间不允许部分释放

new delete 详解 实验1 int **all_a new int* [2]; // 申请了一片空间足够存储两个int类型指针。// 返回对象是指向空间头的指针,因此是int**int* a new int [3];//申请了足够存储3个int 的空间,返回空间开始位置的指针 int* b new int [3];//申请了…

什么是环比折年率

环比折年率是月度(或季度)统计中一个十分重要的统计指标,由环比增速推算得到,用于反映经济的发展速度与趋势变化。环比折年率与同比增速相比具有对趋势变化灵敏度高的优点,在统计分析、趋势预测等领域有着广泛应用。 …

STM32用HAL库函数实现硬件IIC

/*出处:【STM32入门教程-2024】第12集 IIC通信与温湿度传感器AHT20(DHT20)_哔哩哔哩_bilibili */ AHT20驱动 这篇笔记我主要介绍代码实现,想要了解原理的请自己看视频,我不过多赘述了。 AHT20通信数据帧格式: ①对照手册上的通…

游戏新手村17:游戏市场营销的分类

营销(Marketing),港台地区译为行销/市场行销。根据美国营销学会(AMA) 2008年的定义,市场营销是创造、传播、交付和交换那些对顾客、客户、合作伙伴和社会有价值的市场供应物的活动、制度和过程。可以简单理…

代码随想录训练营26day-贪心算法4

一、860 柠檬水找零 题目解析:注意一开始是没有零钱,也只会取5 10 20三类数字,因此从这3类数字出发,去判断。 1 如果是5元,那么直接收,five; 2 如果是10元,那么需要five--&#x…

【Vue3】toRefs与toRef的使用

文章目录 toRefs简介toRef简介错误案例 toRefs简介 toRefs对对象内多个值转换成响应式数据 代码展示 let testData reactive({aa:"111",bb:"222",cc:"333"})//转为响应式数据let {aa,bb,cc} toRefs(testData)console.log(aa);console.log(bb)…