PG的两种集群技术:Pgpool-II与Postgres-XL

转自:https://segmentfault.com/a/1190000007012082

最近研究了PG的两种集群方案,分别是Pgpool-II和Postgres-XL,在这里总结一下二者的机制、结构、优劣、测试结果等。

1、 Pgpool-II和Postgres-XL简介
据我目前的了解,Pgpool-II和Postgres-XL是PG集群开源实现中比较成功的两个项目,互联网上相关的介绍也不少,但尚不确定二者在企业生产环境中是否被广泛使用。其中Pgpool-II的前身的Pgpool-I,Postgres-XL的前身是Postgres-XC。
1.1、Pgpool-II
Pgpool-II相当于中间件,位于应用程序和PG服务端之间,对应用程序来说,Pgpool-II就相当于PG服务端;对PG服务端来说,Pgpool-II相当于PG客户端。由此可见,Pgpool-II与PG是解耦合的,基于这样的机制,Pgpool-II可以搭建在已经存在的任意版本的PG主从结构上,主从结构的实现与Pgpool-II无关,可以通过slony等工具或者PG自身的流复制机制实现。除了主从结构的集群,Pgpool-II也支持多主结构,称为复制模式,该模式下PG节点之间是对等的,没有主从关系,写操作同时在所有节点上执行,这种模式下写操作的代价很大,性能上不及主从模式。PG 9.3之后支持的流复制机制可以方便的搭建主从结构的集群(包括同步复制与异步复制),因此Pgpool-II中比较常用的模式是流复制主从模式,其结构如下图(也可以一主多从)。

既然PG可以通过自身的流复制机制方便的搭建主从结构集群,为什么还要在它上面搭建Pgpool-II呢?因为简单的主从结构集群并不能提供连接池、负载均衡、自动故障切换等功能,Pgpool-II正好可以做到这些,当然负载均衡只针对读操作,写操作只发生在主节点上。为了避免单点故障,Pgpool-II自身也可以配置为主从结构,对外提供虚拟IP地址,当主节点故障后,从节点提升为新的主节点并接管虚拟IP。
1.2、Postgres-XL
Postgres-XL的机制和Pgpool-II大不相同,它不是独立于PG的,是在PG源代码的基础上增加新功能实现的。简单来说,Postgres-XL将PG的SQL解析层的工作和数据存取层的工作分离到不同的两种节点上,分别称为Coordinator节点和Datanode节点,而且每种节点可以配置多个,共同协调完成原本单个PG实例完成的工作。此外,为了保证分布模式下事务能够正确执行,增加了一个GTM节点。为了避免单点故障,可以为所有节点配置对应的slave节点。Postgres-XL结构图见下图,来自官网。

Postgres-XL的Coordinator节点是整个集群的数据访问入口,可以配置多个,然后在它们之上通过Nginx等工具实现负载均衡。Coordinator节点维护着数据的存储信息,但不存储数据本身。接收到一条SQL语句后,Coordinator解析SQL,制定执行计划,然后分发任务到相关的Datanode上,Datanode返回执行结果到Coordinator,Coordinator整合各个Datanode返回的结果,最后返回给客户端。
Postgres-XL的Datanode节点负责实际存取数据,数据在多个Datanode上的分布有两种方式:复制模式和分片模式,复制模式下,一个表的数据在指定的节点上存在多个副本;分片模式下,一个表的数据按照指定的规则分布在多个数据节点上,这些节点共同保存一份完整的数据。这两种模式的选择是在创建表的时候执行CREATE TABLE语句指定的,也可以通过ALTER TABLE语句改变数据的分布方式。

2、 Pgpool-II和Postgres-XL对比

3、 Pgpool-II和Postgres-XL的性能测试
我分别使用pgbench和benchmarksql测试了Pgpool-II集群和Postgres-XL集群的性能,为了对比,还测试单机PG的性能。
测试条件:Pgpool-II集群是搭建在两台虚机上的主从复制(异步)集群;Postgres-XL集群也是搭建在相同条件上的两台虚机的集群,其中包含两个Coordinator节点和两个Datanode节点。单机PG也是运行在相同条件的虚机上。操作系统是CentOS 6.6,单机PG和Pgpool-II集群种的PG版本号是9.5,Postgres-XL的版本号是Postgres-XL 9.5 R1.3,也只基于PG 9.5的。
3.1、pgbench测试
pgbench是PG自带的一款简单的PG性能测试工具,测试指标是TPS,表示每秒钟完成的事务数。测试过程如下:
1) 建库

psql -h 10.192.33.244 -p7777 -c "create database pgbench"
 
 

2) 生成数据


 
 
  1. pgbench -i -s 1000 -h 10.192 .33 .244 -p 7777 pgbench
  2. #参数 -s指定数据量,这里使用 1000,最终生成的数据量大小约 16 G

3) 测试


 
 
  1. pgbench -h 10.192 .33 .244 -p7777 -c30 -T300 -n
  2. #测试时间 5分钟,连续测试 3次。

pgbench测试结果:

pgbench的测试结果显示,Pgpool-II集群的性能比单机PG的性能差一些,约为84%;Postgres-XL集群的性能比单机PG的性能好一些,约为137%。
3.2、benchmarksql测试
benchmarksql的是一款常用的TPC-C测试工具,TPC-C测试衡量的是数据库的OLTP性能。测试过程如下:
1) 建库

psql -h 10.192.33.244 -p7777 -c "create database tpcc"
 
 

2) 生成数据


 
 
  1. ./runDatabaseBuild .sh props .pg
  2. #props .pg为配置文件,配置数据库链接信息以及测试数据量、测试时间等,
  3. #这里配置的数据量是 100 warehouse,最终生成的数据约 10 G,测试时间 1 小时。

3) 测试

./runBenchmark.sh props.pg
 
 

benchmarksql测试结果:

benchmarksql测试结果显示,两种集群与单机PG的性能指标几乎一致,无法分辨高下。出现这种结果的可能原因之一是:测试数据量较小,无法发挥集群的性能优势,尤其像Postgres-XL这个集群在设计上针对大数据处理做了一些优化,应该更加适合大数据处理的场景。鉴于benchmarksql测试生成数据十分耗时,这里就不再进行较大数据量的测试了。

最后,综合来看,我更倾向于Postgres-XL,如果公司今后打算用的话,我会推介。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值