Orchestrator自身高可用性方案

目录

获得 HA 的方法

一 没有高可用性 (No high availability)

使用场景

架构组成

架构图

二 半高可用性(Semi HA)

三 基于共享数据库后端高可用(HA via shared backend)

四 基于Raft协议高可用

五 方案对比

注意事项

笔记


orchestrator作为高可用的服务运行。本文档列出了orchestrator实现 HA 的各种方法

获得 HA 的方法

HA 可以通过选择以下任一方式来实现:

  • orchestrator/raft设置,orchestrator节点通Raft 共识算法进行通信。每个orchestrator节点都有一个私有数据库后端(MySQLsqlit)。另请参阅Orchestrator/raft 文档
  • 共享后端设置。多个orchestrator节点都与同一个后端数据库通信,该后端可能是 Galera/XtraDB Cluster/InnoDB Cluster/NDB Cluster。同步是在数据库级别完成的

一 没有高可用性 (No high availability

使用场景

这种适用于测试。本地开发环境。

架构组成

这种架构由 单个orchestrator节点和单个后端数据库组成。

后端数据库可以是MySQL也可以是orchestrator自带的sqlite。

架构图

二 半高可用性(Semi HA)

这种架构只有orc服务有高可用行,后端数据库没有高可用行

方式一 

多个orc节点使用MySQL主从中的master。orc 服务实现了高可用,但是后端数据库却没有。后端数据库是主从架构,每个orc节点不能有自己单独的后端数据库。如果后端数据库的master无法进行故障转移

方式二 

多个orc节点使用都配置为代理层的IP 。代理层后端是MySQL双主架构,并且双主架构复制规则设置为statement。

  • 代理层一直指向同一个MySQL节点,除非这个MySQL发生了故障
  • master 宕机后 orc就会通过代理层去访问另一个数据库节点。但是这个数据库节点数据可能有落后,orc会补充这些丢失 通过持续发现的特性。
  • orchestrator查询保证基于STATEMENT格式的复制不会导致重复错误,并且主主设置将始终实现一致性。
  • orchestrator即使在进行故障恢复过程中也可以对后端宕机的master进行启动(恢复将在备用master重新启动)
  • 脑裂是有可能的。 根据您的设置、物理位置、代理类型,可能有不同的orchestrator服务节点与不同的后端MySQL服务器通信。这种情况可能会导致两个orchestrator服务都认为自己是“活动的”,这两个服务都将独立运行故障转移,这将导致拓扑损坏。

三 基于共享数据库后端高可用(HA via shared backend)

完全的高可用是 通过后端数据库也具有高可用能力 实现。现有的后端数据库解决方案有:

  • Galera
  • XtraDB Cluster
  • InnoDB Cluster
  • NDB Cluster

上面的架构都要

  •  Galera/XtraDB Cluster/InnoDB Cluster 使用单写模式运行。多个orchestrator节点可能通过代理与写入节点进行通信。如果写节点发生故障,后端集群将提升另一个数据库作为写节点;由您的代理来识别并将orchestrator的流量引导新的写节点。
  •  Galera/XtraDB Cluster/InnoDB Cluster 在多写模式下运行。一个好的设置建议是将每个orchestrator节点与数据库服务器部署在同一服务器上。由于复制是同步的,因此不存在裂脑。只有一个orchestrator节点可以成为领导者,并且该领导者只会与数据库节点达成共识。

四 基于Raft协议高可用

以上介绍的三种方式都没有引入Raft共识算法。

orchestrator节点直接通过Raft共识算法进行通信。每个orchestrator节点都有自己私有的后端数据库(可以是MySQL或者sqlite)。

只有一个orchestrator节点可以成为leader,并且始终是共识?的一部分。然而,所有其他节点都是独立活动的,并且正在轮询您的拓扑。

在这种设置中

  • 数据库节点之间没有通信
  • orchestrator节点之间通信最少 
  • 与MySQL拓扑节点的通信次数是orc节点个数的倍数。一个3个节点orc 意味着被监控的MySQL集群中需要被3个独立不同的orc节点探测。
  • 建议运行为3个节点或者5个节点
  • sqlite是orc内置的 不需要在额外的安装。如果流量较大 建议使用MySQL。

要访问orc服务 ,你只能与leader角色通信。

  • 使用/api/leader-check作为代理的  HTTP 健康状况检查。
  • 或者使用具有多个orchestrator后端的orchestrator-client;orchestrator-client将找出领导者的身份并向领导者发送请求。

五 方案对比

这比较了两种高可用性部署方法的部署、行为、限制和优势:orchestrator/raftorchestrator/[galera|xtradb cluster|innodb cluster]

我们将假设并比较:

  • 3数据中心设置(可用区可以算作数据中心)
  • 3节点 orchestrator/raft 设置
  • 3 orchestrator节点和 galera|xtradb cluster|innodb cluster多写模式(集群中的每个 MySQL 都可以接受写入)
  • 代理 可以运行 HTTP或者mysql健康检查
  • MySQL,MariaDB,Percona Server统称为MySQL

比较orchestrator/raftsynchronous replication backend
通信每个orchestrator节点都有一个私有的后端DB;orchestrator节点通过raft协议进行通信每个orchestrator节点连接到MySQL同步复制组中的不同成员。orchestrator节点之间不进行通信。
后端数据库
 
MySQL 或 sqliteMySQL
对后端数据库的依赖如果无法访问自己的私有后端数据库,服务会出现如果无法访问自己的私有后端数据库,则服务不健康
数据库数据一致性跨数据库后端独立。可能会有所不同,但在稳定的系统上会收敛到相同的整体情况单个数据集,跨数据库后端同步复制
数据库访问千万不要直接写。只有raft节点在协调/合作时访问后端数据库。否则可能会导致不一致。读取没问题可直接访问、写入;所有orchestrator节点/客户端都会看到完全相同的图片

Leader and actions

单一Leader。只有Leader才能进行恢复。所有节点都可以进行发现(探测)和自我分析单一Leader。只有Leader才能进行发现(探测)、分析和恢复。
HTTP 访问必须只能访问领导者(可以通过代理或强制执行orchestrator-client可以访问任何健康的节点(可以通过代理强制执行)。为了读取一致性,最好只与领导者交谈(可以通过代理或强制执行orchestrator-client
命令行HTTP/API 访问(例如curljq)或orchestrator-client使用熟悉的命令行界面封装常见 HTTP/API 调用的脚本HTTP/API 和/或orchestrator-client脚本或orchestrator ...命令行调用。
安装orchestrator仅在服务节点上提供服务。orchestrator-client任何地方的脚本(需要访问 HTTP/API)。orchestrator服务节点上的服务。orchestrator-client任何地方的脚本(需要访问 HTTP/API)。orchestrator任何地方的客户端(需要访问后端数据库)
ProxyHTTP。只能将流量引导至Leader ( /api/leader-check)HTTP。必须仅将流量引导至健康节点 ( /api/status);最好只将流量引导至Leader节点 ( /api/leader-check)
No Proxyorchestrator-client与所有后端一起使用orchestratororchestrator-client将引导流量至 master。orchestrator-client与所有后端一起使用orchestratororchestrator-client将引导流量至 master。
跨机房每个orchestrator节点(以及私有后端)可以在不同的 DC 上运行。节点间通信不多,流量低。每个orchestrator节点(以及关联的后端)可以在不同的 DC 上运行。orchestrator节点不直接通信。MySQL组复制通信频繁。流量主要与拓扑大小和轮询率呈线性关系。写入延迟。
探测orchestrator所有节点探测每个拓扑服务器每个拓扑服务器由单个活动节点探测
故障分析由所有节点独立执行仅由领导者执行(数据库是共享的,因此所有节点无论如何都会看到完全相同的图片)
故障转移仅由Leader执行仅由Leader节点执行
抵御失败的能力

如果有3个节点,1个节点允许宕机

如果有5个节点,2个节点允许宕机

如果有3个节点,1个节点允许宕机

如果有5个节点,2个节点允许宕机

节点从短暂故障中恢复节点重新加入集群,并根据更改进行更新。数据库节点重新加入集群,并根据更改进行更新。
节点从长期中断中恢复必须从健康节点克隆数据库。取决于您的 MySQL 后端实现。可能从备份进行 SST/恢复。

注意事项

以下是在两种方法之间进行选择时的注意事项:

  • 您只有一个数据中心 (DC):选择共享数据库甚至更简单的设置
  • 您对 Galera/XtraDB Cluster/InnoDB Cluster 感到满意,并且可以自动设置和维护它们:选择共享数据库后端。
  • 您拥有高延迟跨 DC 网络:选择orchestrator/raft方案
  • 您不想为orchestrator后端分配 MySQL 服务器:选择orchestrator/raft 和  SQLite数据库
  • 您有数千个 MySQL 集群:选择MySQL

笔记

  • 另一种同步复制设置是单个写入器的同步复制设置。这需要orchestrator节点和底层集群之间有一个额外的代理,上面没有考虑。

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

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

相关文章

【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)

使用 Terraform 从 EC2 实例访问 S3 存储桶 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_ec2_s3connet 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_…

shell 11(shell重定向输入输出)

一、标准输入输出 标准输入介绍 从键盘读取用户输入的数据,然后再把数据拿到Shell程序中使用; 标准输出介绍 Shell程序产生的数据,这些数据一般都是呈现到显示器上供用户浏览查看

数字 IC 设计职位经典笔/面试题(三)

共100道经典笔试、面试题目(文末可全领) 1. IC 设计中同步复位与异步复位的区别? 同步复位在时钟沿变化时,完成复位动作。异步复位不管时钟,只要复位信号满足条件,就完成复位动作。异步复位对复位信号要求…

第1章:计算机网络体系结构

文章目录 1.1 计算机网络 概述1.概念2.组成3.功能4.分类5.性能指标1.2 计算机网络 体系结构&参考模型1.分层结构2.协议、接口、服务3.ISO/OSI模型:七层4.TCP/IP模型:四层1.1 计算机网络 概述 1.概念

Arduino 入门学习笔记12 读写外置EEPROM

Arduino 入门学习笔记12 读写外置EEPROM 一、准备工作1. 外置 EEPROM 简介2. Arduino操作外置 EEPROM 流程 二、读写操作流程1. 写操作流程2. 读操作 三、示例代码 一、准备工作 1. 外置 EEPROM 简介 外置I2C接口的EEPROM是一种常用的非易失性存储器,通过I2C总线与…

石油和天然气行业如何实现数字化转型和工业4.0

石油和天然气行业的数字化转型正面临着前所未有的挑战和机遇。尽管过去相对滞后,这个复杂而庞大的行业正逐渐意识到数字化的紧迫性,以应对市场变化、降低运营成本、提高效率和确保可持续性。然而,数字化转型的进程并非一帆风顺,行…

echarts 之 科技感进度条

1.图片展示 2.代码实现 /* ng qty 进度条 */ <template><div class"ngqty-progress"><div class"ngqty-info"><span>X4</span><span>50%</span></div><div :id"barNgQtyProgress index" c…

【校招VIP】产品行测考点之图的推理和分析

考点介绍&#xff1a; 大厂产品校招笔试里经常会出现行测的考察&#xff0c;而图的推理是行测里面稍微有难度的一部分。因为时间有限&#xff0c;很多同学因为没有解题思路而丢分。 『产品行测考点之图的推理和分析』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一…

第 7 章 排序算法(4)(插入排序)

7.7插入排序 7.7.1插入排序法介绍: 插入式排序属于内部排序法&#xff0c;是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 7.7.2插入排序法思想: 插入排序&#xff08;Insertion Sorting&#xff09;的基本思想是&#xff1a;把n个待排…

Kaggle分类问题Titanic——Machine Learning from Disaster

目录 前言1 题目介绍2 数据清洗3 数据可视化分析4 模型训练5 源码 前言 这是我在大三选修课的课程设计&#xff0c;内容参考了Kaggle上高赞的代码&#xff0c;有详细批注&#xff0c;整体比较基础&#xff0c;结构相对完整&#xff0c;便于初学者学习。这个是一个分类问题&am…

【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解

一、动态内存分配 定义&#xff1a;动态内存分配 (Dynamic Memory Allocation) 就是指在程序执行的过程中&#xff0c;动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样&#xff0c;需要预先分配存储空间&#xff0c;而是由系统根据程…

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3…

android Junit4编写自测用例

10多年的android开发经验&#xff0c;一直以来呢&#xff0c;也没有使用过android自带的测试代码编写。说来也惭愧。今天也花了点时间稍微研究了下。还挺简单。接下来就简单的说一下。 新建工程 直接默认新建一个工程&#xff0c;就会有两个目录androidTest和test(unitTest)两…

Qt+C++动力监控动画仿真SCADA上位机

程序示例精选 QtC动力监控动画仿真SCADA上位机 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC动力监控动画仿真SCADA上位机>>编写代码&#xff0c;代码整洁&#xff0c;规则…

Spring 为什么使用三级缓存解决循环依赖

文章目录 前言1. 什么是循环依赖1.1 互相依赖1.2 递归依赖 2. Sping中循环依赖有什么问题&#xff1f;3. 什么是三级缓存4. Spring 可以解决哪些情况的循环依赖&#xff1f; 二级缓存作用——普通循环依赖实操环节1. 实例化类A对象2. 实例化类B对象3. B对象完成创建4.继续创建A…

合宙Air724UG LuatOS-Air LVGL API--对象

对象 概念 在 LVGL 中&#xff0c;用户界面的基本构建块是对象。例如&#xff0c;按钮&#xff0c;标签&#xff0c;图像&#xff0c;列表&#xff0c;图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性&#xff1a; Position (位置) Size (尺寸) Parent (父母…

2.文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(附matlab程序)

0.代码链接 1.简述 光热发电是大规模利用太阳能的新兴方式&#xff0c;其储热系 统能够调节光热电站的出力特性&#xff0c;进而缓解光热电站并网带来的火电机组调峰问题。合理配置光热电站储热容量&#xff0c;能够 有效降低火电机组调峰成本。该文提出一种光热电站储热容 量配…

mysql-sql性能分析工具

一、sql执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff1a; -- session 是查看当前会话 ; -- global 是查询全…

异地机房容灾备份方案,异地容灾备份方式有哪些

任何时候&#xff0c;我们都不能避免自然灾害、硬件问题、黑客攻击等事故。这些事情可能会导致数据中心的偏瘫&#xff0c;甚至影响整个业务的正常使用。因此&#xff0c; 机房容灾备份计划已成为确保业务连续性的关键对策。 一、异地机房容灾备份方案是什么&#xff1f; 国外…

运维高级学习--Docker(二)

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 #拉取mysql5.6和owncloud镜像 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull owncloud [rootlocalhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED …