暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL 基础入门(1)

原创 blank2019 2023-06-19
652

架构介绍


(一)分布式集群架构


首先介绍一下基本架构。

image.png


上图左边是PGXC的典型的架构图,PGXC是PG的一个分布式的版本,也是PG最重要的分布式版本之一,目前在国内的大型公司(如阿里、腾讯等)都是用类似的架构来做分布式。


它包含几个角色,分别是CN、DN和GTM。


CN接受用户的业务请求,包含了全局的Catalog,所以它可以根据业务请求到各个DN上去获取数据,把数据获取回来以后,它会把这个数据再返回给客户。我们虽然不是完全基于PGXC来开发我们的PolarDB分布式,但是我们会用到PGXC的很多组件和一些思想,所以可以看到上图的右边,我们的系统里面也包含了CN、DN、事物相关的、GTM相关的一些组件。


在这种情况下,整个集群的管理方面,我们采用了pgxc_ctl的组件来进行集群的管理,从运维和管理这个角度来看,我们就不需要自己来开发了。


另外,我们用pg_cron的组件来做集群的心跳的管理,所以它会定期调用pgxc_ctl进行主备切换,故障检测等类似的动作,至于底层的这种DN节点或者CN节点的控制,使用的是PG原生的initdb和pg_ctl相关的组件。为了便于用户使用,最外边我们开发了onekey这样的脚本。针对docker环境我们开发了一些脚本,便于用户更好地调用pgxc_ctl对整个集群进行控制。


虽然现在CN和DN都是存在的,但是可能后期我们会做CN、DN的合一,另外就是GTM和CN可能也会合一,因为我们的GTM使用的是逻辑时钟,它不需要像PGXC这种snapshot的方式传很多的数据,所以可能放到CN上会更合适。另外这一次我们主要是开源了DN组件,CN和GTM的很多功能是没有开源的,但是代码里面可能会少量的涉及到这部分的内容。以上就是它的一个基本架构。


(二)高可用架构(流复制、Paxos三副本、Active-Active逻辑复制)

下面讲一下高可用架构。


image.png


可以看到图中左边和右边的两个分别是三套集群,这三套集群可能部署在不同的区域。左边这套集群是有了我们的

CN、DN,首先它的CN和DN是支持主备的,而它主备的方式包含好几种,第一种就是PG原生的流复制的方式进行配置主

备。另外,我们扩展了一个Paxos三副本方式的主备,除了这个之外,尤其是不同区域的DN之间,我们可以配置双向逻

辑复制这样的主备关系。


双向逻辑复制的特点是可以在任意的节点上写请求,并把这个企业请求同步到它的复制组上的任何一个节点。当然,现在

不完善的地方可能还是在冲突情况下的检测方面,这方面可能需要客户自己来控制。另外,逻辑复制有一个更大更好的特

点是可以很容易地过滤日志,这样在跨数据中心场景下,其实不需要所有的日志都同步到其它的数据中心,比方说有些比

较不重要的,或者是一些类似于vacuum这样不是很重要的操作,其实可以不用同步其他数据中心。在这种情况下,它的

数据量会减少,所以在做跨数据中心的场景下,这种部署其实是很有意义的,现在已经开源的就是流复制和Paxos三副本

的这部分。


总结一下,现在主要DN角色里边的流复制和三副本已经开源出来了,后面会开源整个分布式集群的CN和GTM其他相关

的分布式能力。另外,高可用或其他的一些功能会陆续开源,目前CN和DN都是支持高可用的。


编译、部署


(一)代码下载、编译


1、官网地址

https://github.com/alibaba/PolarDB-for-PostgreSQL

2、代码下载

$git clone https://github.com/alibaba/PolarDB-for-PostgreSQL.git

3、源码编译

编译Release版本:

$./build.sh

编译Debug版本:

$./build.sh debug

1、官网地址

https://github.com/alibaba/PolarDB-for-PostgreSQL

4build.sh 原理

首先,大家如果要使用我们的PolarDB,可以到开源网站上看一下。


image.png


这个就是我们的PolarDB开源网站,在里边可以看到,首先是有Code的界面,点Code里边的绿色图标就可以把我们的代

码的路径给下载下来,就可以通过gitclone的方法把代码拷贝到自己的服务器上,对它进行编译和修改。


另外可以看到,界面上包含Issues和其他的部分,上面是‘star’,希望大家也都帮我们去网站打星,收藏我们的地址,以

后就可以更容易地找到我们的网站。

下面用gitclone命令加上刚才拷贝的代码路径,就可以下载这个程序了。


image.png


刚才用gitclone已经下载的code,可以看到code目录的布局是这样的。为了方便大家进行编译,这里只要调用build.sh就

可以进行源码的编译,一键式的编译让大家可以更容易地编译。


现在我们演示一下编译脚本做了什么事情。


image.png


首先可以看到它包含了Deploy、verify、debug相关的一些参数,这里面比较重要的就是它的安装路径,按照这种编译之

后,它会把我们的程序放到当前的路径下,之后这里面可以选择在build.sh后面增加Deploy、verify、debug参数,默认

是Deploy这种方式,它其实就是编译的一个Release的版本,如果大家想编译debug版本就在build后面加一个debug就

可以了。


编译的过程其实都是大家熟悉的,调用就是一个config的过程,另外就是make和cmake的过程就是进行相关的编译,另

外会有其它组件的一些编译。


编译完成后,我们切到目录下来看一看它的数据有没有更新,到这一步可以看到现在这边[enjoy coding]了。


image.png


这种情况下说明已经编译成功了。

可以看到它整个的二进制已经更新了,并且放到了我们指定的编译目录下。


image.png


《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL 基础入门(2) https://developer.aliyun.com/article/1232840?groupCode=polardbforpg

