我们正在寻求有关如何为我们的应用程序设置基本故障转移群集的建议:
- 我们将使用4台机器运行 Microsoft Windows Server(很可能是 2003)。
- 全部四个将始终运行我们的应用程序,它本质上是一个 Web 服务。
- 负载平衡是“外包的”——其他人负责在服务器之间分配网络请求。
- 仅有的一的服务器将在任何给定时间主动运行 PostgreSQL 服务器。另一台服务器(四台中的一台)也安装了数据库,但处于待机/被动状态。
- DB 数据存储在共享存储. 无需在服务器之间复制数据。
- 许多最终用户非常频繁地读取相当小的数据块。
- 写入操作的频率较低,写入者较少,且写入的数据量非常大。
现在,如何配置 Microsoft 群集服务以始终仅保留 DB 服务器的一个实例和应用程序的 4 个实例(每个服务器 1 个)?PostgreSQL 是否与 MSCS 完美集成?
更新:除了将数据保存在共享存储上,我还考虑使用日志传送在几个数据库服务器上复制数据。此选项有两个问题:
- 日志传送只能确保我有第二台服务器,可以获取所有数据并随时准备接管。如何实现实际的故障检测和故障转移开关?
- 切换回来:假设主服务器发生故障,系统自动将故障转移到从服务器,然后主服务器重新上线。我理解,使用 WAL 传送时,这将需要再次重新配置日志传送,而且切换回来远非无缝。是这样吗?
答案1
使用通用服务模式,PostgreSQL 可以很好地与 MSCS 配合使用。建议您也在共享驱动器上安装 PostgreSQL 二进制文件,并将服务指向那里 - 这样您就可以确保不会出现版本不匹配的情况。
Lars 的观点很正确,他建议不要在同一台机器上运行数据库和应用服务器。你可能需要考虑使用 2 台机器运行数据库,2 台机器运行应用服务器 - 或者至少让 MSCS 关闭运行 PostgreSQL 的节点上的应用服务器(我不确定它是否可以做到这一点,但我认为它应该可以做到)