同一数据库上的两个主实例

时间:2017-07-05 10:22:16

标签: postgresql high-availability failover

我想在Windows Server 2012 R2中使用Postgresql作为我们的项目,它可以24/7正常运行。

我想问一下社区是否可以在2个不同的服务器A& B中拥有2个主实例,他们将会工作'位于LAN中共享文件存储中的同一个DB上。总是服务器A上的一个主实例将在线,当它由于某种原因(我想)脱机时,PowerShell脚本将识别出postgresql服务已停止并将在服务器B中启动该服务。相同的脚本将连续检查只有一个服务器A&中的服务B正在努力避免冲突。

我想询问这是否可行,或者是我的配置更好的方法。 (我无法使用复制,因为当服务器A关闭时,服务器B处于只读模式,我不想要)

1 个答案:

答案 0 :(得分:3)

如果您设法在同一数据目录上启动两个PostgreSQL实例,则会发生严重的数据损坏

通常有一个postmaster.pid文件可以防止这种情况,但访问同一文件系统的另一台机器上的PostgreSQL服务器进程会在发出一些日志消息后很高兴地取消链接,认为它是从崩溃中遗忘的

所以你真的是用这样的解决方案在薄冰上行走。

您没有想到的另一个问题是应该检查服务器是否仍在运行的脚本。如果该脚本失败怎么办,因为例如两台服务器之间的网络连接已关闭,但服务器仍然正常运行?这种“裂脑”场景会导致您的设置数据损坏。

另一个警告:既然你似乎在使用Windows(Powershell?),那么当你谈论共享存储时,你可能会设想一个CIFS文件系统。 Windows“网络共享”不是一个可靠的文件系统 - 上次我检查时,它没有尊重_commit

创建可靠的故障转移群集比您想象的要难,我建议您在尝试自己创建解决方案之前检查现有的解决方案。