Postgresqlはレプリケーション接続を受け入れません


19

昔ながらのストリーミングレプリケーション。PostgreSQL:9.2.7 Windows 8.1 64ビット

プライマリクラスタとセカンダリクラスタは同じ Windowsマシン上にあります。pg_start_backup()とすべてをすでに実行しているため、両方のノードにまったく同じデータがあります。

現在、レプリケーションの問題は、スレーブサーバーからプライマリサーバーに接続しない「レプリケーション接続」ですが、psqlシェルを使用して同じパラメーターを使用して接続できます。私が犯人だと思うのは、スレーブのrecovery.confの接続文字列です。

primary_conninfo = 'host = 127.0.0.1 port = 5432 user = postgres password = postgres'

localhost、0.0.0.0、lan IPをすべて試しましたが、pgログには次のように書かれています:

 FATAL:  could not connect to the primary server: FATAL:  no pg_hba.conf entry for replication connection from host "127.0.0.1", user "postgres", SSL off

マスターのpg_hba.confを見てください:

host     all     all     0.0.0.0/0   trust
host    all             postgres             127.0.0.1/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 md5
hostnossl    all     postgres    127.0.0.1/32    trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

可能な限りすべての接続を許可したが、スレーブは接続できないようです。何かお手伝いできますか?

回答:


25

データベース名がなければならないreplicationとして、allレプリケーション接続をカバーしていません。

host    replication    postgres             127.0.0.1/0               trust

PostgreSQLのドキュメントは、さらにこう述べています。

この値replicationは、レプリケーション接続が要求された場合にレコードが一致することを指定します(レプリケーション接続は特定のデータベースを指定しないことに注意してください)。それ以外の場合、これは特定のPostgreSQLデータベースの名前です。複数のデータベース名をコンマで区切って指定できます。ファイル名の前にを付けると、データベース名を含む別のファイルを指定できます@


レプリケーションデータベースを作成する必要がありますか?それとも内蔵ですか?
ギミバラク

組み込まれていないため、レプリケーションをセットアップする必要があります。ここに参照です:digitalocean.com/community/tutorials/...
サチンバーマ

これは論理複製の場合ではないことに注意してください。
mlissner

3

以下の行を追加しpg_hba.confてリロードするとうまくいきました。タイプが「ローカル」であることを考慮すると、アドレスを明示的に指定する必要はありません。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

そして忘れないで pg_ctl reload


2

ここで私が遭遇したもう1つの可能な解決策。あなたがやっている場合は論理的なレプリケーションを、あなたが複製するためにデータベースを設定している、それが動作しません。通常のパラメーターを取得するだけです。replicationパラメータは、物理的な複製ではなく、論理的な複製のためです。

男、その人は理解するためにいくつかの仕事を取った。これがお役に立てば幸いです!


1
これをもっと支持する必要があります。これを見つけるまでwal2jsonプラグインのトラブルシューティングに何時間も費やしましたが、これが私にとって正しい答えでした。wal2jsonプラグインは論理レプリケーションを使用しているように見えるので、サンプルのpg_recvlogicalコマンドを機能させるには、キーワード 'replication'の代わりに 'test'データベース名を使用するようにpg_hba.confを設定する必要があります
Alf47
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.