Orchestrator MySQL主库故障切换的几种类型
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主库故障切换的几种类型的更多相关文章
- mysql中float、double、decimal三种类型,以及数值产生误差的原因
单精度浮点数用4字节(32bit)表示浮点数,采用IEEE754标准的计算机浮点数,在内部是用二进制表示的,如:7.22用32位二进制是表示不下的,所以就导致不精确了,存取会出现误差. mysql中f ...
- MySQL四种类型日志:Error Log、General Query Log、Binary Log、Slow Query Log
MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录mysqld的一些 ...
- 什么是索引?Mysql目前主要的几种索引类型
一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...
- Mysqldump参数大全 这 些参数 不同于 mysql 的那些参数(下边文章开头有链接) :2 种类型的参数含义是不一样的
Mysqldump参数大全 这 些参数 不同于 mysql 的那些参数 :2 种类型的参数含义是不一样的 Mysqldump参数大全(参数来源于mysql5.5.19源码) 参数 参数说明 --a ...
- mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的
mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数 :2种类型的参数 含义是不一样的 一,mysql命令行参数 Usage: mysql [OPTIONS] [ ...
- 浅谈MySql的存储引擎(表类型)
来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...
- Mysql查看版本号的五种方式介绍
Mysql查看版本号的五种方式介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-03 一.使用命令行模式进入mysql会看到最开始的提示符;二.命令行中使用status可以看到 ...
- JDBC驱动的四种类型
Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥.本地API驱动.网络协议驱动和本地协议驱动. JDBC驱动类型一.JDBC-ODBC桥 JDBC-ODBC 桥 是sun公司提供的, ...
- mysql级联更新的两种方式:触发器更新和外键
1.mysql级联更新有两种方式:触发器更新和外键更新. 2.触发器更新和外键更新的目的都是为了保证数据完整性. 我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1 ...
随机推荐
- VS2017 VS2019 无法进入安装界面闪退问题(windows7SP1)
如果离线安装 Visual Studio 2017/2019出现“即将完成…一切即将准备就绪.”的画面后,等几秒安装程序没有任何错误提示就关闭了,无法继续安装. 解决方法: 将vs_enterpris ...
- Delphi 内部过程和函数
- QT 托盘 hover事件捕捉
1. QSystemTrayIcon hover事件 参考:https://stackoverflow.com/questions/21795919/how-to-catch-the-mousehov ...
- 05-spring框架—— Spring 事务
5.1 Spring 的事务管理 事务原本是数据库中的概念,在 Dao 层.但一般情况下,需要将事务提升到业务层,即 Service 层.这样做是为了能够使用事务的特性来管理具体的业务. 在 Spri ...
- ecshop新版不能在模板文件.dwt和.lbi中直接添加php代码的解决方法
ecshop新版不能在模板文件.dwt和.lbi中直接添加php代码了,为什么呢? 因为直接在模板中加入php函数和代码,没有经过过滤,容易造成安全隐患.程序源码安全是非常重要的. 不过如果有朋友希望 ...
- mahout从入门到放弃--安装(1)
1.稀里糊涂下载 我的集群是hadoop 2.7.3 ,本来想找到对应的mahout版本,但是没有找到.本着安全原则,mahout最新版本是0.14.0,回退一个版本使用0.13.0 mahout地址 ...
- Java中遍历HashMap方式
本教程将为你展示Java中HashMap的几种典型遍历方式. 如果你使用Java8,由于该版本JDK支持lambda表达式,可以采用第5种方式来遍历. 如果你想使用泛型,可以参考方法3.如果你使用旧版 ...
- PLT hook笔记
1. hook技术概述 hook技术是一种拦截用户函数调用的技术.通过hook技术可以实现统计用户对某些函数的调用次数,对函数注入新的功能的目标.在Linux平台,Hook技术可以分成用户和内核 ...
- head first 设计模式笔记6-命令模式
命令模式:将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这个模式允许我们将动作封装成命令对象,然后可以传递和调用. 1)命令模式将发出请求的对象和 ...
- (Java多线程系列三)线程间通讯
Java多线程间通讯 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同. 1.使用wait()和notify()方法在线程中通讯 需求:第一个线程写入(input)用户,另一个线程 ...