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