Postgresql

將整個 PostgreSQL 集群複製到另一個(相同的)伺服器

  • August 12, 2019

我希望將 PostgreSQL 10 集群從server1複製到server2,它在相同的硬體上執行相同的 Postgres 版本。目的是負載平衡和HA。要記住的事情:

  • 數據庫非常大(TB),網路非常好。我想避免使用中間文件。
  • 複製實時數據庫會很酷,但如果需要,我也可以關閉集群。

我考慮過的選項:

  1. pg_dump | psql當然,但這需要重新創建索引,並且對於相同系統之間的完整副本來說似乎真的很慢而且效率極低。
  2. 將server2設置為從屬流複製,等待它與server1同步,然後重新配置兩者以再次禁用複制(我不需要它)。似乎是一堆毫無意義的配置工作,有錯誤的餘地。
  3. 關閉集群、rsync所有 Postgres 文件夾和文件。有這麼多數據存在數據損壞的風險,我需要確保我得到了所有東西(大概只有數據目錄是不夠的)。
  4. 我可以pg_basebackup直接通過管道以pg_receivewal某種方式完成這項工作嗎?找不到我的案例的說明。

**最好的方法是什麼?**似乎是一個很常見的情況。

要走的路是普通格式pg_basebackup

只要確保,--wal-method=stream備份將包含所有必需的 WAL 文件。

然後在備份目錄上啟動伺服器,它會執行恢復並上來。

沒必要亂來pg_receivewal

您的選項 1pg_dump | psql確實有您描述的限制。

您的選項2沒有多大意義。您需要從複製開始以設置流式傳輸,並且當您擁有複製時,您就不需要流式傳輸,因為您已經有了複製。此外,您不必“重新配置兩者以再次禁用複制”。當您提升備用數據庫時,它不再是備用數據庫,不再需要重新配置。如果您在主伺服器上使用了命名插槽,則只需將其刪除即可。如果您使用臨時插槽,您甚至不需要這樣做。如果您想為自己創建額外的工作,您可以將“wal_level”降低到“minimal”,如果您想為自己創建額外的工作,您可以將“max_wal_senders”設置為 0。所以不要做那些事情。以允許未來流複製的方式配置主節點。

您在選項 3 中的擔憂也沒有任何意義。為什麼對數據進行 rsync 處理比對 TB 數據執行的任何其他操作(例如普通備份,甚至只是執行數據庫)更容易損壞?Rsync 不會竭盡全力破壞您的數據。如果您需要的不僅僅是數據目錄,那麼首先取決於系統的配置方式。你有表空間嗎?是數據目錄中的配置文件,還是其他地方。如果你做這些事情,那麼是的,你必須處理它們。當您決定放棄最簡單的配置時,這就是您註冊的內容。

在選項 4 中,“pg_basebackup”的輸出不會通過管道傳送到“pg_receivewal”。它們並非旨在以這種方式協同工作。“pg_basebackup”已經可以創建一個獨立的目錄,這是你想要的,所以你可以使用它。我想你想在你希望新伺服器所在的主機上執行,pg_basebackup -D newdir -F plain -h prod_host.example.com

您目前如何備份數據庫?進行複製的最佳方法可能是利用您目前的備份策略。如果需要,您將如何從備份中恢復?對它的小改動應該可以讓你複製(以及測試你目前的備份策略是否有效)

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