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 不会将老主库作为新主库的从库,老主库成为孤立的实例。

最新文章

  1. django中文配置的问题
  2. 理解和使用 JavaScript 中的回调函数
  3. 关于在官网上查看和下载特定版本的webrtc代码
  4. myfocus焦点库的引用
  5. Try..Finally..相信自己的眼睛
  6. Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结
  7. C语言 百炼成钢2
  8. [MetaHook] R_RicochetSprite
  9. Android之列表内容显示
  10. aspnet_regiis.exe 的用法
  11. UNIX基础知识之出错处理
  12. 处理部分WordPress核心代码或功能,让你的网站更快
  13. ListView优化分页优化
  14. Spring MVC框架搭建
  15. Sicily 1732 Alice and Bob (二进制最大公约数)
  16. 线索thread二叉树
  17. android ndk调用OpenGL 实现纹理贴图Texture
  18. java 多态(动态绑定)
  19. 【python 字符串】 字符串的相关方法(二)
  20. http协议、web服务器、并发服务器(下)

热门文章

  1. 一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密
  2. 谷歌浏览器(Chrome)离线包的下载方法!
  3. Linu目录结构和创建用户
  4. Ansible安装部署和常用命令,及其主机清单inventory(二)
  5. 13 Zabbix4.4.1系统告警“More than 75% used in the configuration cache”
  6. P1081 [NOIP2012]开车旅行[倍增]
  7. Linux下Discuz!7.2 LAMP环境搭建
  8. visudo修改编辑器vim
  9. python和CSV
  10. 一个简单的c++类的定义和实例化