Postgresql

Postgres 9.4,複製槽,故障轉移主機不起作用

  • December 13, 2017

我已經通過本手冊安裝了 postgres 主節點和從節點:

在主 (10.0.0.1) 處

sudo -u postgres initdb -D /data/postgres/main

更改 postgresql.conf:

listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 2
logging_collector = on
max_wal_senders = 5

將複製記錄添加到 pg_hba.conf:

host replication replica 10.0.0.2/32 md5

然後啟動postgres

service postgresql start

創建複製使用者:

CREATE USER replica WITH REPLICATION ENCRYPTED PASSWORD '123456';

並添加複制槽:

SELECT pg_create_physical_replication_slot('standby_slot');

在從站 (10.0.0.2)

pg_basebackup -h 10.0.0.1 -U replica -D /db/postgres/main -X s -P

在 postgresql.conf 中將狀態更改為待機:

hot_standby = on

添加recovery.conf:

standby_mode = 'on'
primary_conninfo = 'host=10.0.0.1 port=5432 user=replica password=123456'
primary_slot_name = 'standby_slot'
trigger_file = 'trigger'

開始待機:

service postgresql start

因此,複製工作正常。如果我創建數據庫,它將同時出現在主伺服器和從伺服器上。

如果從機正在關閉然後啟動,所有更改都會出現。一切都很好。

但是如果主人倒下了,我有問題。當它停止時,我在從站創建觸發器文件。然後我在從屬伺服器上創建另一個數據庫,現在它是主數據庫。之後我啟動master,自動觸發文件刪除,recovery.conf也自動重命名為recovery.done。好的。但是如何同步從slave(新的primary)到master(舊的primary)的變化呢?

我發現我必須做這四個步驟:

在大師:

停止 postgres:

service postgresql stop

在奴隸:

開啟備份​​模式:

SELECT pg_backup_start('backup', true);

然後將新數據從從屬設備同步到主設備。

然後關閉備份模式:

SELECT pg_backup_stop();

最後一步後,我收到消息

NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup

然後,如果我啟動 master 它不會以日誌消息開頭:

FATAL: could not locate required checkpoint record

我不明白,如何在 master 處獲取新數據並再次使其成為主要數據。

所以將來我計劃安裝 pgpool2 用於平衡和故障轉移,但是測試安裝沒有工作,因為我不知道這個機制應該如何工作。

正如這裡所說,您不能只是跳回到舊主人那裡

一旦故障轉移到備用伺服器,只有一台伺服器在執行。這被稱為退化狀態。以前的備用數據庫現在是主數據庫,但以前的主數據庫已關閉並且可能會一直關閉。要恢復正常操作,必須在前一個主系統啟動時或在第三個(可能是新的)系統上重新創建備用伺服器。

為此,你需要一個recovery.conf關於老高手。這應該與現在的幾乎相同,只是連接必須指向其他地方。

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