前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgres 分布式数据库

Postgres 分布式数据库

作者头像
用户1278550
发布2022-05-17 10:56:15
2K0
发布2022-05-17 10:56:15
举报
文章被收录于专栏:idba
分布式数据库

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

编译源代码

代码语言:javascript
复制
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 进入交互命令行 如下图所示

代码语言:javascript
复制
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 能力,支持列存,冷热数据存储等,具体可以参考官方文档或者鹅厂相关分享。

参考资料

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分布式数据库
  • 架构
  • 数据存储
  • 安装实践
    • 获取源代码
      • 编译
        • 配置文件
          • 部署
          • 小结
          • 参考资料
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档