2015-10-26 47 views
1

我正在为Google Compute Engine上运行的PostgreSQL实例设置每日备份(使用持久磁盘快照),并且其数据目录位于持久磁盘上。现在使用持久磁盘备份PostgreSQL的安全方式

,根据Persistent Disk Backups博客文章,我应该:

  • 停止我的应用程序(PostgreSQL的)
  • fsfreeze我的文件系统,以防止进一步的修改和刷新未决的数据写入磁盘
  • 采取持久磁盘快照
  • 解冻我的文件系统
  • 启动我的应用程序(PostgreSQL)

这显然带来了一些停机时间(每个步骤在我的测试中花费几秒到几分钟),我想避免或至少减少。

为了确保快照一致(我假设在文件系统级别),必须标记博客文章的步骤,但我对干净的文件系统不感兴趣,我有兴趣能够从这样的快照中恢复PostgreSQL实例中的所有数据。

PostgreSQL uses fsync当提交时,所有PostgreSQL承认已提交的数据已经到达磁盘(fsync goes to the disk)。

为了讨论的目的,我觉得很有道理,比较了永久磁盘快照没有停止PostgreSQL和不使用fsfreeze与磁盘刚刚经历了意外断电文件系统上的

在阅读https://wiki.postgresql.org/wiki/Corruptionhttp://www.postgresql.org/docs/current/static/wal-reliability.html之后,我的理解是,所有承诺数据都应该在意外停电时幸存下来。

我的问题是:

  1. 是我与意外断电比较准确的还是我失去了什么?

  2. 我可以在不停止PostgreSQL的情况下拍摄快照,并且不使用fsfreeze或者我缺少一些副作用?

  3. 如果上面的答案是我不应该只拍一张快照,那么创建另一个永久磁盘是否会习惯性地定期使用pg_dumpall(1)来转储整个数据库,然后快照那个其他永久磁盘?

回答

1

1)是的,尽管拍摄快照会更安全。 fsfreeze的东西真的是100%安全(有趣的是:我从来没有在我的PD上使用fsfreeze,并且没有遇到问题)

2)是的,但没有100%的保证,它总是会工作(偏执的解决方案:拍摄快照,使用该快照旋转临时虚拟机,检查磁盘是否正常,然后删除虚拟机。这可以是自动的)

3)不,我不会推荐这个快照。这需要花费更多的时间,可能会降低数据库性能,以及在转储过程中发生什么情况会发生什么情况?而且,PD对增量备份来说非常昂贵。快照是有区别的,因此您不必为每个副本(仅第一个副本)支付整个磁盘,而只需支付更改。

可能的建议:

DO#3,但随后创建了新的PD的快照,然后删除该PD。

+0

你能详细说说2)吗?你说没有100%的保证,它会一直工作,但具体会出什么问题?为什么要停止PostgreSQL并使用fsfreeze保证它始终有效? – Michael

+0

假设您正在使用的软件中存在漏洞。或者磁盘上的某些I/O错误未被修复。你只会发现你是否测试了快照。 –

+0

@ A.Scherbaum是的,如果软件的任何部分存在错误,则所有投注都将关闭。是的,我同意测试快照是一个完美的解决方案。然而,我问是否有理由停止PostgreSQL和使用fsfreeze比仅仅拍摄快照更好,**假设没有错误**。我只是想了解该建议背后的理由:)。 – Michael