计划内切换 Graceful master promotion
通常因为升级,服务器为何等原因,需要按照计划将主库迁移到其他实例的情况。
计划内切换的拓扑结构改变的流程如下:
- orchestrator自己选或用户自己指定一个从库实例为新主库
- orchestrator将其他从库change到新主库下,将拓扑变为及联形式
- orchestrator设置主库read-only或 super-read-only
- orchestrator确保新主库追上延迟
- orchestrator将指定的新主库上线并设置为可写(read-only=off,turns promoted server to be writable)
- orchestrator降级旧主库为新主库的从库
- 如果需要的话,orchestrator会尝试设置复制使用的用户密码
- orchestrator开启老主库的复制
该操作可能需要几秒钟,在此期间您的应用程序预计会告警或者报错,因为主服务器是只读的。
Orchestrator 提供了专门的钩子脚本来进行计划内的切换,分别用于迁移前和迁移后的一下定制需求。
PreGracefulTakeoverProcesses
PostGracefulTakeoverProcesses
计划内迁移的整体流程如下:
orchestrator
将运行计划内切换的的前置流程脚本PreGracefulTakeoverProcesses
- DeadMaster前置流程脚本
- DeadMaster切换流程
- DeadMaster后置流程脚本
- 运行计划内切换的后置流程 PostGracefulTakeoverProcesses
你会发现graceful-takeover与真正的故障转移(failover)有些相似,有些操作是不同的。例如:使用PreGracefulTakeoverProcesses消除告警,使用PostGracefulTakeoverProcesses?,更高级的用还有停止代理层的流量等。
在正常的故障转移前、后过程中,您可以使用{command}
占位符或ORC_COMMAND
环境变量来检查这是否是正常接管。你会看到价值graceful-master-takeover
。
计划内迁移有两种方式:
graceful-master-takeover
:- 用户必须指定新主库
- 或者设置为主库只有一个直接从,这隐式使其成为新主
- 降级的老主将作为新主的从,但
orchestrator
不会在老主上启动复制。
graceful-master-takeover-auto
:- 用户可以指定新主库
- 或者
orchestrator自己选择最佳新主库
- 降级的老主将作为新主的从库,并
orchestrator
在老主开始复制。
计划内迁移的方法
1 命令行
#指定新主库host和端口,老主库不start slaveorchestrator-client -c graceful-master-takeover -alias mycluster -d designated.master.to.promote:3306#指定新主库host和端口,老主库start slave orchestrator-client -c graceful-master-takeover-auto -alias mycluster -d designated.master.to.promote:3306#让orchestrator选新主库,老主库start slave orchestrator-client -c graceful-master-takeover-auto -alias mycluster
2 web API
#计划迁移,指定新主库host和端口
/api/graceful-master-takeover/:clusterHint/:designatedHost/:designatedPort
#计划迁移,不指定新主库host和端口,要求拓扑内只有一个从库
/api/graceful-master-takeover/:clusterHint
#计划迁移,不指定新主库host和端口,老主库自动start slave
/api/graceful-master-takeover-auto/:clusterHint
3 web 界面
将老主的一个直接副本拖拽到老主的左边,将使用graceful-master-takeover方法,老主不会启动自动启动复制