北在南方

V1

2022/04/08阅读:13主题:默认主题

Postgres XC

分布式数据库

聊起分布式数据库,大家第一印象估计是 谷歌的 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。

从上图可以看出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 uuid readline-devel flex

编译源代码

cd TBase
rm -rf /opt/tbase
chmod +x configure*
./configure --prefix=/opt/tbase/  --enable-user-switch --with-openssl  --with-ossp-uuid CFLAGS=-g
make clean
make -sj
make install
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj
make 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 开源是一个值得肯定的事情,文档,社区支持等有一些列的支持动作,但是没有像某些开源分布式数据库做的那么活跃。群里只有一个 人支持答疑。

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

其实还有很多功能没有在本文提到,具体可以参考官方文档或者鹅厂相关分享。

参考资料

https://cloud.tencent.com/developer/article/1494548 https://cloud.tencent.com/developer/article/1635680 https://cloud.tencent.com/developer/article/1847790

分类:

后端

标签:

后端

作者介绍

北在南方
V1