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. Linux Exploit系列之七 绕过 ASLR -- 第二部分

    原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲 ...

  2. Spring框架中<mvc:default-servlet-handler/>的作用

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  3. UltraEdit中的特殊字符

    以下特殊字符,可以在替换中用到, ^n--换行 ^t--Tab

  4. c++ 类的继承和多态例子

    类的继承例子: 以上个动态银河系的制作为例,假设我们定义了一个星星的类如下: class Star { public: Star(){} ~Star(){} void Init(); void Mov ...

  5. 【AGC 036C】GP2

    https://atcoder.jp/contests/agc036/tasks/agc036_c 题意 有一个长度为 $n$ 的非负整数序列 $x$,初始时全为 $0$.一次操作定义为选择一对正整数 ...

  6. 快读代码level.2

    long long read() { long long ans=0; char last=' ',ch=getchar();//last用来存正负号,并消去那些换行符,空格 ') { last=ch ...

  7. echarts-all.js:1 Uncaught TypeError: Cannot read property 'getAttribute' of null

    转载:https://blog.csdn.net/you23hai45/article/details/51595108 由于echarts图形ID是由后台传输过来的,并且是根据图形数据一起传过来,出 ...

  8. 安全框架Shiro和SpringSecurity的比较

    来自:https://www.cnblogs.com/zoli/p/11236799.html 两个基本的概念 安全实体:系统需要保护的具体对象数据 权限:系统相关的功能操作,例如基本的CRUD Sh ...

  9. shell中条件判断if中的-z到-d

    shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真.[ -c FILE ] 如果 ...

  10. linux系统装机分区