Postgresql

PostgreSQL Slave 在 pg_xlog 中有比 /wal_archive 更多的文件

  • August 15, 2014

**背景:**出於各種原因,我將 PostgreSQL Slave 從流複製切換到熱備用複制。

使用本指南設置流複製:http: //technology.trapeze.com/journal/postgresql-streaming-replication-ubuntu-1004/

要切換到熱備用:我在此處 (1) https://wiki.postgresql.org/wiki/Warm_Standby和此處 (2) http://www.postgresql.org/docs/遵循有關熱備用的說明目前/靜態/pgstandby.html

我發現在從屬伺服器上的日誌文件pg_xlog/比在 wal_archive/ (從主伺服器發送的文件)中更多。這怎麼可能?我認為這阻礙了我的溫暖設置。

  • 在Master的/var/lib/postgresql/9.3/main/pg_xlog/中,我有從000000010000000000000001到00000001000000000000001A.backup到00000001000000000000001C的文件
  • 在 /var/lib/postgresql/wal_archive/ 的Slave我有文件從 000000010000000000000001 到 00000001000000000000001A.backup 到 00000001000000000000001B
  • 在 /var/lib/postgresql/9.3/main/pg_xlog/ 的Slave我有文件從 00000001000000000000001C 到 000000010000000000000023

recovery.conf包含:

restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5442 [/wal_archive] %f %p %r 2>>standby.log'

當我重新啟動從屬設備時,它抱怨它缺少xxx1C日誌文件

第一個問題,Slave 怎麼可能擁有pg_xlog/比 Master 更多的日誌文件?

第二個問題,在熱備模式下重新同步伺服器:我是否必須pg_basebackup再次(基本上複製主伺服器/data/pg_xlog目錄)到從伺服器?

只是想了解 PostgreSQL :) 在此先感謝!!

我在這裡發現了一個非常相似的問題,似乎從未得到回答:http ://www.postgresql.org/message-id/CAE7ByhgTJ6xOe4f3aa42Kn0_5gfEzWW1F​​Z9QQqsC6RP-Fnh_ow@mail.gmail.com

Slave 怎麼可能擁有比 Master 更多的 pg_xlog/ 日誌文件?

將主伺服器上的 WAL 歸檔到某個外部位置的全部目的是讓主伺服器將其刪除以釋放其 中的空間pg_xlog,而副本可能仍需要它。

pg_xlog如果副本由於無法跟上重放速度而落後於主副本,則副本可以擁有比主副本和更舊的存檔更多的存檔。但是,pg_standby這種情況不應該發生 -存檔可能包含更多 xlog,但副本應該只按需讀取它們。

很難具體說明,因為您給出了問題的廣泛描述而不是實際的目錄列表,並且沒有解釋您設置副本所遵循的確切步驟。或者顯示副本的確切日誌文件輸出。所以我能做的最好的就是“聽起來副本設置被破壞了”。

在熱備用模式下重新同步伺服器:我是否必須再次執行 pg_basebackup(基本上複製主伺服器/data/pg_xlog目錄)到從伺服器?

假設這裡/data是主數據目錄,包含globalbasepg_clog等,這pg_xlog是來自不同磁碟的事務日誌:是的,沒錯。

但是,您必須使用該pg_basebackup命令,或者按照手冊中的說明使用pg_start_backup()和 rsync/cp 進行正確的文件系統級副本。

您還必須確保首先停止了副本。在它執行時覆蓋它的 datadir 會讓它非常不安。


流式複制與熱備用

熱備與熱備與流式與日誌傳送複製正交。

您要做的是使用日誌傳送而不是流式複制。副本是熱備用還是熱備用,即它是否接受查詢,這無關緊要。

就我個人而言,我建議同時使用這兩種方法 - 使用流式傳輸,如果流式傳輸存在問題,則回退到日誌傳送。如果兩者都配置了,PostgreSQL 會自動執行此操作。

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