如果主服务器发生故障,则备用服务器应开始故障转移程序。
如果备用服务器发生故障,则无需进行故障转移。如果备用服务器可以重新启动,即使在稍后一段时间,也可以立即重新启动恢复过程,利用可重启恢复的优势。如果备用服务器无法重新启动,则应创建一个全新的备用服务器实例。
如果主服务器发生故障,并且备用服务器成为新的主服务器,然后旧的主服务器重新启动,则您必须有一种机制来通知旧的主服务器它不再是主服务器。 这有时被称为STONITH(射杀另一个节点),这对于避免两个系统都认为自己是主服务器的情况是必要的,这会导致混乱并最终导致数据丢失。
许多故障转移系统仅使用两个系统,即主系统和备用系统,通过某种心跳机制连接,以不断验证两者之间的连接以及主系统的可用性。 也可以使用第三个系统(称为见证服务器)来防止某些不适当的故障转移情况,但是除非经过充分的设置和严格的测试,否则额外的复杂性可能不值得。
PostgreSQL不提供识别主服务器故障并通知备用数据库服务器所需的系统软件。 许多这样的工具都存在,并且与成功故障转移所需的操作系统设施(例如 IP 地址迁移)很好地集成在一起。
一旦发生到备用服务器的故障转移,只有一个服务器在运行。 这称为退化状态。 前备用服务器现在是主服务器,但前主服务器已关闭并且可能会保持关闭状态。 为了恢复正常运行,必须重新创建备用服务器,无论是在先前的主服务器系统恢复运行时,还是在第三个可能的新系统上。 pg_rewind 实用程序可用于加速大型集群的此过程。 完成后,可以认为主服务器和备用服务器已切换角色。 有些人选择使用第三台服务器为新的主服务器提供备份,直到重新创建新的备用服务器为止,尽管显然这会使系统配置和操作过程复杂化。
因此,从主服务器切换到备用服务器可以很快,但是需要一些时间来重新准备故障转移群集。 定期从主服务器切换到备用服务器很有用,因为它允许每个系统定期停机进行维护。 这也作为故障转移机制的测试,以确保它在您需要时真正有效。 建议采用书面的管理程序。
如果您选择了逻辑复制槽同步(请参见第 47.2.3 节),那么在切换到备用服务器之前,建议检查在备用服务器上同步的逻辑槽是否已准备好进行故障转移。 这可以通过遵循第 29.3 节中描述的步骤来完成。
要触发日志传送备用服务器的故障转移,请运行 pg_ctl promote
或调用 pg_promote()
。如果您正在设置仅用于从主服务器卸载只读查询的报告服务器,而不是用于高可用性目的,则无需提升。
如果您在文档中看到任何不正确、与您特定功能的经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。