postgresql分布式集群之citus简介(转载)
一、Citus是什么
citus是PG的一个sharding插件,可以把PG变成一个分布式数据库。目前在苏宁有大量的生产应用跑在citus+pg的环境中。大家可以看it大咖视频。
citus是一款基于PostgreSQL的开源分布式数据库,自动继承了PostgreSQL强大的SQL支持能力和应用生态(不仅仅是客户端协议的兼容还包括服务端扩展和管理工具的完全兼容)。
和其他类似的基于PostgreSQL的分布式方案,比如GreenPlum,PostgreSQL-XL,PostgreSQL-XC相比,citus最大的不同在于citus是一个PostgreSQL扩展而不是一个独立的代码分支。
因此,citus可以用很小的代价和更快的速度紧跟PostgreSQL的版本演进;同时又能最大程度的保证数据库的稳定性和兼容性。
二、主要特性
● PostgreSQL兼容
● 水平扩展
● 实时并发查
● 快速数据加载
● 实时增删改查
● 持分布式事务
● 支持常用DDL
三、Citus架构节点
Container简称CN节点 worker节点
CN只存储和数据分布相关的元数据,实际的表数据被分成M个分片,打散到N个Worker上。这样的表被叫做“分片表”,可以为“分片表”的每一个分片创建多个副本,实现高可用和负载均衡。
分片表和参考表
分片表分布打散在多个worker节点,而参考表每一个container节点和worker都保留一模一样的副本。
下图是Citus处理客户端访问的一个简单的架构流程图,应用层直接连接CN节点,CN节点对客户端传入的sql语句进行解析,生成分布执行计划,并将各个子任务下发到相应的Worker节点,之后收集Worker的结果,经过处理后返回最终结果给客户端。最基本的流程就是这样,但是生成环境我们还应该考虑到高可用。下面将完整的介绍Citus实战集群原理。

四、Citus的三种集群
因为,citus本身不支持HA,不像mongodb一样故障自动修复,但是可以结合pg的流复制,以及应用层jdbc数据驱动实现读写分离,故障切换。
1、第一种集群,增加读的能力
多个container节点,多个container节点进行流复制,保持元数据一致,在应用层设置多个读写分离,保证了数据的一致性,也保证了业务的高可用。

2、第二种集群,citus的MX功能
此功能可以说是解决了读和写的瓶颈,苏宁的架构中也是采用同样的思想。
原理:Mx功能的原理就是让其他的worker节点携带元数据,相当于携带元数据的worker节点都支持读写的能力,很大程度解决了读写的问题。

