Orchestrator 对MySQL主库的故障切换分为自动切换和手动切换。
手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.

1.自动切换

自动切换是主库出现故障后,自动提升新主库,进行故的障切换。

自动切换受到以下条件限制和约束:

  • 主库是downtime的集群不进行故障切换。如果希望忽略集群故障,可以设置downtime。
  • 处于故障活跃期的集群不进行故障切换(即in_active_period=1)
  • 只对配置项RecoverMasterClusterFilters匹配的集群进行故障切换

会周期检测主库状态。
自动切换,会周期进行故障扫描,如果发现故障,条件满足就会进行故障切换。

故障检测和切换具体由CheckAndRecover()实现,具体调用:

  • GetReplicationAnalysis(),进行故障扫描
  • executeCheckAndRecoverFunction(),进行故障恢复

2.手动切换

手动切换包括: recover、force-master-failover, force-master-takeover以及graceful-master-takeover。

手动切换不受自动切换中提到的条件限制和约束。

2.1 recover

recover 以故障主库以及候选实例candiateKey为参数,调用CheckAndRecover(),进行故障切换。
指定的故障主库必须是故障的,也就是已确认发生故障,如果不是故障的,不进行切换。

2.2 force-master-failover

不论集群主库是否故障,都会进行后续切换操作,需要用户确认已发生故障。

具体步骤:

  • (1) 故障扫描 forceAnalysisEntry()-->GetReplicationAnalysis()
  • (2) 故障恢复ForceExecuteRecovery(analysisEntry, nil,false)-->executeCheckAndRecoverFunction(),不指定候选主库

最后,老主库成为单独的DB 实例。

2.3 force-master-takeover

同上,需要用户自己判定故障。

force-master-takeover,唯一不同于force-master-failover的点是,force-master-takeover带候选主库(即candidate),并且候选主库必须是集群主库的直连从库。
其他同force-master-failover。

2.3 graceful-master-takeover

这种切换方式针对的是:老主库是正常的,需要提升新主库,老主库可作为从库。

具体操作步骤包括:

  • (1)检查候选主库

    • 候选主库必须是集群的主库的直连从库
    • 候选主库,没有被禁止提升为主库(即promotion rule 不是must not)
    • 候选主库,没有延迟过大(超过20s)
  • (2) 故障扫描,forceAnalysisEntry()-->GetReplicationAnalysis()
  • (3) 调用hooks:PreGracefulTakeoverProcesses
  • (4) 如果集群中不只一个副本,将老主库的从库移动到候选主库之下
  • (5) 停止候选主库的复制,在候选主库上执行stop slave
  • (6) 设置老主库只读
  • (7) 使候选主库追上老主库(start slave until)
  • (8) 进行故障恢复,新主库形成ForceExecuteRecovery(analysisEntry, &destination.Key, false)-->executeCheckAndRecoverFunction()

  • (9) 将老主库变成新主库的从库
  • (10) 调用hooks: PostGracefulTakeoverProcesses

之所以称为graceful,是因为老主库不是故障的,首先会让候选主库追上老主库。最后,将老主库作为新主库的从库(但没有执行start slave)。
而force-master-failover、force-master-takeover 不会将老主库作为新主库的从库,老主库成为孤立的实例。

Orchestrator MySQL主库故障切换的几种类型的更多相关文章

  1. mysql中float、double、decimal三种类型,以及数值产生误差的原因

    单精度浮点数用4字节(32bit)表示浮点数,采用IEEE754标准的计算机浮点数,在内部是用二进制表示的,如:7.22用32位二进制是表示不下的,所以就导致不精确了,存取会出现误差. mysql中f ...

  2. MySQL四种类型日志:Error Log、General Query Log、Binary Log、Slow Query Log

    MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录mysqld的一些 ...

  3. 什么是索引?Mysql目前主要的几种索引类型

    一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...

  4. Mysqldump参数大全 这 些参数 不同于 mysql 的那些参数(下边文章开头有链接) :2 种类型的参数含义是不一样的

    Mysqldump参数大全  这 些参数 不同于 mysql 的那些参数  :2 种类型的参数含义是不一样的 Mysqldump参数大全(参数来源于mysql5.5.19源码) 参数 参数说明 --a ...

  5. mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的

    mysql命令行参数  --- 这些参数不同于  mysqldump  后的 那些参数   :2种类型的参数 含义是不一样的 一,mysql命令行参数 Usage: mysql [OPTIONS] [ ...

  6. 浅谈MySql的存储引擎(表类型)

    来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...

  7. Mysql查看版本号的五种方式介绍

    Mysql查看版本号的五种方式介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-03   一.使用命令行模式进入mysql会看到最开始的提示符;二.命令行中使用status可以看到 ...

  8. JDBC驱动的四种类型

    Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥.本地API驱动.网络协议驱动和本地协议驱动. JDBC驱动类型一.JDBC-ODBC桥 JDBC-ODBC 桥 是sun公司提供的, ...

  9. mysql级联更新的两种方式:触发器更新和外键

    1.mysql级联更新有两种方式:触发器更新和外键更新. 2.触发器更新和外键更新的目的都是为了保证数据完整性. 我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1 ...

随机推荐

  1. Django 使用request获取浏览器发送的参数(Django编程-5)

    1.url:需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P url(r'^index/(?P& ...

  2. redis一键部署脚本

    1.新建一个名为 auto_install_redis.sh的文件 2.将下面脚本拷贝到文件中,具体步骤在注释里面 #环境 linux #一键安装redis,在linux环境中使用脚本运行该文件(sh ...

  3. Chrome安装Axure插件axure-chrome-extension

    用Chrome打开Axure发布的原型图打不开,提示需要安装axure-chrome-extension插件,如下图提示 下面记录一下安装过程,其实很简单,插件没必要从网上到处找,在你发布的路径下就有 ...

  4. c++ 实现https网页上的图片爬取

    一.主要的原理 我们通过发送一个http请求,获得目标网页的html源代码,然后通过正则表达式获取到图片的URL,把该网页的所有的图片都保存到一个文件夹,这就是整个软件的流程. 二.具体的实践 现在很 ...

  5. 一、Nginx多站点配置

    一.下载 目录文件: 二.运行方式 (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过 (2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start ...

  6. PyCharm上unittest 测试用例两种执行方式

    每次讲到unittest测试框架的时候,经常有同学在群里反映,为啥我的运行不是按照我往suite里添加的用例顺序执行的,为什么别人的能跑出来报告,我的就不行... 当然,首先确认代码是OK的,如果代码 ...

  7. 【AGC010 C】Cleaning

    题意 有一棵 \(n\) 个点的树,第 \(i\) 个节点有 \(a_i\) 个石子. 每次都可以选择一对不同的叶子节点,这对叶子节点路径上的所有点都必须要有石子.然后去掉这两个叶子节点路径上的每个节 ...

  8. document.compatMode,quirks mode and standards mode

    Document.compatMode Indicates whether the document is rendered in Quirks mode or Standards mode. Syn ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针]

    [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针] 实用知识 智能指针 我们今天来讲讲Rust中的智能指针. 什么是指针? 在Rust,指针(普通指针),就是保存内存地址的值 ...

  10. MyEclipse导航代码第二弹,Java开发更便捷

    [MyEclipse CI 2019.4.0安装包下载] 无论是在文件之间导航还是在文件中导航,都可以使用大量导航工具来加快工作流程.目前这些导航工具可在MyEclipse,CodeMix中使用. 单 ...