Orchestrator源码解读4-计划内切换

计划内切换 Graceful master promotion

通常因为升级,服务器为何等原因,需要按照计划将主库迁移到其他实例的情况。

计划内切换的拓扑结构改变的流程如下:

  1. orchestrator自己选或用户自己指定一个从库实例为新主库
  2. orchestrator将其他从库change到新主库下,将拓扑变为及联形式
  3. orchestrator设置主库read-only或 super-read-only
  4. orchestrator确保新主库追上延迟
  5. orchestrator将指定的新主库上线并设置为可写(read-only=off,turns promoted server to be writable)
  6. orchestrator降级旧主库为新主库的从库
  7. 如果需要的话,orchestrator会尝试设置复制使用的用户密码
  8. orchestrator开启老主库的复制

该操作可能需要几秒钟,在此期间您的应用程序预计会告警或者报错,因为主服务器是只读的。

Orchestrator 提供了专门的钩子脚本来进行计划内的切换,分别用于迁移前和迁移后的一下定制需求。

  • PreGracefulTakeoverProcesses
  • PostGracefulTakeoverProcesses

计划内迁移的整体流程如下:

  1. orchestrator将运行计划内切换的的前置流程脚本 PreGracefulTakeoverProcesses
  2. DeadMaster前置流程脚本
  3. DeadMaster切换流程
  4. DeadMaster后置流程脚本
  5. 运行计划内切换的后置流程 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 slave

orchestrator-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方法,老主不会启动自动启动复制

你可能感兴趣的:(orchestrator,mysql)