具有PostgreSQL复制的容错DBMail – 我在这里有什么select?

我目前正在计划为我的组织邮件设置一个更容错的设置。 我们目前有两台机器可用于不同的数据中心,我们打算使用这台机器,一个是物理主机,另一个是lxc“VM”。

计划是通过DNS将物理主机作为我们的主要邮件服务器(让我们称之为server1)和虚拟机(让我们称之为server2)为辅助,这样当server1发生故障时,server2可以接pipe,直到我们有另一个再次运行。

和lxc一样,由于许可问题,我不能使用DRBD甚至GlusterFS的花式东西,所以我的复制数据的select是相当有限的。

就像我个人喜欢dbmail一样,我曾经考虑过用Postgres来pipe理存储。 所以基本上我正在考虑使用自己的postgres在server1上运行的dbmail,以及另一个dbmail和server2上的另一个postgres。

问题是:有哪些选项可以让这两个postgres服务器保持同步,而不需要像drbd或分布式文件系统这样的花式东西,这样,当server1发生故障时,server2会继续在server1停止的地方继续运行。

数据库中的内置复制 (通过9.0或更高版本的stream式复制function或较早的日志传送方法)旨在解决这类问题。 无论如何,保持数据库的两个文件系统级快照是同步的。 获取复制工作,如果您的主服务器出现故障,您将不得不手动触发备用服务器,然后更改DNS地址以指向它。 与数据库交谈的客户端需要被踢,以便重新连接; TCP / IP超时有时会很长。 在所有这些方面获得完美的细节需要努力,但没有高可用性解决scheme是每一个简单的。 硬件可能会以很多奇怪的方式失败。

您可能会期望一些数据可能会在主服务器上发生崩溃时丢失,然后在复制之前崩溃。 在PostgreSQL 9.1中,似乎可以通过同步复制来消除这种可能性。 但那真的不会做你想要的; 除非至less有两台服务器正在运行,否则不会发生任何提交。

这一切都假定所有有趣的状态信息都在数据库中,每个dbmail都没有本地信息。 大概你知道这不是一个问题。

在容错系统的主服务器和辅助服务器上有不同的设置几乎总是一个坏主意。

我可以看到一个选项,你将运行PostgreSQL复制和标准的Linux集群软件(心跳等)来切换angular色。 你也必须pipe理IP地址,而不是把第二个放到你的邮件DNS中。