Citus高可用方案演进介绍

article/2025/9/19 7:55:17

点击上方"数据和云"

关注我们,享更多干货!

1. Citus的复制功能

Citus支持两种数据复制方案:

  • Citus的Shard Replication:通过将DML语句复制到多个Worker节点执行,实现对shard分片数据的复制,仅适用于append-only的负载;当某个Worker节点故障时,Coordinator节点会自动将查询请求转发到其他副本节点以实现高可用;

  • PostgreSQL的Streaming Replication:通过将Primary节点的WAL记录持续的复制到Standby节点,实现对Primary节点的完整复制,适用于负载较重的OLTP场景;

为什么会同时存在两种方案呢?可以看看Citus复制功能的演进过程。

1.1 第一阶段:客户端复制DML语句到多个Worker节点

在早期的版本中,Citus的主要应用场景是实时数据分析场景,用户批量的导入数据,并通过Citus进行实时数据查询分析,数据不需要修改,是完全Append-only的场景。

Append-Only的场景,各分片数据只需要在完成导入后是一致的就行,为了最大化导入性能,可以从客户端直接并行导入。

这个阶段,Citus导入数据的流程如下:

  • 客户端通知Coordinator需要导入数据到某个表;

  • Coordinator节点分配对应的placement,并反馈连接信息给客户端;

  • 客户端直接连接对应Shard及其副本,同时往多个副本写入数据;

  • 客户端通知Coordinator更新元数据。

1.2 第二阶段:Coordinator复制DML语句到多个Worker节点

随着使用Citus的人越来越多,对于提供数据更新能力的需求也越来越多。为了提供数据更新能力,Citus需要解决两个主要的问题:

  • 并发更新同一行记录,如何处理?

  • 某个Shard副本不可用,如何处理?

为了解决引入数据更新能力的问题,Citus将更新操作集中到了Coordinator节点,由集中的Coordinator节点处理并发冲突和故障处理。

此时,数据的多副本复制,改成了由Coordinator节点复制DML语句到多个Worker节点执行。

1.3 第三阶段:推荐使用Streaming Replication

随着使用Citus的场景增加,例如多租户的场景,Citus引入了Co-located亲和性共存能力,可以把相同租户的数据亲和性存储在同一个Worker节点,方便支持Join查询,Rollup、外键约束等特性。

此时,前面基于复制Statment的复制方案就会碰到问题,当某个Shard因为短时故障被标记为invalid时,应该如何处理处于同一个Co-located亲和组的其他Shard?

  • 不同步修改其他Shard状态,可能会引发违反外键约束的一致性问题;

  • 同步修改其他Shard都为invalid状态,系统的可用性会严重下降。

这是一个两难的问题,为了安全起见,Citus在6.0版本中把复制因子的默认值从2改为了1,就是因为多租户场景下可能会产生违反外键约束的问题。

现在,Citus推荐的是使用PostgreSQL的Streaming Replication,如下图所示,Streaming Replication是primary-based replication,由主节点解决并发控制问题。

2. 云上Citus高可用备选方案

2.1 备选一:Streaming Replication

如前面描述,Streaming Replication是PostgreSQL的内置特性,通过将WAL记录持续复制到Standby节点,建立Hot Standby备份节点。

2.2 备选二:镜像卷

在云上,也可以使用云提供商的镜像卷能力,当Primary节点故障时,在对应备份卷的主机上拉起数据库进程接管业务。

2.3 备选三:从日志恢复

如果对RTO业务恢复时间不太敏感,也可以采用将WAL日志增量备份到对象存储的方式,本方案的成本更低,故障后,拉起对应计算节点,从对象存储恢复日志并重放数据即可。

2.4 备选方案对比

备选方案

优点

Streaming Replication

简单方便,需要更高的存储IO能力及容量;

镜像卷

利用云存储的高持久性和稳定性;

从日志恢复

利用云存储的高持久性,可以实现PITR。

2.5 Azure Hyperscale (Citus)的高可用方案

Coordinator节点和Worker节点都使用Streaming Replication方案将数据同步复制到位于另一个AZ的Standby节点,支持AZ级的容灾。主要技术指标有:

  • 故障检测:每30秒检测一次,连续5次检测都异常则判断为故障,总计150秒;

  • 故障倒换:最高90秒完成;

  • 业务影响时间:检测 + 倒换时间,总计240秒;

  • 新建Standby节点时间:不超过1小时。

