postgresql分布式集群之citus

今天,利用你们的休息时间分享postgresql分布式集群,利用Citus实现分库分表。

1、Citus是什么html

citus是PG的一个sharding插件,能够把PG变成一个分布式数据库。目前在苏宁有大量的生产应用跑在citus+pg的环境中。你们能够看it大咖视频。

   citus是一款基于PostgreSQL的开源分布式数据库,自动继承了PostgreSQL强大的SQL支持能力和应用生态(不只仅是客户端协议的兼容还包括服务端扩展和管理工具的彻底兼容)。 

   和其余相似的基于PostgreSQL的分布式方案,好比GreenPlum,PostgreSQL-XL,PostgreSQL-XC相比,citus最大的不一样在于citus是一个PostgreSQL扩展而不是一个独立的代码分支。 

    所以,citus能够用很小的代价和更快的速度紧跟PostgreSQL的版本演进;同时又能最大程度的保证数据库的稳定性和兼容性。

2、主要特性node

● PostgreSQL兼容sql

● 水平扩展mongodb

● 实时并发查数据库

● 快速数据加载网络

● 实时增删改查架构

● 持分布式事务并发

● 支持经常使用DDL负载均衡

3、Citus架构节点分布式

Container简称CN节点  worker节点

  CN只存储和数据分布相关的元数据,实际的表数据被分红M个分片,打散到N个Worker上。这样的表被叫作“分片表”,能够为“分片表”的每个分片建立多个副本,实现高可用和负载均衡。

    分片表和参考表

   分片表分布打散在多个worker节点,而参考表每个container节点和worker都保留如出一辙的副本。

   下图是Citus处理客户端访问的一个简单的架构流程图,应用层直接链接CN节点,CN节点对客户端传入的sql语句进行解析,生成分布执行计划,并将各个子任务下发到相应的Worker节点,以后收集Worker的结果,通过处理后返回最终结果给客户端。最基本的流程就是这样,可是生成环境咱们还应该考虑到高可用。下面将完整的介绍Citus实战集群原理。

postgresql分布式集群之citus
4、Citus的三种集群

由于,citus自己不支持HA,不像mongodb同样故障自动修复,可是能够结合pg的流复制,以及应用层jdbc数据驱动实现读写分离,故障切换。

第一种集群,增长读的能力

多个container节点,多个container节点进行流复制,保持元数据一致,在应用层设置多个读写分离,保证了数据的一致性,也保证了业务的高可用。

postgresql分布式集群之citus

第二种集群,citus的MX功能

此功能能够说是解决了读和写的瓶颈,苏宁的架构中也是采用一样的思想。

原理:Mx功能的原理就是让其余的worker节点携带元数据,至关于携带元数据的worker节点都支持读写的能力,很大程度解决了读写的问题。

postgresql分布式集群之citus

第三种集群,流复制,异地容灾。使用不一样的dns,解决两套集群IP不一样的问题。扩展容灾能力。

这套集群是在mX的基础上解决异地容灾的方案,经过dns解析到不一样的机房的数据库。
postgresql分布式集群之citus

上面三种集群,最经常使用的最有效的方法仍是MX集群,只要在应用层设置好读写规则就能够了,底层worker的HA能够用流复制,多个副本实现数据高可用。

5、worker节点网络问题

cn节点访问全部worker节点。oltp业务的访问比较频繁。

重分布数据时,worker节点相互访问,访问频率不大。olap业务场景,数据交换吞吐较大。

cn节点连worker有两种模式

一、事务级保持链接模式(每条sql发起创建链接,sql结束断开链接,(除非事务中)。跑OLAP类sql时,使用即时链接模式(olap场景并发不高,创建链接带来的额外开销不大)

二、会话保持链接模式(会话发起创建链接,会话结束后释放链接)。跑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

相关文章
相关标签/搜索