转自

https://blog.csdn.net/ashic/article/details/75645479

以下是MHA(masterha_manager)在监控和故障切换上的基本流程

验证复制配置和识别当前主库

通过连接配置文件中描述的所有主机来识别当前主库.你不必手动指明那个主句是主库,MHA会自动检查复制设置并识别当前主库.

注意:MHA本身不能构建复制环境,MHA监控已存在的复制环境

If any slave is dead at this stage, terminating the script for safety reasons(If any slave is dead, MHA can not recover the dead slave, of course). 开启监控时任何slave发生故障都会导致监控退出,MHA并不能修复从库

如果任何必要的脚本没有安装在所有Node,MHA abort而不会启动监控

监控主库

监控阶段MHA会持续监控主库直到其发生故障,MHA并不会监控从库.停止/重启/添加/移除从库不会对当前的MHA监控产生任何影响.但是注意当你添加或移除从库后应当更新MHA配置文件并重启MHA

监测主库故障

如果MHA连续三次连接主库失败,将会进入此阶段

如果你在配置文件中指定了secondary_check_script脚本,MHA会调用次脚本二次验证master状态看看是不是真的挂了

以下步骤也由masterha_master_switch命令执行. 您可以使用与masterha_manager相同的参数.

再次验证从库配置

再次读取配置文件,并连接所有主机并验证当前故障主机状态和所有此主库的从库.如果检测到任何无效的复制配置(即某些从站从不同的主站复制),那么MHA将在此处停止。 您可以通过在配置文件中设置ignore_fail参数来更改此行为。 这一步是出于安全原因。 由于masterha_manager可能运行了很长时间(周/月),因此复制配置可能会更改,因此通常建议进行双重检查。

检查上一个故障转移状态如果最后一个故障转移以错误结束,或最近一次故障转移最近完成,则MHA将在此停止,并且不会启动故障转移。 您可以通过masterha_manager命令中的ignore_last_failover和wait_on_failover_error参数更改此行为。

Shutting down failed master server (optional)

如果你在配置文件中定义了 master_ip_failover_script and/or shutdown_script ,MHA会调用这些脚本

. 当前主库(死掉的主库)的vip会通过master_ip_failover_script漂移到新主库

关闭故障主库的服务器,避免脑裂

Recovering a new master

从崩溃的主机中保存二进制日志事件(如果可能)

如果可以通过SSH访问崩溃的主库,可以从最新的slave的end_log_pos(Read_Master_Log_Pos)位置开始复制二进制日志.

选举新主库

基于配置文件中的设置和当前MySQL的设置

如果你希望某些从库作为优先备选主库,可以在配置中指定candidate_master=1

如果你希望某些从库永远不会成为新主库,可以在配置中指定no_master=1

识别最新的从众(接收了最新relay log的从库)

恢复并提升新主库

生成差异日志传输到新主库

应用这些差异日志到新主库

如果再次阶段产生任何错误(如,duplicate key error),MHA aborts,之后的恢复步骤,包括恢复其余从库将不会发生

激活新主库

如果您在配置文件中定义了master_ip_failover_script,则MHA会调用该脚本

您可以执行任何操作,例如激活当前主控的IP地址,创建特权用户等

恢复其他从库

恢复其余从库

并行的为所有从库生成差异日志

并行的为所有从库应用差异日志

change master到新主库,并start slave

即使在此阶段发生恢复错误,MHA也不会终止.故障的从库将不会从新主库复制,而其他成功恢复的从库可以启动复制

通知(可选)

如果你在配置文件中定义了report_script,MHA会调用此脚本,再次脚本中你可以做任何你想做的事,例如:

发送邮件

停止新主库得定时备份任务(因为我们一般希望备份在从库做,新主库应取消定时备份任务)

更细内部管理工具状态,等等

MHA在在线切换是做了什么

以下步骤可以通过masterha_master_switch命令(使用–master_state = alive参数)完成。

验证复制设置并识别当前主库

通过连接配置文件中描述的所有主机来识别当前主库

在当前主库执行FLUSH TABLES(可选).这一操作用来最小化之后的FLUSH TABLES WITH READ LOCK时间

检查MHA主库监控和failover是否正在运行

检查是否符合以下条件

所有从库上的IO线程正在运行

所有从库上的SQL线程正在运行

所有从库的Seconds_Behind_Master小于2秒(可以用过—running_updates_limit=N更改)

在主库上,通过show processlist输出中没有执行超过2秒的update语句

识别新主库

新主库可以通过”—new_master_host”参数指定.否则吗,将从配置文件中自动识别新的主库.

源主库和新主库必须拥有一致的过滤规则(binlog-do-db and binlog-ignore-db)

拒绝当前主库的写入

如果您在配置文件中定义了master_ip_online_change_script参数,MHA会调用该脚本。

您可以优雅地阻止写入(即删除写入用户,执行SET GLOBAL read_only = 1等)

在当前主机上执行FLUSH TABLE WITH READ LOCK来阻止所有写入(可以使用–skip_lock_all_tables参数跳过)

