复制、集群和连接池

来自 PostgreSQL wiki
跳转到导航跳转到搜索

介绍

有多种方法可以将 PostgreSQL 的运行范围扩展到单个服务器之外。有关术语和基本技术的概述,请参见 高可用性和负载平衡。有一个 演示文稿 涵盖了其中一些解决方案。

没有一种复制软件能适合所有情况。您需要了解您的需求,以及各种方法如何融入其中。例如,以下是复制问题空间的两个极端情况:

  • 您有几台连接到本地网络的服务器,您希望始终保持最新状态,以便进行故障转移和负载平衡。在这种情况下,您需要考虑同步、急切且因此无冲突的解决方案。
  • 您的用户在离开办公室时会将数据库的本地副本带到笔记本电脑上,在外出时进行更改,并在返回时需要将这些更改与主数据库合并。在这种情况下,您需要异步、延迟的复制方法,并且将被迫考虑如何处理在主服务器和本地副本上修改同一记录时发生的冲突。

这些都是数据库复制问题,但解决它们的最佳方法却大不相同。正如您从这些示例中看到的那样,复制有很多特定的术语,您需要理解这些术语才能弄清楚哪种类型的解决方案适合您的需求。 Postgres-R 数据库复制术语和定义 是一个很好的背景来源。它没有提到的主要理论主题是如何在笔记本电脑情况等延迟复制的情况下解决冲突,这涉及投票等方案。

PostgreSQL 核心功能

  • 热备用/流式复制 从 PostgreSQL 9.0 开始可用,并提供对一个或多个备用节点的异步二进制复制。备用节点也可以成为热备用节点,这意味着它们可以作为只读数据库进行查询。这是最快的复制类型,因为 WAL 数据立即发送,而不是等待生成和发送整个段。
  • 温备用/日志传送是一种 HA 解决方案,它将数据库集群“复制”到归档或温备用(可以快速启动,但不能进行查询)服务器。开销非常低,而且易于设置。如果您只关心持续备份和较短的故障转移时间,这是一个简单而合适的解决方案。

从历史上看,PostgreSQL 核心团队认为复制和集群技术超出了主项目重点的范围,但这在 2008 年发生了改变,参见 核心团队声明。复制现在是 PostgreSQL 持续开发的重点领域。

比较矩阵

此页面正在 集群 中进行大修。

程序 许可证 成熟度 复制方法 同步 连接池 负载平衡 查询分区
PgCluster BSD 尚未投入生产 主-主 同步
pgpool-I BSD 稳定 基于语句的中介软件 同步
Pgpool-II BSD 最新版本 基于语句的中介软件 同步
slony BSD 稳定 主-从 异步
Bucardo BSD 稳定 主-主、主-从 异步
Londiste BSD 稳定 主-从 异步
Mammoth BSD 不再维护 主-从 异步
rubyrep MIT 不再维护 主-主、主-从 异步
双向复制 PostgreSQL (BSD) 最新版本 主-主
(不需要触发器)
异步
pg_shard LGPL 最新版本 基于语句的中介软件(作为扩展) 同步
pglogical PostgreSQL 最新版本 主-从 异步
Postgres-XL PostgreSQL 最新版本 MPP Postgres,可扩展的写入和读取 同步
Citus AGPL 最新版本 MPP Postgres,可扩展的写入和读取 异步或同步

复制

