Postgresql
在 Postgresql 12 中,如何在故意故障轉移後使主伺服器成為從屬伺服器
我在 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_mode
和archive_command
備用,因為它不會存檔 WAL (除非你設置archive_mode = always
)在刪除數據目錄並使用 重新初始化備用數據庫之前
pg_basebackup
,您可以嘗試執行pg_rewind
,它的作用相同,但速度更快。