具有共享磁盘的多个 Postgres 服务器(一个写入器,多个读取器)

Rad*_*Rad 5 postgresql cluster database-replication

这是场景:

  1. 一个分片(Gluster)
  2. 多个 Postgres 服务器

要求:

  1. 使用共享磁盘存储数据库文件
  2. 使用提供最大效率的配置

迄今为止的发现,

  1. 如本文档所述,可以使用共享磁盘来存储数据。但它也说“另一个问题是备用服务器不应该在主服务器运行时访问共享存储”。这意味着所有服务器(主服务器除外)都未使用,这对我们来说几乎是不可接受的。

  2. 由于我们使用的是共享磁盘,因此应该没有复制。在本文档中发现某些配置(原始和主/从模式)已经足够好了。但另一个问题是它们可能会导致上述问题。

问题:

  1. 网络上有很多文档让我对它们的要求和功能感到困惑。我的理解正确吗?
  2. 如果是这样,是否有可能实现这种设计(使用 pgpool 或任何其他工具)
  3. 如果是这样,请您命名工具和/或关键字,以便我可以找到更多信息。

注意(对于那些有兴趣尽可能多地结束问题的人)-它发生在我之前。有人说我正在寻找基于意见的答案。事实上我不是。我正在寻找的是技术名称或某种关键字,无论如何。这样我就可以通过使用它们来搜索更多信息。有时您需要知道一些关键字来搜索和查找信息。

提前致谢。

Cra*_*ger 7

从同一个数据目录运行多个 PostgreSQL 服务器是不可能的,即使只有一个是只读的。绝对 100% 不支持。做不到。现在放弃。

有人可能有一天会添加这样的功能,但它会涉及对 PostgreSQL 的重大更改,因为 Pg 严重依赖共享内存和信号进行进程间同步。此外,shared_buffers包含尚未写出的“脏”缓冲区;这些可以懒惰地写出,因为 PostgreSQL 知道所有后端都将从那里读取,并且只有在数据不在shared_buffers.

这是可能的实用性和小的变化到PostgreSQL这样做,如果所有的服务器都是只读的,但因为它是一个非常无趣的使用情况我没有调查过。

您所看到的对共享存储的引用用于故障转移,而不是并发操作。该手册非常具体,您需要确保有适当的防护措施,以防止多个数据库服务器同时访问存储,否则会导致严重损坏。

您将不得不依赖复制或使用另一个支持共享存储(并处理由此产生的性能影响)的数据库引擎。

不过,分开来说:DB 通常是 I/O 限制的。如果您现在拥有两台能够达到 1000 tps 的服务器,而不是一台能够达到 2000 tps 的服务器,那么共享存储不会给您带来任何好处。 ),更像是两台服务器,每台都能达到 200tps。