> 文档中心 > Postgres 分布式数据库

Postgres 分布式数据库

分布式数据

聊起分布式数据库,大家第一印象估计是 谷歌的 Spanner  ,以及 TiDB。其实还有另外一种分布式 Postgres-XC (目前已经迭代到 PostgreSQL-X2 ),Postgres-XC  数据库系统主要是基于水平可伸缩的share nothing 架构,支持全局事务,表分区,复制以及查询计划在各个节点并行执行。

国内的代表作是鹅厂的 TBase 基于Postgres-XC 二次开发并且做了很大改进,在性能和功能上有比较大提升。

架构

Postgres-XC主要组件有gtm(Global Transaction Manager) , gtm_standby , gtm_proxy, Coordinator 和Datanode。

基于postgres-xc 的 tbase 架构图

从上图可以看出Coordinator和Datanode节点可以配置为多个,并且可以位于不同的主机上。只有Coordinator节点直接对应用服务,Coordinator节点将数据分配存储在多个数据节点datanode上。

gtm:全局事务管理器(Global transaction manager.), 是 Postgres-XC 的核心组件,用于全局事务控制以及tuple的可见性控制。gtm 为分配GXID和管理PGXC MVCC的模块 , 在一个集群中只能有一台主gtm。gtm_standby 为gtm的备机 。

gtm_proxy 用于对coordinator节点提交的任务进行分组等操作。一个XC 集群中可以存多个gtm_proxy 节点。

coordinator:协调节点(简称CN),对外提供接口,负责数据的分发和查询规划,多个节点位置对等,每个节点都提供相同的数据库视图;在功能上CN上只存储系统的全局元数据,并不存储实际的业务数据。

datanode:处理存储本节点相关的元数据,每个节点还存储业务数据的分片,简称DN。在功能上,DN节点负责完成执行协调节点分发的执行请求。表数据在DN存储方式分为分片(distributed)和完全复制(replicated)两种。数据节点只存储本地的数据。

在这个架构下,集群具有下面几个能力:

多活/多主:每个coordinator提供相同的集群视图,可以从任何一个CN进行写入,业务无需感知集群拓扑;

读/写扩展:数据被分片存储在了不同的DN,集群的读/写能力,随着集群规模的扩大做而得到提升;

集群写一致:业务在一个CN节点发生的写事务会一致性的呈现在其他的CN节点,就像这些事务是本CN节点发生的一样;

集群结构透明:数据位于不同的数据库节点中,当查询数据时,不必关心数据位于具体的节点;Postgres-XC 的share nothing集群架构方便了业务接入,降低了业务接入的门槛。

数据存储

数据在集群中的分布分为以下三种情况

复制表:复制表中的每个存储节点都有完整的数据副本,适用于变化较少的小表,可以加速关联查询。

HASH 分布: 将数据按照分布列进行 hash,把数据打散在各个存储节点中,当然如果 hash key 选择不当,则可能造成数据倾斜的情况。

RANGE分布: RANGE 分布会将数据按照分段打散成小的分片,和 hash 相比分布上不会特别严格,对上层的节点弹性有比较好的支持。但它在计算的时候,相对 hash 的效果不会特别好。

前面说了postgres-xc 的原理,接下来,我们动手实践安装部署开源的TBase

安装实践

提前准备tbase 账号以及安装目录

useradd -d /home/tbase tbase mkdir /opt/tbase mkdir -p /data/tbase

获取源代码

git clone https://github.com/Tencent/TBase.git

编译

提前安装基础软件

yum install -y uuid  uuid-devel  readline-devel  flex

编译源代码

cd TBaserm -rf /opt/tbasechmod +x configure*./configure --prefix=/opt/tbase/  --enable-user-switch --with-openssl  --with-ossp-uuid CFLAGS=-gmake cleanmake -sjmake installchmod +x contrib/pgxc_ctl/make_signaturecd contribmake -sjmake install

配置文件

可以根据 https://github.com/Tencent/TBase/wiki/0-TBase_Quick_Start.EN 提供的配置文件模板编写自己的 pgxc_ctl.config ,替换掉里面的角色变量 名称,ip ,端口即可。生产上请结合实际情况修改相关参数。

部署

本文是最小化安装tbase集群,没有 dn的从节点, gtm的从节点 。

节点 Center Aligned 角色 目录
gtm 172.16.78.32 master /tbase/pgxc/nodes/gtm
cn001 172.16.78.32 master /tbase/pgxc/nodes/cn_master
cn002 172.16.78.33 master /tbase/pgxc/nodes/cn_master
dn001 172.16.78.32 master /tbase/pgxc/nodes/dn001
dn002 172.16.78.33 master /tbase/pgxc/nodes/dn002

接下来可以使用 pgxc_ctl  命令进行部署 ,安装 ,初始化集群。切换到 tbase 系统账号。然后 执行

pgxc_ctl  进入交互命令行 如下图所示

deploy all   部署拷贝软件到对应目录init all     初始化 tbase集群start all    启动所有节点monitor all  观察监控各个节点的运行状态

 

 

create default node group default_group with (dn001,dn002);create sharding group to group default_group;

到此就安装完毕,大家可以进行各种测试。

小结

总体感受下来

  1. postgres-xc 的分布式架构没有使用基于raft/paxos协议管理分布式数据写入,dn节点使用主从方式,在性能上会有一些优势,不过具体多少还没完全测试,这个和机器规格,参数配置有关。

  2. TBase 开源是一个值得肯定的事情,文档,社区支持等有一些列的支持动作,但是没有像某些开源分布式数据库做的那么活跃,社区,微信群,各种互联网公司试/使用,考试认证。TBase 群里只有一个人支持答疑,github的答疑也是 她一个人,挺辛苦的,Tbase的朋友要给她加鸡腿儿。

  3. TBase 开源版本和商业版本在功能上还是有很大差异的,比如管控功能,闪回功能,如果你想用更好的功能,那么

其实还有很多功能没有在本文提到,比如HTAP 能力,支持列存,冷热数据存储等,具体可以参考官方文档或者鹅厂相关分享。