Postgresql

主從複製在 PostgreSQL 9.6 上不起作用

  • December 31, 2019

我嘗試使用兩台伺服器和 Postgres 9.6 創建主/從配置

我在 /etc/postgresql/9.6/main 中修改了 master 和 slave postgresql.conf

對 master 和 slave 相同:

data_directory = '/srv/postgresql' # Because we wanted to store data elsewhere
wal_level = replica
synchronous_commit = local
archive_mode = on   
archive_command = 'cd .'
max_wal_senders = 2
wal_keep_segments = 10
synchronous_standby_names = 'pgslave001'

特定:

listen_addresses = ' <slave_ip>, localhost'

從屬特定:

listen_addresses = ' <master_ip>, localhost'

然後我在master的 pg_hba.conf 上添加了一行:

host    replication     rep     <slave_ip>/32  md5

奴隸一樣:

host    replication     rep     <master_ip>/32  md5

然後我重新啟動了每個 postgresql 服務

我在master上創建了一個角色代表,如下所示:

創建的角色
我刪除了從站 上現有的 /var/lib/postgresql/9.6/main 儲存庫,然後執行了這些命令:

service postgresql stop
pg_basebackup -D /var/lib/postgresql/9.6/main -h <master_ip> -U rep

並得到了這個答案:

NOTICE:  pg_stop_backup complete, all required WAL segments have been archived

然後我在奴隸的 /var/lib/postgresql/9.6/main 上創建了一個 recovery.conf 文件

standby_mode = 'on'
primary_conninfo = 'host=<master_ip> port=5432 user=rep   
password=<rep_password> application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'

然後我重新啟動了從屬postgresql 並得到了這些日誌:

LOG:  MultiXact member wraparound protections are now enabled
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
[unknown]@[unknown] LOG:  incomplete startup packet

最後一個有點奇怪,但似乎很“正常”

但是複制似乎不起作用,好像我在master上創建了一個表,它沒有被複製

和命令: psql -x -c “select * from pg_stat_replication;”

給我(0行)

我遵循了許多教程,但每次都是相同的結果。我的主數據庫有一些數據(大約 10 Go),也許是因為這個?我錯過了哪一步?是因為我的 data_dir 位於 /srv 上的奇怪互動嗎?

我的伺服器在 debian 9 上

感謝您的幫助,如果需要,請隨時向我詢問更多詳細資訊!由於我是 Postgres 的初學者,也許我錯過了重要資訊

您告訴它在“/srv/postgresql”中查找數據。但後來你告訴 pg_basebackup 將數據複製到“/var/lib/postgresql/9.6/main”,而不是“/srv/postgresql”。

當您再次啟動 postgresql 時,您(顯然)啟動了數據仍在“/srv/postgresql”中的數據庫實例,這不是您剛剛創建的複製。

此外,打開“archive_mode”但隨後為其提供虛擬“archive_command”也無濟於事,只會導致混淆和誤報錯誤。並且“pg_basebackup”有一個-R選項可以寫出 recovery.conf 本身,最好使用它。

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