Postgresql
archive_command 失敗導致 master 磁碟空間不足。有沒有優先考慮主人健康的命令
archive_command
我在 postgresql.conf 中設置了一個簡單的複制:archive_command = 'rsync -a %p _postgresql@serverip:/var/postgresql/wal_archive/%f'
在復製品出現故障之前,它工作了 2 年多。副本宕機後,歸檔命令反复失敗,因此 master 上的 pg_xlog 文件從未被刪除,master 的磁碟空間不足。
在我的案例中,副本很好,但不是那麼重要。然而,確保 master 始終可用是非常重要的,所以我想使用歸檔命令,在 master 出現問題之前犧牲副本。
我目前走到了另一個極端,將archive_command更改為:
archive_command = 'rsync -a %p _postgresql@serverip:/var/postgresql/wal_archive/%f || true'
但這似乎也不理想,因為即使是幾秒鐘的網路中斷也可能導致複製失敗。
理想情況下,我想將其更改為
archive_command
嘗試將 WAL 文件複製到副本一定次數的東西,如果失敗,放棄並刪除 pg_xlog 文件。對新的有什麼建議archive_command
嗎?(postgres 10.5)
我會推荐一種稍微不同的方法。與其測試失敗的數量,因為大量可能導致磁碟空間不足,而是直接測試磁碟空間不足。
archive_command = 'rsync -a %p _postgresql@serverip:/var/postgresql/wal_archive/%f || (df -P /var/data/pg_wal|awk "NR==2 && \$4< 400000 {exit 0}; NR==2 {exit 1}")'
但請注意,rsync 首先是一種危險的方法,因為它不能保證在本地返回成功之前寫入遠端端(以及該文件所在的目錄)的文件的成功 fsync。
或者完全不同的方法:將您的副本設置為流式副本,而不是日誌傳送副本。然後將“wal_keep_segments”設置為比為 pg_wal 保留的空間量略小的值。請注意,這僅適用於為 pg_wal 硬保留空間的情況,也就是說,沒有人可以“借用”一些空閒空間用於其他目的,例如臨時文件。
當然,如果您的副本停機了一段時間而您沒有註意到,那麼您可能還需要一個監控解決方案。