Postgresql

Postgresql 故障恢復而不重新同步數據目錄

  • September 20, 2017

我在 PostgreSQL 中使用主從流複製。Repmgr 配置為處理自動故障轉移。

一旦發生故障轉移,我需要在不做任何基本備份的情況下將舊主伺服器設置為從伺服器,新的主伺服器也需要進行一些更改才能充當主伺服器,例如需要啟用 wal 日誌和其他東西。

如何在復製到舊主節點和同步舊主節點而不使用基本備份期間避免輔助節點中的這些更改?

從根本上說,你不能沒有對舊主人進行某種重置。除非舊的 master 在新的 master 被提升之前關閉,並且你確保所有的 WAL 從舊的 master 同步到新的 master,否則 old 通常會稍微“領先於”新提升的副本在副本被提升到一個新的時間線。

它將拒絕從新主人開始重播,因為這樣做會破壞舊主人。舊主伺服器可能已經分配了事務 ID 1234。那麼如果新主人說“我正在開始交易1234”該怎麼辦。已經有1234了!在系統的低級碰撞安全部分,到處都有類似的問題。

這就是為什麼您通常在啟動之前從新主伺服器重新同步舊主伺服器。rsync使用並行變體或其中之一可以使這更快。

但是,您可以改為使用pg_rewind“倒回”舊 master 到它的歷史與新 master 不同的點,這樣它就可以從新 master 開始重播。我自己不使用它,所以除了指點你之外,我無能為力。但是我的一位同事寫了幾篇可以幫助你的部落格文章:

repmgr可以pg_rewindrepmgr standby switchover. 據我所知,自動故障轉移不會這樣做,但您可能想要求repmgr團隊對此進行澄清。

就我個人而言,我認為自動故障轉移是一個糟糕的主意,除非您在正常操作期間也隨機觸發它,因此您始終知道它有效。ChaosMonkey 風格。否則,這只是讓你的災難翻倍的秘訣。更喜歡手動觸發的自動故障轉移,例如repmgr standby switchover,並在出現問題時提醒您。

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