主從複製在 PostgreSQL 9.6 上不起作用
我嘗試使用兩台伺服器和 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 本身,最好使用它。