参考

  • https://www.citusdata.com/blog/2016/12/15/citus-replication-model-today-and-tomorrow/

  • https://github.com/citusdata/citus/issues/998

#

 Citus简介

Citus是PostgreSQL数据库的分布式中间件,用以解决PostgreSQL横向扩展问题,以支持更大的数据量、更大的写入和查询性能。

Citus由CitusData公司开发,目前已被微软收购,并在Azure上提供Citus Cloud服务。Citus为开源软件,经过约10年的发展,最近刚发布10.0版本,License为AGPL。

不像pg-xc的原生分布式方案,Citus是以Extension的方式扩展PostgreSQL能力,不侵入修改PostgreSQL内核代码,可以很容易和PostgreSQL的新版本配套适用,享受到内核版本演进带来的好处。

关于作者

张程伟,云和恩墨资深数据库架构师,加入云和恩墨前在华为工作16年,一直从事存储及数据库领域的研究工作。

END

长按二维码 热招职位一键投递

长按二维码 热招职位一键投递

MySQL/PG/Oracle DBA

数据库专家(售前)、销售总监/经理

200+热招职位 覆盖全国40+所城市 

由ACDU(中国DBA联盟)和墨天轮联合出品的全新视频节目「数据三分钟」已发布多期,快速了解数据行业动态,快关注我们的视频号看看吧!↓↓↓

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看” 

你的喜欢会被看到❤


http://chatgpt.dhexx.cn/article/VAobavxs.shtml

相关文章

Python 基于sicpy求解定积分 ,不定积分以及多重积分

1.SciPy是什么 SciPy是python的一个著名的开源科学库,SciPy一般都是操纵NumPy数组来进行科学计算,统计分析,可以说是基于NumPy之上。SciPy提供了许多科学计算的库函数,如线性代数,微分方程,信号处理&#x…

多重积分积分区域奇偶对称性化简积分

说白了就是根据积分区域的对称性,去看被积函数满足的性质。

java二重积分_《University Calculus》-chaper13-多重积分-二重积分的计算

之前关于二重积分的笔记,介绍了二重积分概念的引入,但是对于它的计算方法(化为累次积分),介绍的较为模糊,它在《概率论基础教程》中一系列的推导中发挥着很重要的作用。 回想先前关于二重积分的几何含义,求解一个曲顶圆…

考研数学多重积分计算秒杀(对称性化简以及雅可比球坐标)

先利用镜面对称性化简交叉项,只需要计算平方项,在利用轮换对称性只算一个二次积分,然后在用雅可比和球坐标积分来算,其中球坐标积分会涉及到三角函数幂次积分,使用华莱士公式来速算。 先平移成标准球面,x^2…

哈密顿算子和拉普拉斯算子 格林公式高斯公式和斯托克斯公式 多重积分的分部积分公式

目录 哈密顿算子(Hamiltionian) ∇ \nabla ∇标量性质矢量性质 拉普拉斯算子(Laplace) Δ \Delta Δ标量性质矢量性质 格林公式高斯公式和斯托克斯公式多重积分的分部积分公式 哈密顿算子(Hamiltionian) …

java二重积分_《University Calculus》-chaper13-多重积分-二重积分的引入

这一章节我们开始对多重积分的研究。 在此之前,我们首先来回忆起积分的过程,在平面中,面临求解不规则图形的面积(常叫曲边梯形)的时候,我们可以采取建立直角坐标系,然后通过得到不规则图形边界的函数表达式f(x)&#x…

基于MATLAB的隐函数偏导与多重积分(附代码)

一. 隐函数的偏导数 给定隐函数: 隐函数的偏导可得: MATLAB格式: F-diff(f,xj)/diff(f,xi) 例题1 已知: 求: 解: MATLAB代码: clc;clear; syms x y; f(x^2-2*x)*exp(-x^2-y^2-x*y); prett…

关于在多重积分以及曲线曲面积分中对称性的应用

引言 在最近的期末复习中经常做到一类需要用对称性来简化计算的题目,而我翻书后却发现书上并没有对这种简化方法有多少介绍,老师倒是在课上讲过,但由于期中以后太摆了也没听,因此经过查找资料后对这种方法也是进行了学习和总结。 …

高斯勒让德(Gauss-legendre)求解多重积分(python,数值积分)

第四十四篇 高斯勒让德求解多重积分 多重积分 在工程分析中,经常需要在一个面积或体积上对函数进行积分。多重积分的解析方法在有限的情况下是可能的,但在这一篇中使用数值积分去求解。一维的函数积分详见重复牛顿-科特斯积分,重复高斯勒让…

