Postgresql

在 Postgresql 12 中,如何在故意故障轉移後使主伺服器成為從屬伺服器

  • November 15, 2020

我在 Debian 10.6 上使用 PostgreSQL 12。我一直在閱讀有關複製的內容,並且在一個主數據庫和備用數據庫之間設置了非同步複製。我想測試故障轉移,所以我停止了主伺服器並提升了成功的備用伺服器。既然舊的備用伺服器是新的主伺服器,我很難在網上找到關於如何使舊的主伺服器成為備用伺服器的教程。以下是我採取的步驟,看起來它正在工作,但有什麼我可能錯過或沒有想到的嗎?

在新的主要

更新 pg_hba

echo "host    replication     replicator      <new standby ip>/24        md5" >> /etc/postgresql/12/main/pg_hba.conf

在新的待機

備份庫

sudo mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bk

備份舊的表空間目錄,並創建一個新的空目錄

sudo mv /tablespaces /tablespaces.bk
sudo mkdir /tablespaces/

製作新主數據庫的基礎備份

pg_basebackup -D /var/lib/postgresql/12/main -F p -R -c fast -l mffb -P -v -h <primary_ip> -p 5432 -U replicator

如果設置了 WAL 存檔,我將採取以下額外步驟:

在新的主要:

echo "archive_mode = ON" >> /var/lib/postgresql/12/main/postgresql.auto.conf
echo "archive_command = 'test ! -f  /wal_archive/%f && cp %p /wal_archive/%f'" >> /var/lib/postgresql/12/main/postgresql.auto.conf
echo "restore_command = ''" >> /var/lib/postgresql/12/main/postgresql.auto.conf

在新待機

echo "restore_command = 'cp /wal_archive/%f %p'" >> /var/lib/postgresql/12/main/postgresql.auto.conf

聽起來不錯,但我會在兩台伺服器上保持相同的配置,這樣您就不必更改任何內容:

  • restore_command主伺服器上忽略了類似的恢復設置
  • 你可以設置archive_modearchive_command備用,因為它不會存檔 WAL (除非你設置archive_mode = always

在刪除數據目錄並使用 重新初始化備用數據庫之前pg_basebackup,您可以嘗試執行pg_rewind,它的作用相同,但速度更快。

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