Heroku的Postgres Continuous Protection与包含用于完整性和恢复的Follower数据库之间有什么区别

use*_*092 3 postgresql heroku heroku-postgres

我正在考虑将应用程序与Postres Standard数据库计划一起部署到Heroku。我热衷于确保数据完整性,并确保在数据库损坏或其他类似问题的情况下,绝不丢失客户的数据。我还想确保tis的顺利恢复过程。所以我有以下问题:

  1. 首先,我假设Continuos仍然有可能损坏数据库。这是真的?

  2. 如果数据库损坏,则可以提供更多的完整性,保护性和易于恢复性:标准DB /带有Continuos Protection或标准DB /带有Follower DB。

  3. 如果数据库偶然损坏,或出现数据库完整性问题,Heroku将如何补救(假设数据库是“托管”服务)。它是自动的还是我必须与支持人员一起手动进行补救?

我很想听听您对此的想法。我过去的经验是使用MySQL,但不是Postgres,我听说过很棒的事情。

谢谢

har*_*mic 5

警告:我对Postgresql有一定的经验,但对Heroku则没有任何经验。

Heroku所谓的“连续保护”和“从属”数据库是使用Postgresql的持续归档流复制功能来实现的。他们围绕这些功能提供了一系列管理工具和基础结构,以使其更易于使用。

这两个函数都利用了Postgresql将其正在进行的所有更新都写在预写日志(WAL)中的事实。

使用持续归档,可以获取数据库中所有基础文件的完整副本-这称为基本备份。在基本备份生成期间和之后,还可以收集数据库生成的所有WAL文件。请注意,您无需停止数据库即可进行基本备份-这是一个不麻烦的过程。

如果发生最坏的情况,并且有必要从备份中恢复数据库,则只需还原基本转储,配置数据库,使其知道在哪里可以找到已归档的WAL文件,然后启动它。然后它将依次重播WAL文件,直到完全更新为止。

请注意,您也可以提前停止重播。正如您在我对第一个问题的回答中看到的那样,这可能非常有用。

  1. 首先,我假设Continuos仍然有可能损坏数据库。这是真的?

当然是。发生数据库损坏的原因有很多:硬件故障,数据库中的软件故障,应用程序中的故障,甚至是操作员错误。

但是,连续归档的好处之一是,您可以将WAL文件重播到特定的时间点,因此您可以有效地倒回到数据库损坏之前的那个点。

如上所述,关注者数据库使用Postgresql的“流复制”功能。使用此功能,您可以将基本备份还原到另一台服务器上,对其进行配置以连接到主数据库,并在生成WAL文件时实时获取它们。然后,随从者可以随时掌握主节点上所做的任何更改。

  1. 如果数据库损坏,Whats可提供更多的完整性,保护性和易于恢复的功能:带有Continuos Protection的标准DB /或带有Follower DB的标准DB。

易于恢复是区别。

如果您有一个Follower DB,它是一个热备用数据库-如果主数据库由于某种原因而失败,则可以在最少的停机时间内将应用程序切换到Follower。另一方面,如果您有一个大型数据库,则必须从上一个基本备份中还原该数据库,然后重播此后产生的所有WAL文件-即使这是一个非常大型的数据库,也可能要花费很长时间,甚至几天。

另请注意,但是,如果您的数据库由于(例如)管理员意外删除错误的表而损坏了,那么跟随者数据库将毫无用处。几秒钟后,该表将被放置在关注者中。他们就像旅鼠越过悬崖。如果您的应用程序由于错误,黑客或其他原因而损坏了数据库,则同样适用。即使有跟随者,您也必须有适当的备份,连续备份或正常的pg_dump。

  1. 如果数据库偶然损坏,或出现数据库完整性问题,Heroku将如何补救(假设数据库是“托管”服务)。它是自动的还是我必须与支持人员一起手动进行补救?

他们的文档表明高级计划确实具有自动故障转移功能。如果发生硬件或平台故障以及大多数类型的数据库故障,这将很有用,在这种情况下,系统可以检测到主数据库已关闭并启动故障转移。

如果应用程序本身(或仓促的管理员)损坏了数据库,那么我怀疑您将必须手动启动故障转移。