数学基础:多重积分

简介 标准定义(参考同济版教材自己给出的定义): 设 f ( x , y , z . . . . ) f(x,y,z....) f(x,y,z....)是有界区域D上的有界函数,讲闭区间D任意分成n个小闭区域 σ n \sigma _n σn​ 在每个小闭区域中任取一点,把小…

多变量微积分(4)——多重积分之三重积分

文章目录 4. 多重积分之三重积分4.1 三种正交坐标系下的三重积分4.1.1 直角坐标系下三重积分4.1.2 柱坐标系下三重积分4.1.3 球坐标系下三重积分4.1.4 积分上下限的选择4.1.5 任意曲面的面积元方法一方法二 4.2 矢量场中的多重积分(重点)4.2.1 三维矢量场…

多重积分中的换元法

34.多重积分中的换元法 34.多重积分中的换元法34.1 二重积分中的换元法34.2 三重积分中的换元法34.2.1 柱面坐标系中的换元法34.2.2 球面坐标系中的换元法 34.多重积分中的换元法 坐标变换中通过换元求多重积分.这个方法用更容易计算的积分来代替复杂的积分。 换元法通过简化被…

matlab多重积分如何使用方法,MATLAB在《高等数学》中的应用_多重积分

论文导读::MATLAB是矩阵实验室的简称,在图形处理方面表现突出。《高等数学》是大学教育中重要的基础理论课之一,图形在《高等数学》的学习中占有重要的位置。在《高等数学》中使用MATLAB可以将复杂的问题变的直观、明了。 关键词:MATLAB,泰勒公式,多重积分 MATLAB是矩阵实…

latex多重积分

重积分 二重积分可以使用\iint表示 ∬ \iint ∬ 三重积分使用\iiint表示 ∭ \iiint ∭ 环路积分使用\oint表示 ∮ \oint ∮ 多重环路同理,但是需要在amsmath宏包后加上esint宏包 下标 一般直接使用\iint_D显示 ∬ D \iint_D ∬D​ 想要让D在正下方&#xff0…

高等数学(总结9-多重积分)

1)二重积分的性质&#xff1a; A&#xff09; &#xfeff;&#xfeff; B)可加性 C) D)如果f(x,y)<φ(x,y)E)M,m分别是f(x,y)的最大值和最小值: F)积分中值定理 2)二次积分公式&#xff1a;注意积分形状&#xff0c;x,y可以调换。 3&#xff09;极坐标也可以采用二次…

多重积分的理解以及转动惯量的求解

多重积分的理解以及转动惯量的求解 一、积分 学到这里应该对与积分的概念很熟悉这里就不过多赘述。 二、二重积分 二重积分的一般形式为     ∬ S f ( x , y ) d x d y \iint_S f(x,y)\,{\rm d}x\,{\rm d}y ∬S​f(x,y)dxdy 一般理解为一个物体的体积&#xff0c;这里…

Insyde uefi 隐藏设置_文件隐藏工具Wise Folder Hider Pro便携版分享

Wise Folder Hider Pro v4.3.4.193是一款非常实用的文件隐藏工具&#xff0c;使用它可以将你的一些文件隐藏起来&#xff0c;比如图片&#xff0c;文档、视频等。 每个人都有一些不想要别人看见的东西&#xff0c;放在电脑桌上容易被别人点开&#xff0c;好奇的原因点开看一下&…

Insyde uefi 隐藏设置_Hidden bar:Mac菜单栏图标隐藏利器

Hidden bar 有些软件可以设置不在菜单栏显示图标&#xff0c;也有不少软件没有提供这样的设置。随着安装的软件越来越多&#xff0c;不少人会为Mac菜单栏位置紧张烦恼。 Hidden Bar 是一款类似 Bartender 的 macOS 菜单栏应用图标隐藏软件&#xff0c;按住 ⌘ 同时拖动软件 ico…

Insyde uefi 隐藏设置_苹果手机:插件NoMessageButtons:可隐藏iOS信息应用界面的按钮...

如今使用IT数码设备的小伙伴们是越来越多了&#xff0c;那么IT数码设备当中是有很多知识的&#xff0c;这些知识很多小伙伴一般都是不知道的&#xff0c;就好比最近就有很多小伙伴们想要知道插件NoMessageButtons&#xff1a;可隐藏iOS信息应用界面的按钮&#xff0c;那么既然现…