3、第三种集群,流复制,异地容灾
使用不同的dns,解决两套集群IP不同的问题。扩展容灾能力。
这套集群是在mX的基础上解决异地容灾的方案,通过dns解析到不同的机房的数据库。
上面三种集群,最常用的最有效的方法还是MX集群,只要在应用层设置好读写规则就可以了,底层worker的HA可以用流复制,多个副本实现数据高可用。
五、worker节点网络问题
cn节点访问所有worker节点。oltp业务的访问比较频繁。
重分布数据时,worker节点相互访问,访问频率不大。olap业务场景,数据交换吞吐较大。
cn节点连worker有两种模式
1、事务级保持连接模式(每条sql发起建立连接,sql结束断开连接,(除非事务中)。跑OLAP类sql时,使用即时连接模式(olap场景并发不高,建立连接带来的额外开销不大)
2、会话保持连接模式(会话发起建立连接,会话结束后释放连接)。跑OLTP类的SQl时,使用的是会话保持(oltp查询,并发性能高)
上面两种模式,基本上Citus能满足TP也能满足AP。
后面我会把搭建过程分享出来,比较简单。如果大家有什么好的pgsql的分布式方案,可以留言评论一起交流。
citus还有好多的特性,
比如:对于计算count处理时,如何进行优化。
对于数据统计,citus提供了topn插件,与HLL类似
大家可以看官方文档介绍:https://docs.citusdata.com/en/v7.5/get_started/concepts.html#nodes-coordinator-and-workers
postgresql分布式集群之citus简介(转载)的更多相关文章
- MySQL分布式集群之MyCAT(一)简介【转】
隔了好久,才想起来更新博客,最近倒腾的数据库从Oracle换成了MySQL,研究了一段时间,感觉社区版的MySQL在各个方面都逊色于Oracle,Oracle真的好方便!好了,不废话,这次准备记录一些 ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- ElasticSearch 5学习(7)——分布式集群学习分享2
前面主要学习了ElasticSearch分布式集群的存储过程中集群.节点和分片的知识(ElasticSearch 5学习(6)--分布式集群学习分享1),下面主要分享应对故障的一些实践. 应对故障 前 ...
- ElasticSearch 5学习(6)——分布式集群学习分享1
在使用中我们把文档存入ElasticSearch,但是如果能够了解ElasticSearch内部是如何存储的,将会对我们学习ElasticSearch有很清晰的认识.本文中的所使用的ElasticSe ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...
- SolrCloud分布式集群部署步骤
Solr及SolrCloud简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成 ...
- 基于HBase0.98.13搭建HBase HA分布式集群
在hadoop2.6.0分布式集群上搭建hbase ha分布式集群.搭建hadoop2.6.0分布式集群,请参考“基于hadoop2.6.0搭建5个节点的分布式集群”.下面我们开始啦 1.规划 1.主 ...
- 基于hadoop2.6.0搭建5个节点的分布式集群
1.前言 我们使用hadoop2.6.0版本配置Hadoop集群,同时配置NameNode+HA.ResourceManager+HA,并使用zookeeper来管理Hadoop集群 2.规划 1.主 ...
- hadoop学习之hadoop完全分布式集群安装
注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流.转载请注明来自: http://blog.csdn.net/ab198604/article/details/8250461 要想深入的 ...
随机推荐
- Appium移动端测试--搭建测试环境
目录 文章目录如下 安装Android Studio及Android SDK 更改VDM默认存储路径 通过npm安装Appium Server 启动Appium GUI模式 Appium连接会话 Ap ...
- java.IO.EOFException异常
错误代码为: 43 boolean booleanResult = dis.readBoolean();//dis为DateInputStream的实例 44 System.out.println(b ...
- Github-Q&A 常见错误排查(持续更新)
Q1:提交Git时出现"remote origin already exists"提示? 关联本地与网上仓库的时候,可能会出现此错误,这是因为已经存在已关联的仓库.通过如下方法 ...
- 怎么理解js的原型链继承?
前言 了解java等面向对象语言的童鞋应该知道.面向对象的三大特性就是:封装,继承,多态. 今天,我们就来聊一聊继承.但是,注意,我们现在说的是js的继承. 在js的es6语法出来之前,我们想实现js ...
- UOJ185 ZJOI2016 小星星 容斥、树形DP
传送门 先考虑一个暴力的DP:设\(f_{i,j,S}\)表示点\(i\)映射到了图中的点\(j\),且点\(i\)所在子树的所有点映射到了图中的集合\(S\)时的映射方案数,转移暴力地枚举子集即可, ...
- ubuntu安装mysql数据库方法
ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86.64位和ppc架构.一个比较流行的Linux操作系统,不仅简单易用,而且和Windows相容性非常好.那么 ...
- C++线程同步与互斥总结
互斥:当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作来保证访问的安全性. 临界区.互斥体.事件和信号量都可以实现线程互斥.但如果仅仅需要实现互斥功能,推荐前 ...
- Cephfs 部署 创建 metadata 池 data池
上一次部署了ceph分布式存储,接下来我们部署ceph的文件系统.Ceph文件系统至少需要两个RADOS池,一个用于数据,一个用于元数据. 创建metadata 池 后面数字表示 PG 和pgp数 c ...
- Android笔记(五十一) 短信验证码集成——mob平台
官方网站:www.mob.com 注册帐号,下载SDK,导入SDK就不说了,主要写一下简单集成如何使用,以后忘记了也可以翻着看看. 详细的可以参考官方文档: http://wiki.mob.com/a ...
- CentOS7.x-lnmp环境下安装Discuz论坛
1.安装lnmp.这里采用一键安装的包 yum -y install wget wget http://soft.vpser.net/lnmp/lnmp1.6-full.tar.gz 2.加压安装ln ...