Postgres 9.4,複製槽,故障轉移主機不起作用
我已經通過本手冊安裝了 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
關於老高手。這應該與現在的幾乎相同,只是連接必須指向其他地方。