摘要:最近研究了的两种集群方案,分别是和,在这里总结一下二者的机制结构优劣测试结果等。其中的前身的,的前身是。为了避免单点故障,可以为所有节点配置对应的节点。测试测试结果测试结果显示,两种集群与单机的性能指标几乎一致,无法分辨高下。
最近研究了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,如果公司今后打算用的话,我会推介。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38951.html
摘要:所有节点中分为三种角色全局事务管理器协调器和数据节点。一旦故障,整个集群立刻无法访问,此时可以切换到节点上。 第一节 简介Postgres-XL是一款开源的PG集群软件,XL代表eXtensible Lattice,即可扩展的PG格子之意,以下简称PGXL。官方称其既适合写操作压力较大的OLTP应用,又适合读操作为主的大数据应用。它的前身是Postgres-XC(简称PGXC),...
摘要:接上篇初识写一下简称的部署与测试。如果执行报错则根据提示安装相应的库即可,如等。默认的安装目录是,和原生相同,很顺手。 接上篇《初识Postgres-XL》https://segmentfault.com/a/11...写一下Postgres-XL(简称PGXL)的部署与测试。 第一节 安装安装很简单,源码安装,和PG的安装基本相同,可能比PG多一个依赖库。在所有节点上执行相同操作。 ...
摘要:这可以通过负载平衡来实现数据分片当问题不是并发查询的数量,而是数据库的大小和单个查询的速度时,可以实现不同的方法。 showImg(https://segmentfault.com/img/remote/1460000018875091); 来源 | 愿码(ChainDesk.CN)内容编辑 愿码Slogan | 连接每个程序员的故事 网站 | http://chaindesk.cn...
摘要:这可以通过负载平衡来实现数据分片当问题不是并发查询的数量,而是数据库的大小和单个查询的速度时,可以实现不同的方法。 showImg(https://segmentfault.com/img/remote/1460000018875091); 来源 | 愿码(ChainDesk.CN)内容编辑 愿码Slogan | 连接每个程序员的故事 网站 | http://chaindesk.cn...
阅读 1957·2021-10-09 09:41
阅读 1584·2021-09-28 09:36
阅读 1071·2021-09-26 09:55
阅读 1266·2021-09-10 11:17
阅读 1112·2021-09-02 09:56
阅读 2737·2019-08-30 12:58
阅读 2879·2019-08-29 13:03
阅读 1796·2019-08-26 13:40