Postgresql akzeptiert keine Replikationsverbindung

19

Einfache alte Streaming-Replikation. PostgreSQL: 9.2.7 Windows 8.1 64 Bit

Meine primären und sekundären Cluster befinden sich auf demselben Windows-Computer. Ich habe bereits pg_start_backup () und alles getan , also haben beide Knoten genau die gleichen Daten.

Jetzt ist das Problem mit der Replikation "Replikationsverbindung" vom Slave-Server nicht mit dem primären Server verbinden, aber ich kann unter Verwendung der gleichen Parameter mit psql-Shell verbinden. Was ich für schuldig halte, ist die Verbindungszeichenfolge in der recovery.conf des Slaves:

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

Ich habe versucht, localhost, 0.0.0.0, LAN-IP alles außer pg-Protokoll sagt:

 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

Nun sieh dir die pg_hba.conf meines Meisters an:

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

Es ist, als hätte ich jede mögliche Verbindung zugelassen, aber der Slave kann keine Verbindung herstellen. Können Sie uns helfen?

Sachin Verma
quelle

Antworten:

25

Der Datenbankname muss sein , replicationwie allnicht Replikationsverbindungen abdecken.

host    replication    postgres             127.0.0.1/0               trust

In der PostgreSQL-Dokumentation heißt es weiter:

Der Wert replicationgibt an, dass der Datensatz übereinstimmt, wenn eine Replikationsverbindung angefordert wird (beachten Sie, dass Replikationsverbindungen keine bestimmte Datenbank angeben). Andernfalls ist dies der Name einer bestimmten PostgreSQL-Datenbank. Mehrere Datenbanknamen können durch Komma getrennt angegeben werden. Eine separate Datei mit Datenbanknamen kann angegeben werden, indem vor dem Dateinamen mit angegeben wird @.

Sachin Verma
quelle
Müssen wir eine Replikationsdatenbank erstellen? oder ist es eingebaut ??
Gimibarak
Es ist nicht eingebaut und Sie müssen die Replikation einrichten. Hier ist die Referenz: digitalocean.com/community/tutorials/…
Sachin Verma
Beachten Sie, dass dies bei der logischen Replikation nicht der Fall ist.
mlissner
3

Das Hinzufügen der folgenden Zeile pg_hba.confund das Neuladen funktionierten für mich. Angesichts des Typs 'local' ist die explizite Angabe einer Adresse nicht erforderlich.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

Und denk dran pg_ctl reload

Rogerlr
quelle
2

Eine andere mögliche Lösung, die mir hier begegnet ist. Wenn Sie eine logische Replikation durchführen und die DATABASE auf Replikation eingestellt ist, funktioniert dies nicht. Es muss nur ein regulärer Parameter abgerufen werden. Der replicationParameter ist für die physische Replikation vorgesehen, nicht für die logische Replikation.

Mann, dieser hat einige Arbeit gekostet, um es herauszufinden. Ich hoffe das hilft!

mlissner
quelle
1
Dies muss mehr gewürdigt werden. Ich habe Stunden damit verbracht, das wal2json-Plugin zu beheben, bis ich dies gefunden habe und dies die richtige Antwort für mich war. Es sieht so aus, als ob das wal2json-Plugin die logische Replikation verwendet. Damit der Beispielbefehl pg_recvlogical funktioniert, musste die Datei pg_hba.conf so eingestellt werden, dass der Datenbankname 'test' anstelle des Schlüsselworts 'replication' verwendet wird
Alf47