集群 PostgreSQL 集群

Clustering PostgreSQL clusters

由于 PostgreSQL 人员选择的术语不当,这会让一些人感到困惑,但请耐心等待...

我们需要能够支持多个 PostgreSQL (PG) 集群,并使用例如repmgr.例如,支持每个 PG 集群的服务器可用性和 PITR。每个服务器单个PG集群在很多情况下太昂贵了,所以我们多租户(小型)客户在单独的PG集群上,用于数据分离,恢复等,但也希望能够通过[=26=支持HA ].

PG 集群最接近的类比是 SQL 服务器实例 - 每个实例都可以托管多个数据库,有自己的端口等。像 SQL 服务器,你可以 运行同一台服务器上的多个实例(PG 集群),并为每个实例设置复制。

基本的 repmgr 设置没有问题——这在单 PG 集群模型中似乎相当清楚。但是,对于使用 repmgr 的多个 PG 集群,是否有任何 recommended/supported 方法?我可以想象假装 repmgr 认为每个 PG 集群实际上是一个单独的 repmgr 集群(具有单独的 repmgr.conf、连接 info/port)。但是,我还不确定这是否有效。

我通常希望对同一台服务器上的所有 PG 集群进行故障转移——而不是一次一个。

我知道这可能不是在所有情况下都是最好的主意,但我主要是在探索什么是可能的。我有一些替代方案,但这是最接近我们当前的单节点模型的。

澄清一下,我需要跨多个服务器集群支持成千上万的客户。理想情况下,每个集群都使用相同的 repmgr 数据库(例如,在主 PG 集群中),并且基本上独立于其他服务器集群。

谢谢...

回答我自己的问题,但我希望有人最终会发布更好的答案,否则我非常喜欢 repmgr。最后,对于多个 PG 集群(实例)来说,repmgr 似乎不是 suitable,因为 repmgr 集群连接字符串和 PG 集群(端口)之间存在隐含关系。因此,您基本上必须为每个集群 PG cluster/instance 创建一个单独的 repmgr 环境 (DB),从而失去 repmgr 为 table.

带来的许多操作简单性

我将使用 Corosync/Pacemaker/etc 研究更通用的解决方案,至少在这种情况下,虚拟集群 IP 处理是解决方案的内置功能,不需要额外的 software/resources 完成。

我确定我可能把事情简单化了,但是 repmgr 似乎非常接近解决大部分问题,如果它允许 repmgr DB 完全独立于 PG 集群并允许每个repmgr 集群指定它自己的连接信息,而不是(仅)repmgr 数据库本身的连接信息。