Postgresql tidak menerima koneksi replikasi

19

Replikasi streaming lama biasa. PostgreSQL: 9.2.7 Windows 8.1 64 bit

Cluster primer dan sekunder saya ada di mesin windows yang sama . Saya sudah melakukan pg_start_backup () dan semuanya, sehingga kedua node memiliki data yang sama persis.

Sekarang masalah dengan replikasi adalah "koneksi replikasi" dari server slave tidak terhubung ke server utama tetapi saya dapat terhubung menggunakan params yang sama menggunakan shell psql. Apa yang saya pikir pelakunya adalah string koneksi di recovery.conf slave:

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

Saya mencoba localhost, 0.0.0.0, lan IP segalanya kecuali pg log mengatakan:

 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

Sekarang lihat pg_hba.conf Master saya:

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

Sepertinya saya mengizinkan setiap koneksi yang mungkin, tetapi budak tidak dapat terhubung. Bisakah kamu membantu?

Sachin Verma
sumber

Jawaban:

25

Nama database harus replicationseperti alltidak mencakup koneksi replikasi.

host    replication    postgres             127.0.0.1/0               trust

The dokumentasi PostgreSQL lebih lanjut mengatakan:

Nilai replicationmenentukan bahwa catatan cocok jika koneksi replikasi diminta (perhatikan bahwa koneksi replikasi tidak menentukan basis data tertentu). Kalau tidak, ini adalah nama database PostgreSQL tertentu. Beberapa nama database dapat diberikan dengan memisahkannya dengan koma. File terpisah yang berisi nama database dapat ditentukan dengan mendahului nama file dengan @.

Sachin Verma
sumber
apakah kita perlu membuat database replikasi? atau itu built-in ??
gimibarak
Ini bukan bawaan dan Anda harus mengatur replikasi. Inilah rujukannya: digitalocean.com/community/tutorials/…
Sachin Verma
Perhatikan bahwa ini bukan kasus untuk replikasi logis.
mlissner
3

Menambahkan baris di bawah ke pg_hba.confdan memuat ulang bekerja untuk saya. Mengingat jenisnya adalah 'lokal', tidak perlu menentukan alamat secara eksplisit.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

Dan ingat juga pg_ctl reload

Rogerlr
sumber
2

Satu kemungkinan solusi lain di sini yang saya temui. Jika Anda melakukan replikasi logis dan Anda memiliki DATABASE yang disetel ke replikasi, itu tidak akan berfungsi. Perlu hanya mendapatkan parameter reguler. The replicationparameter untuk replikasi fisik, tidak replikasi logis.

Sobat, yang itu butuh kerjaan untuk mencari tahu. Saya harap ini membantu!

mlissner
sumber
1
Ini perlu lebih ditingkatkan. Saya menghabiskan berjam-jam memecahkan masalah plugin wal2json sampai saya menemukan ini dan ini adalah jawaban yang tepat untuk saya. Tampaknya plugin wal2json menggunakan replikasi logis sehingga untuk mendapatkan contohnya perintah pg_recvlogical agar berfungsi, saya perlu mengatur pg_hba.conf untuk menggunakan nama basis data 'test' alih-alih kata kunci 'replikasi'
Alf47