除了上面提到的核心流式复制之外…


  • Replicator Pro 允许表数据比较和同步 - 即使使用异构数据库。它之所以独特,是因为它即使在源数据库是非关系型(CSV、DBF、Excel 文档、Paradox…)的情况下也能复制更改。Replicator 具有内置的调度程序,可以轻松进行定期更改复制。
  • Slony-I:看起来不错,仅限单个主节点,主节点是单点故障,没有好的故障转移系统来选举新的主节点或让失效的主节点重新加入集群。从属数据库主要是为了安全或为了提高查询性能而并行化。受 O(N^2) 通信(N = 集群大小)的影响。通过合理的系统管理员,您可以自己实现故障转移系统。关于通信,您可以级联复制以减少主节点的负载。如果您要实现大型复制集群,这可能是一个好主意。Slony 非常强大,基于触发器,并且高度可配置。
  • PGCluster:PGCluster(顺便说一下,它与 PGCluster-II(一种共享磁盘解决方案)不同),它进行同步的多主复制。有两个单点故障点,负载均衡器和数据复制器。该项目作为开源项目开发(旧版本可以在 PgFoundry 档案 中获得),然后由 Cybertec.at 公司商业化。
  • http://www.pgpool.net/ pgpool 1/2 是一种合理的解决方案。它是语句级复制,它有一些缺点,但对于某些事情来说效果很好。pgpool 2 具有一个有趣的分布式表机制。如果您有极高的读写比率,但需要处理大量的交易量,您可能需要看看这里。通过实现一个将所有更新复制到所有副本的代理来支持负载平衡和复制。它可以通过执行此操作来对数据进行分区,并且可以半智能地将查询路由到相应的服务器。
  • "Bucardo" - BSD 许可证 - http://bucardo.org/ - 基于触发器、异步、多主或主从,使用 plperl 编写。
  • 奥地利公司 Cybertec 提供 PGCluster 的专有打包。他们将其简称为 PostgreSQL 多主复制,参见 http://www.cybertec.at
  • pglogical - pglogical 是一个完全作为 PostgreSQL 扩展实现的逻辑复制系统。完全集成,不需要触发器或外部程序。这种物理复制的替代方法是一种高效的数据复制方法,使用发布/订阅模型进行选择性复制。
  • Postgres-R 仍在开发中。它具有急切且因此无冲突,但异步的多主复制。
  • SymmetricDS 是一款开源、支持 Web 的、与数据库无关的数据同步软件应用程序。它使用 Web 和数据库技术来实时复制关系数据库之间的表。该软件旨在扩展到大量数据库、跨低带宽连接工作,并能够承受网络中断。支持多个关系数据库,包括 PostgreSQL。根据 Lesser GPL (LGPL) 许可。
  • DRBD (http://www.drbd.org/),一个将磁盘块复制到其他节点的设备驱动程序。这仅适用于故障转移,不适用于扩展读取。如果与 NFS 导出结合使用,则可以轻松迁移设备。
  • "RubyRep" - MIT 许可证 - http://www.rubyrep.org/ - 基于 Ruby、异步、多主复制系统,支持 Postgres 和 MySQL。
  • Citus Data 开发了 pg_shard 扩展,它可以将 PostgreSQL 表透明地分片到多个服务器并复制分片,以及 Citus,它可以将查询并行化到多个服务器和内核,以进行实时分析,并支持批量加载、分布式联接、列式存储等。
  • EDB 复制服务器:提供单主和多主解决方案,用于读写扩展性、可用性、性能和与 Oracle、SQL Server 和 Postgres 的数据集成。EDB 复制服务器使用 Postgres 的快速逻辑解码技术来支持大型多主集群和单主配置,以满足各种数据中心解决方案。


不活跃项目

  • Slony-II
  • PGReplication

集群

  • Citus - 在可扩展的高可用性商品 PostgreSQL 服务器集群中对表进行分片和复制,并并行化查询以实现大数据的实时 SQL。
  • Greenplum 数据库 - 不太像复制解决方案,更像是并行化查询的一种方法,针对数据仓库和大型数据人群。Greenplum 与 PostgreSQL 紧密集成。
  • HadoopDB - 在一组 Postgres 后端服务器之前放置的 MapReduce 层。无共享集群。
  • PL/Proxy - 作为 PL 语言实现的数据库分区系统。
  • Postgres Pro 多主 - 是 Postgres Pro 企业级 DBMS 的一部分。提供具有事务完整性和无读取开销的故障安全无共享集群。基于增强的逻辑复制。
  • sequoia (jdbc,以前称为 c-jdbc)
  • Postgres-XL 是一种无共享的多主集群解决方案,它可以透明地在节点集上分布表并并行执行这些节点上的查询。它有一个名为全局事务管理器 (GTM) 的附加组件,用于提供集群的全局一致视图。该项目基于最新的 PostgreSQL 9.5 版本。一些公司,如2ndQuadrant,为该产品提供商业支持。

连接池和加速

连接池程序可以减少与数据库相关的开销,因为正是大量的物理连接拖累了性能。这在 Windows 上尤为重要,因为系统限制会阻止大量连接;请参阅在原生 Windows 上运行和安装 PostgreSQL中的“我一次只能运行大约 125 个连接”。对于连接数量可能非常大的 Web 应用程序,这一点也很重要。

一些实现连接池的程序是

  • PgBouncer
  • pgpool
  • Heimdall Data - (专有)提供用于数据库缓存、连接池、负载均衡、查询路由、分析和安全的多供应商解决方案。提供用于简单配置的 GUI,以及用于大规模处理查询的分布式引擎。还支持在不重启应用程序的情况下,在整个集群范围内进行运行时重新配置。无需任何代码更改即可实现。

有些人还会或另外使用memcached 以各种方式减少数据库直接处理的工作量,方法是缓存流行的数据。 pgmemcache 是一个 PostgreSQL 扩展,用于与 memcached 服务器进行交互。

集群管理

  • pglookout - PostgreSQL 复制监控和故障转移守护进程
  • repmgr - PostgreSQL 集群的复制管理器
  • pg_keeper - 基于后台工作进程的简单故障转移守护进程。

其他资源

找到但尚未集成到此处的更多信息来源。

文章


视频教程

版权

此页面上初始信息的来源包括