Réplication en streaming ancienne et simple. PostgreSQL: 9.2.7 Windows 8.1 64 bits
Mes clusters primaires et secondaires sont sur 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 en utilisant psql Shell. Je pense que le coupable est la chaîne de connexion dans le fichier 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?
Le nom de la base de données doit être replication
car all
ne couvre pas les connexions de réplication.
Host replication postgres 127.0.0.1/0 trust
La documentation PostgreSQL dit en outre:
La valeur
replication
spé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 par@
.
Ajout de la ligne ci-dessous à pg_hba.conf
et 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
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 paramètre replication
est destiné à la réplication physique et non à la réplication logique.
Mec, celui-là a pris un peu de travail pour comprendre. J'espère que ça aide!