web-dev-qa-db-ja.com

マスタースレーブレプリケーションがPostgreSQL 9.6で機能しない

2つのサーバーとPostgres 9.6でマスター/スレーブ構成を作成しようとしました

/etc/postgresql/9.6/mainのマスターとスレーブのpostgresql.confを変更しました
マスターとスレーブで同じ:

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'

master-specific:

listen_addresses = ' <slave_ip>, localhost'

slave-specific:

listen_addresses = ' <master_ip>, localhost'

次に、masterのpg_hba.confに1行追加しました。

Host    replication     rep     <slave_ip>/32  md5

slaveでも同じです:

Host    replication     rep     <master_ip>/32  md5

そして、私は各postgresqlサービスを再起動しました

masterに役割担当者を作成しました。

Created role
slaveの既存の/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 onslaveに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'

次に、slavepostgresqlを再起動して、それらのログを取得しました。

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

最後のものは少し奇妙ですが、「正常」のようです

しかし、レプリケーションが機能していないようです。マスターでテーブルを作成した場合、レプリケーションされません。

そしてコマンド:psql -x -c "select * from pg_stat_replication;"

与える(0行)

私は多くのチュートリアルをたどりましたが、毎回同じ結果です。私のマスターdbはいくつかのデータ(約10 Go)を取得しました、それはおそらくそれが原因ですか?どのステップを逃しましたか?私のdata_dirが/ srvにあるという事実との奇妙な相互作用が原因ですか?

私のサーバーはdebian 9上にあります

助けてくれてありがとう、必要に応じて詳細を尋ねてください!私はPostgresの初心者なので、重要な情報を見逃したかもしれません

2
Hydrazounet

「/ srv/postgresql」でデータを探すように言った。しかし、次に、pg_basebackupにデータを「/ srv/postgresql」ではなく「/var/lib/postgresql/9.6/main」にクローン作成するように指示しました。

再度postgresqlを起動したとき、あなたは(どうやら)データがまだ/ srv/postgresqlにあるデータベースインスタンスを起動しましたが、これは作成したクローンではありません。

また、「archive_mode」をオンにしてからダミーの「archive_command」を提供することは役に立たず、混乱と誤って報告されたエラーを引き起こすだけです。そして、「pg_basebackup」には-R recovery.conf自体を書き出すためのオプション。おそらくそれを使用するのが最善でしょう。

1
jjanes