作者:杨杰

简介

Citus是Postgres的开源扩展,将Postgres转换成一个分布式数据库,在集群的多个节点上分发数据和查询,具有像分片、分布式SQL引擎、复制表和分布式表等特性。
因为Citus是Postgres的扩展(而不是一个独立的代码分支),所以当你使用Citus时,你也在使用Postgres,可以利用最新的Postgres特性、工具和生态系统。

架构节点

每个集群都有一个称为协调节点(Coordinator Node,CN)的特殊节点,其他节点称为工作节点(Worker Node,WN/DN)。
CN只存储和数据分布相关的元数据,实际的表数据被分成M个分片,打散到N个DN上。
应用程序将它们的查询发送到协调器节点,该节点将查询转发给相关的数据节点并收集结果。

注:以上以分布式表为例

集群拓扑

首先介绍原生Citus支持的几种集群拓扑

statement-based replication

为了提高可用性,协调节点通过PG原生流复制实现多副本,数据节点通过基于语句复制实现表级别的副本,副本数由参数shard_replication_factor = 2控制。
基于语句复制存在的问题就是,如果子表非常多,SQL数量成比例增长,压力增加,同时,当子表出现问题时,会标记为非活跃状态,涉及与协调节点通信变更元数据,如果出问题的子表很多,性能自然不会好,相应还会带来副本修复的问题。

用Raft来做数据复制,每个数据变更都会落地为一条Raft日志,通过Raft的日志复制功能,将数据安全可靠地同步到复制组的每一个节点中。不过在实际写入中,根据Raft的协议,只需要同步复制到多数节点,即可安全地认为数据写入成功。
相比PG本身的主从副本,开发成本比较大,目前Citus已经建议从基于语句的复制切换到流式复制,参数replication_model = ‘streaming’

streaming replication

协调节点及数据节点都通过流复制实现多副本,保证可用性。
数据节点副本同步使用PG流复制,提高分片上的写入速度。
协调节点属于Master-Standby架构,仅CN节点支持数据写入,势必会有单点可入瓶颈。
另外,默认CN-Stanby的查询发往DN-Primary节点,协调节点虽然做了读写分离,但底层请求都发给了DN-Primary,DN-Standby仅仅充当了备份副本。
对此,Citus还提供了两个参数以支持写入能力扩展及数据节点读写分离。

use_secondary_node

开启use_secondary_node = always,读请求可以发往数据节点备节点。
writable_standby_coordinator
开启writable_standby_coordinator = on
Enables?simple?DML?via?a?streaming?replica?of?the?coordinator
这个参数的作用就是使CN-Standby也支持DML,比如Insert、Copy等操作。
除了通过writable_standby_coordinator参数支持多节点DML,Citus还提供了MX架构。

Citus MX

通过MX架构,数据节点同时存储用户数据及元数据,数据读写能力得到了水平扩展。
对于MX架构,数据节点支持存储元数据以支持读写请求,同时也增加了数据节点的压力,对此可以考虑计算存储分离架构。
Citus支持通过函数master_set_node_property设置节点的shouldhaveshards属性,控制DN节点不放分片,专门用于分担CN负载。

至此,便是目前Citus原生支持的几种集群拓扑。

计算存储分离+读写分离

原生Citus仅支持在CN-Master执行DDL操作,通过实现保障数据一致性的多点DDL方案,CN节点不在区分节点角色,可在任一CN节点执行DDL+RW。
除此之外,不再通过参数控制决定读写分离,直接根据Query类型做读写分离,将读请求发送到DN-Standby。

了解更多PostgreSQL热点资讯、新闻动态、精彩活动,请访问中国PostgreSQL官方网站:www.postgresqlchina.com

解决更多PostgreSQL相关知识、技术、工作问题,请访问中国PostgreSQL官方问答社区:www.pgfans.cn

下载更多PostgreSQL相关资料、工具、插件问题,请访问中国PostgreSQL官方下载网站:www.postgreshub.cn

