【问题标题】:Two master instances on same database同一数据库上的两个主实例
【发布时间】:2017-12-08 23:07:16
【问题描述】:

我想将 Windows Server 2012 R2 中的 Postgresql 用于我们的一个项目,它可以 24/7 正常运行。

我想问社区我是否可以在 2 个不同的服务器 A&B 中拥有 2 个主实例,它们将在位于局域网共享文件存储中的同一个数据库上“工作”。服务器 A 上的一个主实例始终在线,当它由于某种原因(我想)离线时,powershell 脚本将识别出 postgresql 服务已停止,并将在服务器 B 中启动该服务。同一脚本将持续检查是否只有一个服务器 A 和 B 中的服务正在努力避免冲突。

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

【问题讨论】:

    标签: postgresql high-availability failover


    【解决方案1】:

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

    通常有一个postmaster.pid 文件可以防止这种情况发生,但是访问同一文件系统的不同机器上的 PostgreSQL 服务器进程会在喷出一些日志消息后愉快地取消链接,认为它是由于崩溃而遗留下来的。

    所以你真的在用这样的解决方案如履薄冰。

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

    另一个警告:由于您似乎使用的是 Windows(Powershell?),当您谈论共享存储时,您可能会想到 CIFS 文件系统。 Windows“网络共享”不是可靠的文件系统——我上次检查时,它不支持_commit

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

    【讨论】:

    • 首先感谢您的回复。你是对的,这就是我在这里问的原因,但我没有设法找到在 Windows Server 中工作的现有解决方案。所有工具都适用于 linux 系统。如上所述,我找到的唯一解决方案是使用 wal 归档,这是一种在主服务器关闭且无法使用我们的应用程序时从服务器始终处于只读模式的场景。您在 Windows 环境中还有其他配置建议吗?
    • 我不做 Windows... 你看过列出集群解决方案的PostgreSQL Wiki page 了吗?也许this 也很有趣。
    • 是的,我在上面描述的这个场景,但我不确定它是否会运作良好,我想要第二个意见!
    • 不会将 Windows 用于任何类似的高级操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多