架构介绍
(一)分布式集群架构
首先介绍一下基本架构。
上图左边是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逻辑复制)
下面讲一下高可用架构。
可以看到图中左边和右边的两个分别是三套集群,这三套集群可能部署在不同的区域。左边这套集群是有了我们的
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
4、build.sh 原理
首先,大家如果要使用我们的PolarDB,可以到开源网站上看一下。
这个就是我们的PolarDB开源网站,在里边可以看到,首先是有Code的界面,点Code里边的绿色图标就可以把我们的代
码的路径给下载下来,就可以通过gitclone的方法把代码拷贝到自己的服务器上,对它进行编译和修改。
另外可以看到,界面上包含Issues和其他的部分,上面是‘star’,希望大家也都帮我们去网站打星,收藏我们的地址,以
后就可以更容易地找到我们的网站。
下面用gitclone命令加上刚才拷贝的代码路径,就可以下载这个程序了。
刚才用gitclone已经下载的code,可以看到code目录的布局是这样的。为了方便大家进行编译,这里只要调用build.sh就
可以进行源码的编译,一键式的编译让大家可以更容易地编译。
现在我们演示一下编译脚本做了什么事情。
首先可以看到它包含了Deploy、verify、debug相关的一些参数,这里面比较重要的就是它的安装路径,按照这种编译之
后,它会把我们的程序放到当前的路径下,之后这里面可以选择在build.sh后面增加Deploy、verify、debug参数,默认
是Deploy这种方式,它其实就是编译的一个Release的版本,如果大家想编译debug版本就在build后面加一个debug就
可以了。
编译的过程其实都是大家熟悉的,调用就是一个config的过程,另外就是make和cmake的过程就是进行相关的编译,另
外会有其它组件的一些编译。
编译完成后,我们切到目录下来看一看它的数据有没有更新,到这一步可以看到现在这边[enjoy coding]了。
这种情况下说明已经编译成功了。
可以看到它整个的二进制已经更新了,并且放到了我们指定的编译目录下。
《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL 基础入门(2) https://developer.aliyun.com/article/1232840?groupCode=polardbforpg