分布式数据库

聊起分布式数据库,大家第一印象估计是 谷歌的 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 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 开源是一个值得肯定的事情,文档,社区支持等有一些列的支持动作,但是没有像某些开源分布式数据库做的那么活跃,社区,微信群,各种互联网公司试/使用,考试认证。TBase 群里只有一个人支持答疑,github的答疑也是 她一个人,挺辛苦的,Tbase的朋友要给她加鸡腿儿。

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

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

Postgres 分布式数据库相关推荐

  1. 李飞飞:云原生分布式数据库面临哪些机遇与挑战?

    简介:12月3日,由阿里云CIO学院主办的[2020中国企业数字创新峰会]在杭州举行.400位企业CEO.CTO.CIO齐聚一堂,共同探讨企业数字化转型经验.阿里巴巴集团副总裁.达摩院数据库首席科学家 ...

  2. 分布式数据库产品总结

    分布式数据库产品总结 Pivotal Greenplum Database(GPDB) 架构 查询计划并执行 查询优化 索引 blink tree 执行器 数据shuffle 分布式事务 2PC gp ...

  3. java执行查询postgresql得到中文乱码_Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(上篇)...

    关于作者 姚延栋,山东大学本科,中科院软件所研究生.PostgreSQL中文社区委员,致力于Greenplum/PostgreSQL开源数据库产品.社区和生态的发展. 一.数据库内核揭秘 Greenp ...

  4. 31号2场直播预告丨下一代分布式数据库设计思考、Greenplum 7新特性和进展

    1.下一代分布式数据库设计思考-03.31 自从 E.F.Codd 于 1970 年提出关系模型,到今天为止,关系数据库已经有 50 多年的发展历史.通过抽象出关系模型和事务模型,以及 SQL 语言, ...

  5. oracle 强制索引_当唯一索引遇见分布式数据库

    这是Tank的第18篇文章 1 关于分片键 分布式数据库通过将表的数据打散,按一定规则将数据分布在多个独立的主机上,常见的策略如HASH.RANGE.LIST等分布方式.不考虑中间件的解决方案,在原生 ...

  6. 五种知名的分布式数据库大PK

    在过去的十年间,分布式系统已遍布全球.它们跨区域地使用编排技术,实现了横跨多个云服务提供商及本地基础设施的混合云式部署,负载平衡,以及高可用性.在此基础上,数据库领域也在不断迭代与发展.近年来,业界大 ...

  7. 分布式数据库:如何正确选择分片键?

    过去十年见证了分布式数据库的崛起不仅通过本地集群来实现负载均衡,并提供高可用性,还具有数据中心内的机架感知等属性.专为云而设计的分布式数据库,可以跨越可用性区域,通过编排技术,支持公有云.私有云.混合 ...

  8. 优化隔离级别以扩展分布式数据库

    隔离被定义为数据库同时执行多个事务而不会对每个结果产生负面影响的能力.本文将解释这些级别并概述它们之间的权衡.我们还将建议选择最适合您需求的隔离级别. 让我们通过检查代表大多数应用程序的两个用例及其对 ...

  9. 【自建分布式数据库详细指南】(一)起步:聊聊LINUX及POSTGRESQL

    作为一名刚刚入职的码农,整日被各种各样的数据库整的头昏脑涨,偶然所得 了解到了POSTGRESQL这一款开源数据库神器,作为我们架设分布式数据库的工具. 下面简单聊聊POSTGRESQL. 网上是这么 ...

最新文章

  1. numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)
  2. pytorch gans
  3. c mysql 关闭连接池_数据库连接池关闭的时间
  4. Linux kernel 3.10内核源码分析--slab原理及相关代码
  5. boost--线程同步
  6. Linux下BitNami Redmine的插件安装与更新
  7. SSM简单参数传递与获取方法
  8. 题目 2194: 蓝桥杯2018年第九届真题-递增三元组
  9. jquery queue ajax,插件 jQuery ajaxQueue 中文API文档
  10. 彻底卸载win10 1903自带edge 浏览器
  11. android隐藏layout,LinearLayout的隐藏与显示
  12. 程序员,30岁+,看完让你不再焦虑
  13. android 10.0禁用电源键(屏蔽关机短按长按事件)
  14. 开源库UniTask笔记
  15. H.323 and Associated Protocols
  16. 7段均衡器最佳参数_7段均衡器怎么调能达到最佳效果?
  17. python实现clahe对比度增强
  18. Sql同一字段中相同数据的数量统计
  19. echarts java导出功能_echarts图表导出excel示例
  20. Halcon+C#显示一张图片

热门文章

  1. 笔记本外接显示器分辨率调节
  2. c语言10.0程序闪退,系统之家xp系统C语言程序闪退的解决方法
  3. 学术会议系统 php,2018年公共卫生与预防医学国际学术会议PHPM 2018
  4. 电子科大50周年校庆花絮(一)
  5. 照片怎么改大小300k?图片怎么压缩到指定大小?
  6. Nacos (史上最全)
  7. Texstudio、latex中——多行注释快捷键
  8. 【转】HDMI之TMDS信号
  9. 荣耀v20支持html,荣耀V20必备的4大操作设置,你都会吗?
  10. 网课之家(wangkezhijia.net)绝无二心为您服务。为了你的突破我们竭尽所能