等待所有从库追上复制进度

这里会使用MASTER_LOG_POS()函数

赋予新主库写入权限

执行show master status来获取新主库得file和position

如果你在配置文件中定义了master_ip_online_change_script,MHA会调用次脚本.你可以在脚本里执行创建用户,set GLOBAL read_only=0等操作

为其他所有从库切换新主库

所有从库并发的执行change master,start slave

MHA在监控和故障转移时都做了什么的更多相关文章

  1. RabbitMQ如何保证发送端消息的可靠投递-发生镜像队列发生故障转移时

    上一篇最后提到了mandatory这个参数,对于设置mandatory参数个人感觉还是很重要的,尤其在RabbitMQ镜像队列发生故障转移时. 模拟个测试环境如下: 首先在集群队列中增加两个镜像队列的 ...

  2. MySQL 高可用MHA安装部署以及故障转移详细资料汇总 转

    http://blog.itpub.net/26230597/cid-87082-list-2/ 1,简介 .1mha简介 MHA,即MasterHigh Availability Manager a ...

  3. Mybatis与Spring集成时都做了什么?

    Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势. 本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和S ...

  4. MySQL高可用方案--MHA部署及故障转移

    架构设计及必要配置 主机环境 IP                 主机名             担任角色 192.168.192.128  node_master    MySQL-Master| ...

  5. 部署AlwaysOn第三步:集群资源组的健康检测和故障转移

    资源组是由一个或多个资源组成的组,WSFC的故障转移是以资源组为单位的,资源组中的资源是相互依赖的.一个资源所依赖的其他资源必须和该资源处于同一个资源组,跨资源组的依赖关系是不存在的.在任何时刻,每个 ...

  6. Redis源码解析:22sentinel(三)客观下线以及故障转移之选举领导节点

    八:判断实例是否客观下线 当前哨兵一旦监测到某个主节点实例主观下线之后,就会向其他哨兵发送"is-master-down-by-addr"命令,询问其他哨兵是否也认为该主节点主观下 ...

  7. mongoDB研究笔记:复制集故障转移机制

    上面的介绍的数据同步(http://www.cnblogs.com/guoyuanwei/p/3293668.html)相当于传统数据库中的备份策略,mongoDB在此基础还有自动故障转移的功能.在复 ...

  8. sqlserver2008 复制,镜像,日志传输及故障转移集群区别

    一, 数据库复制 SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步, ...

  9. sql server 复制,镜像,日志传输及故障转移集群区别

    一, 数据库复制 SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步, ...

随机推荐

  1. maven与ecplise的整合

    Maven 概念: Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工 ...

  2. 数据库Oracle和MySQL 的不同

    实例区别: MySQL是轻量型数据库,开源免费.Oracle收费,这个不是重点,,重点是它贵. MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一个库. MySQL安装只有300多兆, ...

  3. [TimLinux] Python 装饰器

    1. 装饰器 一种语法格式,用于替换另外一个编码风格,一种语法糖,通过语法结构明确标识出这样一种语法. 自动在被装饰对象尾部执行代码(不使用装饰器语法时,需要明确写明的代码) 被装饰对象可以为函数.类 ...

  4. 解决pyinstaller在单一文件时无法正确添加权限清单问题,(UAC,uac_admin,manifest,asInvoker,python,requireAdministrator)

    做了3天的win10的兼容性测试,大部分时间都卡权限获取这了. 以下废话很多,想直接找解决方法,请跳至红字 首先,简单说下uac,自vista后windows再次加严了权限管理,uac (账户控制) ...

  5. Java并发编程系列-(4) 显式锁与AQS

    4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...

  6. 如何用css画一个文件上传图案?

    如下图,如果是你,你会怎么实现: 通常我们会通过字体图标来显示中间的加号,外层用一个div包裹即可:或者使用伪元素来模拟中间的一横一竖,这都比较麻烦. 其实我们可以直接使用div+css就可以实现. ...

  7. Orleans[NET Core 3.1] 学习笔记(四)( 1 )创建项目

    ClassRoom ClassRoom是一个练手demo,目的是为了能熟悉掌握Orleans的基本知识和使用方法,我会尽量在这个项目中加入更多的知识点,一边学一边练避免我看完文档就忘掉 创建项目 依旧 ...

  8. python 中 and or

    在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. 一.and: 在布尔上下文中从左到右演算表达式的值,如果布尔上下 ...

  9. SQL- SQL插入与更新删除

    一 前言 经过之前的 [SQL]-SQL介绍, [SQL]- SQL检索阶段一, [SQL]-sql检索阶段二 的三篇文章你已经学会的sql的相关概念和如何查询数据库,这篇文章主要后续对数据库表的进入 ...

  10. ps命令输出进程状态S后面加号的含义

    最近发现一个问题,ps命令输出里面进程状态为S+的含义,网上好多文章都说是表明进程“位于在后台进程组”. 例如下面这个ps命令输出说明: D 不可中断 Uninterruptible sleep (u ...