pg集群搭建常用的两种方式及对比

本文介绍了PG常用的两种技术,Pgpool-II和Postgres-XL。Pgpool-II是中间件,可搭建在任意版本PG主从结构上,提供连接池等功能;Postgres-XL在PG源代码基础上开发,将工作分离到不同节点。还给出了pgpool集群搭建及两种搭建方式效率对比的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pg常用的两种技术:分别是Pgpool-II和Postgres-XL。

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对比

 

 

pgpool集群搭建:https://www.jianshu.com/p/41d857a5d743

pg集群的两种搭建方式及效率对比:https://segmentfault.com/a/1190000007012082?utm_source=tag-newest

 

 

 

### 如何搭建PostgreSQL一主两备集群 #### 准备工作 为了构建一个稳定可靠的PostgreSQL一主两备集群,需准备三台运行CentOS 7.3操作系统的服务器,在每台机器上安装相同版本的PostgreSQL数据库软件。对于本案例而言,所使用的PostgreSQL版本为11.6[^1]。 #### 配置主节点 在选定为主节点的服务器上执行必要的初始化设置之后,编辑`postgresql.conf`文件以启用逻辑复制选项并指定监听地址允许远程连接请求。另外还需调整wal_level参数至replica级别以及max_wal_senders参数确保有足够的并发量处理来自备用节点的数据同步需求。最后修改pg_hba.conf增加信任策略让从库可以无阻碍地接入主库进行数据同步[^2]。 ```bash # 修改 postgresql.conf 文件中的部分配置项 listen_addresses = '*' wal_level = replica max_wal_senders = 10 hot_standby = on ``` #### 设置备份节点 针对两个作为热备角色存在的次级节点来说,则要完成相似的操作流程——先停止正在运行的服务进程;接着利用pg_basebackup工具获取全量快照副本传输给目标主机;再依照官方文档指示更改recovery.signal为空白文本文件形式告知实例处于恢复模式下等待上游发送增量更新日志直至完全追平后再转为只读状态提供查询服务[^3]。 ```bash # 在从节点上创建基础备份 pg_basebackup -h 主节点IP -D /var/lib/pgsql/data -U repuser -P --write-recover-conf touch recovery.signal systemctl start postgresql-11 ``` #### 启动与验证 当上述准备工作完成后即可依次启动各个组件,并通过psql命令行客户端或其他管理界面查看当前集群的工作状况是否正常运作。如果一切顺利的话应该能看到一条清晰完整的链路关系图谱展示着各成员之间的交互情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值