带有共享磁盘的多个Postgres服务器(一个作者,多个阅读器)

这是一个场景:

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

要求:

  1. 使用共享磁盘来存储数据库文件
  2. 使用提供最高效率的configuration

目前发现,

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

  2. 由于我们使用的是共享磁盘,所以不应该有复制。 在这个文档中发现一些configuration(Raw和Master / Slave模式)已经足够了。 但另一个问题是他们可能会导致上述问题。

问题:

  1. 网上有很多文档让我对他们的要求和function感到困惑。 我的理解是正确的吗?
  2. 如果是这样,是否有任何可能实现这一devise(使用pgpool或其他工具)
  3. 如果是这样,你可以请名称的工具和或关键字,所以我可以find更多的信息。

请注意(对于那些有兴趣closures尽可能多的问题的人) – 它发生在我之前。 有人说我正在寻找基于意见的答案。 其实我不是。 我在看的是技术的名称或某种关键词,不pipe是什么。 所以通过使用它们我可以search更多的信息。 有时候,你需要知道一些关键词来search和查找信息。

提前致谢。

即使除了一个都是只读的,也不可能从同一个数据目录运行多个PostgreSQL服务器。 绝对100%不受支持。 无法完成。 现在放弃。

有人可能会有一天添加这样一个function,但它会涉及到PostgreSQL的重大变化,因为Pg严重依赖共享内存和信号进行进程间同步。 此外, shared_buffers包含尚未写出的“脏”缓冲区; 这些可以被写出来,因为PostgreSQL知道所有的后端将从那里读取,只有当数据不在shared_buffers才会进入磁盘。

如果所有的服务器都是只读的,那么对PostgreSQL做一些小的改动可行的,但是我还没有调查过,因为这是一个非常有趣的用例。

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

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

另外,DBs通常是I / O限制的。 如果现在有两台服务器的容量为1000tps,而不是一台可以容量为2000的服务器,那么共享存储并不会带来任何好处。或者,考虑到共享存储系统与低延迟总线同步的开销(例如Infiniband / Myrinet ),更像两台服务器,每台服务器的能力为200TPS。