架构介绍


(一)分布式集群架构


首先介绍一下基本架构。

image.png


上图左边是PGXC的典型的架构图,PGXC是PG的一个分布式的版本,也是PG最重要的分布式版本之一,目前在国内的大型公司(如阿里、腾讯等)都是用类似的架构来做分布式。


它包含几个角色,分别是CN、DN和GTM。


CN接受用户的业务请求,包含了全局的Catalog,所以它可以根据业务请求到各个DN上去获取数据,把数据获取回来以后,它会把这个数据再返回给客户。我们虽然不是完全基于PGXC来开发我们的PolarDB分布式,但是我们会用到PGXC的很多组件和一些思想,所以可以看到上图的右边,我们的系统里面也包含了CN、DN、事物相关的、GTM相关的一些组件。


在这种情况下,整个集群的管理方面,我们采用了pgxc_ctl的组件来进行集群的管理,从运维和管理这个角度来看,我们就不需要自己来开发了。


另外,我们用pg_cron的组件来做集群的心跳的管理,所以它会定期调用pgxc_ctl进行主备切换,故障检测等类似的动作,至于底层的这种DN节点或者CN节点的控制,使用的是PG原生的initdb和pg_ctl相关的组件。为了便于用户使用,最外边我们开发了onekey这样的脚本。针对docker环境我们开发了一些脚本,便于用户更好地调用pgxc_ctl对整个集群进行控制。


虽然现在CN和DN都是存在的,但是可能后期我们会做CN、DN的合一,另外就是GTM和CN可能也会合一,因为我们的GTM使用的是逻辑时钟,它不需要像PGXC这种snapshot的方式传很多的数据,所以可能放到CN上会更合适。另外这一次我们主要是开源了DN组件,CN和GTM的很多功能是没有开源的,但是代码里面可能会少量的涉及到这部分的内容。以上就是它的一个基本架构。


(二)高可用架构(流复制、Paxos三副本、Active-Active逻辑复制)

下面讲一下高可用架构。


image.png


可以看到图中左边和右边的两个分别是三套集群,这三套集群可能部署在不同的区域。左边这套集群是有了我们的

CN、DN,首先它的CN和DN是支持主备的,而它主备的方式包含好几种,第一种就是PG原生的流复制的方式进行配置主

备。另外,我们扩展了一个Paxos三副本方式的主备,除了这个之外,尤其是不同区域的DN之间,我们可以配置双向逻

辑复制这样的主备关系。


双向逻辑复制的特点是可以在任意的节点上写请求,并把这个企业请求同步到它的复制组上的任何一个节点。当然,现在

不完善的地方可能还是在冲突情况下的检测方面,这方面可能需要客户自己来控制。另外,逻辑复制有一个更大更好的特

点是可以很容易地过滤日志,这样在跨数据中心场景下,其实不需要所有的日志都同步到其它的数据中心,比方说有些比

较不重要的,或者是一些类似于vacuum这样不是很重要的操作,其实可以不用同步其他数据中心。在这种情况下,它的

数据量会减少,所以在做跨数据中心的场景下,这种部署其实是很有意义的,现在已经开源的就是流复制和Paxos三副本

的这部分。


总结一下,现在主要DN角色里边的流复制和三副本已经开源出来了,后面会开源整个分布式集群的CN和GTM其他相关

的分布式能力。另外,高可用或其他的一些功能会陆续开源,目前CN和DN都是支持高可用的。


编译、部署


(一)代码下载、编译


1、官网地址

https://github.com/alibaba/PolarDB-for-PostgreSQL

2、代码下载

$git clone https://github.com/alibaba/PolarDB-for-PostgreSQL.git

3、源码编译

编译Release版本:

$./build.sh

编译Debug版本:

$./build.sh debug

1、官网地址

https://github.com/alibaba/PolarDB-for-PostgreSQL

4build.sh 原理

首先,大家如果要使用我们的PolarDB,可以到开源网站上看一下。


image.png


这个就是我们的PolarDB开源网站,在里边可以看到,首先是有Code的界面,点Code里边的绿色图标就可以把我们的代

码的路径给下载下来,就可以通过gitclone的方法把代码拷贝到自己的服务器上,对它进行编译和修改。


另外可以看到,界面上包含Issues和其他的部分,上面是‘star’,希望大家也都帮我们去网站打星,收藏我们的地址,以

后就可以更容易地找到我们的网站。

下面用gitclone命令加上刚才拷贝的代码路径,就可以下载这个程序了。


image.png


刚才用gitclone已经下载的code,可以看到code目录的布局是这样的。为了方便大家进行编译,这里只要调用build.sh就

可以进行源码的编译,一键式的编译让大家可以更容易地编译。


现在我们演示一下编译脚本做了什么事情。


image.png


首先可以看到它包含了Deploy、verify、debug相关的一些参数,这里面比较重要的就是它的安装路径,按照这种编译之

后,它会把我们的程序放到当前的路径下,之后这里面可以选择在build.sh后面增加Deploy、verify、debug参数,默认

是Deploy这种方式,它其实就是编译的一个Release的版本,如果大家想编译debug版本就在build后面加一个debug就

可以了。


编译的过程其实都是大家熟悉的,调用就是一个config的过程,另外就是make和cmake的过程就是进行相关的编译,另

外会有其它组件的一些编译。


编译完成后,我们切到目录下来看一看它的数据有没有更新,到这一步可以看到现在这边[enjoy coding]了。


image.png


这种情况下说明已经编译成功了。

可以看到它整个的二进制已经更新了,并且放到了我们指定的编译目录下。


image.png


《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL 基础入门(2) https://developer.aliyun.com/article/1232840?groupCode=polardbforpg

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论