Postgresql

postgres:archive_command 是什麼以及何時使用它

  • June 9, 2017

我有一個主/從 postgresql 配置,其中從屬是熱備用並用作只讀備份。目前,archive_command 設置為“cd”。(正如我所讀的那樣)。我的理解是archive_command可以將wal段複製到特定位置;通常我會看到使用 cp 命令將其複製到磁碟上其他位置的範例。我將 wal_keep_segments 設置為 256,所以如果我理解正確,slave 可能會落後於 wal 大約 4GB (16MB * 256) 的更改。這可能是我從不需要使用archive_command 的原因嗎,因為我有足夠的wal 段來解決一些滯後問題?

那麼可選 archive_command 的目的是為了保存比 wal_keep_segments 設置更多的 wal 段嗎?所以在我的例子中,數據庫目錄(pg_xlog)中有 256 個 wal 段,當達到限制時,postgres 會自動輪換並清理這些 wal 段。

而且,如果我放置一個archive_command,它是否會繼續將wal段保存到命令將文件複製到的任何位置(並繼續添加越來越多的歸檔wal段,除非我添加自己的清理過程)?這種想法正確嗎?

那麼,假設我對archive_command 的理解是正確的,那麼slave 是如何利用這些wal 文件的呢?從站是否首先嘗試從主數據目錄中檢索 256 個 wal 文件,然後回退到 recovery_command 以檢索比這更舊的 wal 文件?recovery_command 是在從機上執行還是以某種方式通過主機代理?recovery_command 的許多範例都顯示它與 cp 一起使用,所以我不確定文件是如何傳輸到不同的伺服器的?

我已經嘗試閱讀大量關於此的指南,包括以下內容。

我什麼時候必須使用archive_command,什麼時候不需要 https://www.postgresql.org/docs/current/static/continuous-archiving.html

我對這些概念仍然有些模糊,並試圖弄清楚。有人可以澄清我的上述想法是否正確以及為什麼我可以使用archive_command?謝謝閱讀。

這是我的配置:

大師:postgresql.conf

listen_addresses = '*' 

wal_level = hot_standby
archive_mode = on 
max_wal_senders = 2
archive_command = 'cd .'
wal_keep_segments = 256 
hot_standby = on

從站:postgresql.conf

listen_addresses = '*' 

wal_level = hot_standby
archive_mode = on 
max_wal_senders = 2
archive_command = 'cd .'
wal_keep_segments = 256 
hot_standby = on

從站:recovery.conf

standby_mode = 'on'
primary_conninfo = 'host=IP-of-master port=5432 user=rep password=****'
trigger_file = '/tmp/postgresql.trigger.5432'

在以下archive_command情況下很有用:

  • 您希望在發生災難(例如意外刪除數據庫)時從基本備份到某個過去的狀態進行時間點恢復。
  • 您正在使用沒有複製槽的流複製。在這種情況下,如果副本落後超過wal_keep_segments並且hot_standby_feedback已關閉或副本暫時斷開連接,則主伺服器將刪除它所需的資源並且它將中斷。如果您正在使用 WAL 歸檔,則副本可以回退到使用它restore_command來獲取 WAL 以趕上和恢復。否則,您必須從新的pg_basebackup.

引用自:https://dba.stackexchange.com/questions/175802