2015-10-26 57 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