Citus集群拓扑架构介绍相关推荐

  1. redis集群拓扑_Redis拓扑

    redis集群拓扑 Redis - an open-source in-memory data structure store, is a very significant piece in mode ...

  2. Apache Durid (HDFS原理 特性 读写测试 集群部署 架构设计)

    Apache Durid (HDFS 集群部署) Apache Durid (HDFS 集群部署) 1. 分布式文件HDFS 1.1 HDFS简介 1.1.1 HDFS发展历史 1.1.2 HDFS设 ...

  3. 数据中台Citus集群压测报告

    作者简介: 迪颉科技是专注于企业数字化转型数据价值及数据治理,并在大数据.数据中台(零售.制造行业).dataops/数仓以及数据驱动的应用等,提供专业解决方案的团队.在以往外企的从业经验中,将原来的 ...

  4. 【冬瓜哥手绘雄文】集群文件系统架构演变终极深度梳理图解

    上篇文章<IO时延你被骗了多久>,竟然没有人给瓜哥发红包!很不像话!冬瓜哥起早贪黑打把势卖艺,最终却连五毛党都赶不上,所以瓜哥决定这篇文章之后休息一段时间,玩玩游戏,看看电影,睡睡大觉了. ...

  5. 企业集群平台架构设计与实现(lvs/haproxy/keepalived)-高俊峰-专题视频课程

    企业集群平台架构设计与实现(lvs/haproxy/keepalived)-4979人已学习 课程介绍         爱维Linux独家出品,集合目前热门的集群应用技术LVS/HAPROXY/Kee ...

  6. postgres 数据库 citus 集群分片

    文档结构: 以下前言来自网络 前言 什么时候需要考虑做数据切分? 1.能不切分尽量不要切分 并不是所有表都需要进行切分,主要还是看数据的增长速度.切分后会在某种程度上提升业务的复杂度,数据库除了承载数 ...

  7. 在Citus集群中添加新节点

    一.添加Citus新节点作为primary worker node 1.在新节点上安装PG和Citus,以及其他需要的组件(也可以在已有PG服务器上创建新的PG数据库实例): 2.初始化PG数据库实例 ...

  8. 云原生分布式 PostgreSQL+Citus 集群在 Sentry 后端的实践

    优化一个分布式系统的吞吐能力,除了应用本身代码外,很大程度上是在优化它所依赖的中间件集群处理能力.如:kafka/redis/rabbitmq/postgresql/分布式存储(CephFS,Juic ...

  9. 【Kafka】第三篇-Kafka的集群及Canal介绍

    [上一章 [Kafka]第二篇-Kafka的核心概念及分区消费规则] 学习路线 Kafka集群架构 Kafka集群环境 1.kafka是一个压缩包,直接解压即可使用,所以我们就解压三个kafka: 2 ...

最新文章

  1. 软件工程 speedsnail 冲刺3
  2. python异常值检测的方法_Python实现非正太分布的异常值检测方式
  3. java dh算法_dh密钥交换算法java
  4. 微软MSDN中文网络广播(Webcast)——Visual Studio 2010 ALM应用实践系列课程预告(2011)...
  5. CentOSserverMysql主从复制集群结构
  6. MySQL(二)InnoDB的内存结构和特性
  7. VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决
  8. 【教程】Microsoft Wi-Fi Direct Virtual关闭方法
  9. 绑定gridview去掉标题文字粗体。
  10. Git ~ 添加远程仓库 ~Git
  11. Android 耳机插入过程分析 (AudioManager部分)
  12. 雄伟到惊世骇俗的黄羊山超级相控阵雷达
  13. 港口水域电子海图数据快速检索算法及应用
  14. cadence ~ PCB排版 必要流程
  15. java一键生成《数据库设计文档》
  16. 这五个数据分析师技巧你一定要知道!
  17. iOS编译cURL库并链接darwinssl,zlib,c-ares库操作步骤
  18. 电脑C盘满了怎么办?请放心删除这些文件夹
  19. cas mysql_使用CAS连接Mysql数据库
  20. mongoose http服务器对TCP流的接收处理

热门文章

  1. 四级——星火英语作文模板
  2. c语言 情书,用c语言写的情书
  3. MySQL查询报错Unknown column ‘new_edition‘ in ‘IN/ALL/ANY subquery‘
  4. OpenCV(4.0.0) Error: Assertion failed (dst.data == (uchar*)dst_ptr) in cvShowImage
  5. 从硬件配置开始 网吧的服务器设置全攻略(转)
  6. Allegro和Alitum Desiger PCB文件互转方法
  7. 美容门店信息化管理系统该如何搭建?不妨参考一下百数
  8. 助力移动物联网开启高质量发展新征程,芯讯通获“2022年移动物联网先进企业”奖
  9. 罗振宇、吴晓波都错了,知识是免费的
  10. 华为设备配置IS-IS命令