Pgpool-II

来自 PostgreSQL 维基
跳转到导航跳转到搜索

项目概述

pgpool-II 是一个在 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间工作的中间件。它提供以下功能。

  • 连接池:pgpool-II 保存到 PostgreSQL 服务器的连接,并在每次有相同属性(例如用户名、数据库、协议版本)的新连接进来时重用这些连接。它减少了连接开销,并提高了系统的整体吞吐量。
  • 复制:pgpool-II 可以管理多个 PostgreSQL 服务器。使用复制功能可以创建 2 个或多个物理磁盘上的实时备份,以便在磁盘故障的情况下,服务可以不停止服务器而继续运行。
  • 负载均衡:如果数据库被复制,在任何服务器上执行 SELECT 查询都会返回相同的结果。pgpool-II 利用复制功能,通过将 SELECT 查询分配到多个服务器来减少每个 PostgreSQL 服务器的负载,从而提高系统的整体吞吐量。在最佳情况下,性能会随着 PostgreSQL 服务器数量的增加而呈比例提高。在有很多用户同时执行大量查询的情况下,负载均衡的效果最佳。
  • 限制超过连接数:PostgreSQL 对并发连接数有上限,超过这个上限的连接会被拒绝。但是,设置最大连接数会增加资源消耗并影响系统性能。pgpool-II 也有一个连接数上限,但额外的连接会被排队,而不是立即返回错误。
  • 并行查询:使用并行查询功能,数据可以在多个服务器之间划分,以便查询可以同时在所有服务器上执行,从而缩短总体执行时间。并行查询在搜索大型数据时效果最佳。

项目状态

处于生产状态。有许多商业系统使用 pgpool-II。

项目联系

一般信息

  • 可扩展性:是(最多 128 个数据库节点)
  • 读扩展:是
  • 写扩展:否(可以有最多 128 个数据库节点,但性能只有普通 PostgreSQL 的 60%-70%)
  • 同步复制:是
  • 触发器/过程:是
  • 并行查询:是
  • 故障转移/高可用性:是
  • 在线配置:是
  • PostgreSQL 升级:否
  • 分离节点/广域网:否
  • 需要 PostgreSQL 核心修改:否
  • 编程语言:C

集群模型

Pgpool-II 是一个基于查询的复制系统。

用例

  • 有三种模式:复制(R)、主/从(M)和并行查询(P)
  • 每种模式下都有以下功能可用
    • 连接池 (R,M,P)
    • 自动故障转移 (R,M)
    • 在线恢复 (R, M 在与流复制一起使用时)
  • 主/从模式可以与 Slony-I 和流复制一起使用
  • 提供专用 GUI 工具(pgpoolAdmin)

缺点

  • 无法正确处理 SELECT 中带有副作用的函数
    • nextval() 可以正确处理
    • pgpool-II 3.0 通过识别 SELECT 中的此类函数来消除此缺点
  • 在插入具有 SERIAL 数据类型的表时需要表级锁
    • pgpool-II 3.0 自动发出行级锁而不是表级锁

未来计划

  • 允许以更可靠的方式复制 SERIAL/序列

项目赞助商

其他