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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器 电路基础c语言基础main.ckey.c结果 实现一个键开关灯实验结果避坑 电路基础 运算放大器-在江科大51单片机b站视频(AD/DA)复习 原理:两个极端 同相输入端电压 》反相输入端 电压输出最…

【leetcode题解C++】707.设计链表

你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点…

Git_01_push失败之解决办法

从本地服务器向云端服务器提交代码的过程中,碰到了以下问题: 提示账号没有push权限 rootlocalhost:~/repo/$ git push qnx HEAD:refs/for/develop Counting objects: 29, done. Delta compression using up to 32 threads. Compressing objects: 100% …

如何利用小程序介绍公司品牌形象?

企业小程序的建设对于现代企业来说已经成为了一项必不可少的工作。随着移动互联网的快速发展,越来越多的职场人士和创业老板希望通过小程序来提升企业形象,增强与用户的互动,实现更好的商业效果。在这个过程中,使用第三方制作平台…

排序算法-冒泡排序(含C语言代码示例)

一、算法介绍 冒泡排序是一种简单的排序算法,其核心思想是重复地遍历待排序列表,比较并交换相邻元素,使得较大的元素逐渐“冒泡”到列表的末尾,而较小的元素则逐渐上浮至列表的前端。该算法的名字源于类比元素的移动过程&#xff…

Java零基础教学文档第五篇:jQuery

今日新篇章 【jQuery】 【主要内容】 jQuery简介 jQuery安装 jQuery语法 jQuery选择器 jQuery事件处理 jQueryDOM操作 jQuery元素遍历 jQuery过滤 jQuery其它方法 【学习目标】 1.jQuery简介 1.1 jQuery简介 jQuery 库可以通过一行简单的标记被添加到网页中。 1.…

vue使用el-input监听不了回车事件解决方法

无法监听回车事件 <el-input v-model"password" type"password" placeholder"密码" keyup.enter"onLogin"></el-input> 在keyup.enter后加上’.native’ <el-input v-model"password" type"password…

国内镜像:极速下载编译WebRTC源码(For Android/Linux/IOS)(二十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

C语言实现双向循环链表

1.mj版本的双向循环链表(虚拟头节点) #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define ELEMENT_NOT_FOUND -1 // 设置一个节点类 typedef struct Node {// 数据域int data;// 指针域struct Node* pre;struct Node* next; }Node; // 初…

Vue学习笔记5-- nextTick | Vue封装的过渡与动画

一、nextTick(tick-工作&#xff0c;起作用&#xff1b;下次起作用&#xff09; 语法&#xff1a; this.$nextTick(回调函数&#xff09;作用&#xff1a;在下一次DOM更新结束后执行其指定的回调。什么时候用&#xff1a;当改变数据后&#xff0c;要基于更新后的新DOM进行某些…

Linux修改文件名的三种方法分享

在Linux系统中&#xff0c;修改文件名是日常工作中常见的操作之一。无论是批量重命名文件还是修改单个文件名&#xff0c;掌握合适的方法可以提高工作效率。本文将分享三种常用的Linux修改文件名的方法&#xff0c;帮助您轻松应对文件管理任务。 方法一&#xff1a;使用mv命令 …

面试百问:Redis常见的故障以及发生场景

作为一个测试同学&#xff0c;被测系统架构中有使用到redis吗&#xff1f;对redis常见的故障有了解吗&#xff1f;又是如何进行测试的呢&#xff1f; 针对常见的redis面试问题&#xff0c;怎样才算一个高质量的回答呢&#xff0c;回答思路一般包括 问题的类型是什么&#xff…

快速入门Java NIO(Not I/O)的网络通信框架--Netty

Netty 入门 了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1. 概述 1.1 Netty 是什么&#xff1f; Netty is an asynchronous event-driven network application framework for rapid …

编程笔记 html5cssjs 039 CSS背景示例

编程笔记 html5&css&js 039 CSS背景示例 一、html二、css小结 网页上只有三个水平并列大小相同的的DIV&#xff0c;大小为300p*200,如何使用CSS让它们整体水平和垂直都居中&#xff0c;并使用不同的背景色&#xff1f; 一、html 要在网页上实现三个水平并列且大小相同…

Intellij idea安装easy code后无法打开问题

先把C:\Program Files\JetBrains\IntelliJ IDEA 2021.1.1\plugins\platform-images移除&#xff0c;得以打开idea&#xff0c;然后卸载easy code。 我的intellij idea原本有一个EasyCodeMybatisCodeHelperPro插件&#xff0c;用得好地地&#xff0c;结果有天傻傻的安装了另一个…

Flink启动Yarn Session报错:Couldn‘t deploy Yarn session cluster

Flink版本&#xff1a;1.1.3 启动Yarn Session的语句&#xff1a;bin/yarn-session.sh -nm test -d 报错截图如下&#xff1a; 仅通过ERROR信息只能知道是yarn session集群未能正常启动&#xff0c;因此继续向下查找&#xff1a; 找到报错信息的Caused by部分&#xff1a; 报…

test-03-test case generate 测试用例生成 Randoop 介绍

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 拓展阅读 自动生成测试用例 Rand…

springboot 项目访问静态资源遇到的问题,WebMvcConfigurer和WebMvcConfigurationSupport

之前发过通过继承WebMvcConfigurationSupport来访问静态资源的文章——img标签访问静态资源&#xff0c;代码如下 Configuration public class LocalPathWebMvcConfigurer extends WebMvcConfigurationSupport {/*** 在springboot项目中&#xff0c;允许浏览器访问指定本地文件…

OceanBase与MySQL兼容性对比

OB针对于高并发和大数据更有优势&#xff0c;公司的dba让我们把数据从mysql迁移到OceanBase了&#xff0c;这里记录一下OceanBase的MySQL模式。 OceanBase的MySQL模式兼容MySQL5.7的绝大部分功能和语法,兼容MySQL5.7版本的全量以及8.0版本的部分JSON函数。 暂不支持的功能: O…

13 | 使用代理ip爬取安居客房源信息

这是一个简单的Python爬虫代码,用于从安居客网站爬取房地产信息。该爬虫使用了代理IP来绕过可能的封禁,并提供了一些基本的信息抽取功能。 如果访问过多,那么可能出现了验证码 对此,最好的方法就是换ip。 使用代理IP的主要目的是保护爬虫的稳定性和隐私。以下是一些常见的原…