最近研究了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) 生成数据

pgbench -i -s 1000 -h 10.192.33.244 -p 7777 pgbench
#参数-s指定数据量,这里使用1000,最终生成的数据量大小约16G。

3) 测试

pgbench -h 10.192.33.244 -p7777  -c30 -T300 -n
#测试时间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) 生成数据

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

3) 测试

./runBenchmark.sh props.pg

benchmarksql测试结果:


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

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

PG的两种集群技术:Pgpool-II与Postgres-XL相关推荐

  1. 服务器集群技术(备份服务器方案和均摊工作方案)(用来解决服务器挂掉问题)...

    服务器集群技术(备份服务器方案和均摊工作方案)(用来解决服务器挂掉问题) 一.总结 1.在一个集群里面,比如老大因为莫名其妙的原因挂掉了,集群监测到老大挂掉了直接给他断掉电源(等待维修),然后让老二上 ...

  2. Redis分布式缓存集群技术

    Redis分布式缓存集群技术(也支持持久化),是关系型数据库的互补产品 特点:追求高性能\高并发,对数据一致性要求比数据库要差一些. # 1. Redis在集群架构中的角色及工作流程     1)内存 ...

  3. 高可用集群技术之heartbeat应用详解(一)

    一.高可用集群基本概念   什么是高可用技术呢?在生产环境中我既要保证服务不间断的服务又要保证服务器稳定不down机,但是异常还是会发生,比如说:服务器硬件损坏...导致服务器down机,我该如何保证 ...

  4. 数据库集群技术 -摘自网络

    简介 当今世界是一个信息化的世界,我们的生活中无论是生活.工作.学习都离不开信息系统的支撑.而信息系统的背后用于保存和处理最终结果的地方就是数据库.因此数据库系统就变得尤为重要,这意味着如果数据库如果 ...

  5. Redis集群技术及Codis实践

    前言 诚如开篇文章所言,高效运维包括管理的专业化和技术的专业化.前两篇我们主要在说些管理相关的内容,本篇说一下技术专业化.希望读者朋友们能适应这个转换,谢谢. 互联网早在几年前就已进入Web 2.0时 ...

  6. Redis三种集群模式介绍

    三种集群模式 redis有三种集群模式,其中主从是最常见的模式. Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的.哨兵顾名思义,就是用来监控的,主要作用就是 ...

  7. 高可用集群技术之corosync应用详解(一)

    Corosync概述: Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等.它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义 ...

  8. Oracle 19c: RAC 集群技术的坚持与放弃(含PPT下载)

    在 OOW 上发布出来关于 Oracle RAC 集群的几篇文章,可以让我们一睹 Oracle RAC集群技术的发展路线. (关注本公众号,回复 2018OOW 在 RAC 目录下是本文参考的3个PP ...

  9. k8s极简史:K8s多集群技术发展的历史、现状与未来

    引子 随着云原生技术的普及,越来越多的企业使用Kubernetes来管理应用,并且集群规模也呈爆发式增长,企业也亟需应对随集群规模增长而带来的各种挑战.同时,为了更好地提供高可用.弹性伸缩的应用,企业 ...

最新文章

  1. SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
  2. Arcgis desktop 9.3的破解方法_经验版
  3. Nginx深入详解之过滤模块
  4. 数据库同样数据,本地和服务器查询效率相差百倍
  5. 陷阱:C++模块之间的”直接依赖“和”间接依赖“与Makefile的撰写
  6. 每日一题(53)—— 评价代码片段
  7. 22 为特性 采购申请凭证类型 解决第一个矛盾
  8. 【转】ASP.NET MVC 3 Service Location, Part 5: IDependencyResolver
  9. g30u盘启动 中科曙光1620_I840-G30
  10. CABAC熵编码代码实现(H264)-FFMPEG
  11. 微信公众号-自定义菜单的创建
  12. 安装双系统后无法进入第二系统
  13. python visio_再见,Visio! - Python绿色通道的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. Vegas渲染的时候选什么格式?
  15. 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)
  16. 从源码角度浅谈IRP
  17. Android:安卓实现高考倒计时功能
  18. Linux系统中errno对应的中文意思 errno.h
  19. Socket套接字通信 TCP UDP详解(网络通信)
  20. 《嫌疑人X的献身》-东野圭吾

热门文章

  1. skywalking02 - skywalking安装
  2. 日积月累Day7(为什么家庭会生病)
  3. 谷歌双标?拒绝给员工涨薪后,转头将高管工资提高到100万美元
  4. 中国首个海外高铁项目:印尼雅万高铁终点站封顶
  5. 路由器与交换机有什么区别
  6. linggo:非线性规划
  7. 微搭低代码零基础入门课(第四课)
  8. 常用硬盘数据恢复软件的功能解析
  9. 【C#】简易计算器的实现
  10. 人生哲理名言100句