Postgresql n'accepte pas la connexion de réplication

19

Réplication en streaming ancienne et simple. PostgreSQL: 9.2.7 Windows 8.1 64 bits

Mes clusters primaires et secondaires sont sur la même machine Windows. J'ai déjà fait pg_start_backup () et tout, donc les deux nœuds ont exactement les mêmes données.

Maintenant, le problème avec la réplication est que la "connexion de réplication" du serveur esclave ne se connecte pas au serveur principal, mais je peux me connecter en utilisant les mêmes paramètres à l'aide du shell psql. Ce que je pense coupable est la chaîne de connexion dans recovery.conf de l'esclave:

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

J'ai essayé localhost, 0.0.0.0, lan IP tout mais le journal de pg indique:

 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

Maintenant, regardez mon pg_hba.conf de maître:

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

Comme si j'autorisais toutes les connexions possibles, l'esclave ne peut pas se connecter. Pouvez-vous m'aider?

Sachin Verma
la source

Réponses:

25

Le nom de la base de données doit être replicationas allne couvre pas les connexions de réplication.

host    replication    postgres             127.0.0.1/0               trust

La documentation PostgreSQL dit en outre:

La valeur replicationspécifie que l'enregistrement correspond si une connexion de réplication est demandée (notez que les connexions de réplication ne spécifient aucune base de données particulière). Sinon, c'est le nom d'une base de données PostgreSQL spécifique. Plusieurs noms de base de données peuvent être fournis en les séparant par des virgules. Un fichier séparé contenant des noms de base de données peut être spécifié en précédant le nom de fichier avec @.

Sachin Verma
la source
avons-nous besoin de créer une base de données de réplication? ou est-ce intégré?
gimibarak
Ce n'est pas intégré et vous devez configurer la réplication. Voici la référence: digitalocean.com/community/tutorials/…
Sachin Verma
Notez que ce n'est pas le cas pour la réplication logique.
mlissner
3

L'ajout de la ligne ci-dessous pg_hba.confet le rechargement ont fonctionné pour moi. Étant donné que le type est «local», il n'est pas nécessaire de spécifier explicitement une adresse.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

Et n'oubliez pas de pg_ctl reload

Rogerlr
la source
2

Une autre solution possible ici que j'ai rencontrée. Si vous effectuez une réplication logique et que la BASE DE DONNÉES est définie sur la réplication, cela ne fonctionnera pas. Il doit juste obtenir un paramètre régulier. Le replicationparamètre concerne la réplication physique, pas la réplication logique.

Mec, celui-là a pris un peu de travail pour comprendre. J'espère que ça aide!

mlissner
la source
1
Cela doit être davantage voté. J'ai passé des heures à dépanner le plugin wal2json jusqu'à ce que je trouve cela et c'était la bonne réponse pour moi. Il semble que le plugin wal2json utilise la réplication logique, donc pour que leur exemple de commande pg_recvlogical fonctionne, je devais définir le pg_hba.conf pour utiliser le nom de la base de données 'test' au lieu du mot clé 'replication'
Alf47