Postgresql no acepta la conexión de replicación


19

Replicación de transmisión simple y antigua. PostgreSQL: 9.2.7 Windows 8.1 64 bit

Mis grupos principales y secundarios están en la misma máquina de Windows. Ya he hecho pg_start_backup () y todo, por lo que ambos nodos tienen exactamente los mismos datos.

Ahora el problema con la replicación es la "conexión de replicación" del servidor esclavo, no se conecta al servidor primario, pero puedo conectarme usando los mismos parámetros usando el shell psql. Lo que creo que es el culpable es la cadena de conexión en esclavo recovery.conf:

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

Intenté localhost, 0.0.0.0, lan IP todo, pero el registro de pg dice:

 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

Ahora mira el pg_hba.conf de mi maestro:

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 como si permitiera todas las conexiones posibles, pero el esclavo no puede conectarse. ¿Puedes hacer alguna ayuda?

Respuestas:


25

El nombre de la base de datos debe ser replicationcomo allno cubre las conexiones de replicación.

host    replication    postgres             127.0.0.1/0               trust

La documentación de PostgreSQL dice además:

El valor replicationespecifica que el registro coincide si se solicita una conexión de replicación (tenga en cuenta que las conexiones de replicación no especifican ninguna base de datos en particular). De lo contrario, este es el nombre de una base de datos PostgreSQL específica. Se pueden proporcionar varios nombres de bases de datos separándolos con comas. Se puede especificar un archivo separado que contenga nombres de bases de datos precediendo el nombre del archivo con @.


¿Necesitamos crear una base de datos de replicación? ¿o está incorporado?
gimibarak

No está incorporado y debe configurar la replicación. Aquí está la referencia: digitalocean.com/community/tutorials/…
Sachin Verma

Tenga en cuenta que este no es el caso de la replicación lógica.
mlissner

3

Agregar la línea a continuación pg_hba.confy volver a cargar funcionó para mí. Teniendo en cuenta que el tipo es 'local', no es necesario especificar explícitamente una dirección.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

Y recuerda a pg_ctl reload


2

Otra posible solución aquí con la que me encontré. Si está realizando una replicación lógica y tiene la BASE DE DATOS configurada para replicación, no funcionará. Solo necesita obtener un parámetro regular. El replicationparámetro es para la replicación física, no para la replicación lógica.

Hombre, ese tomó un poco de trabajo para darse cuenta. ¡Espero que esto ayude!


1
Esto necesita ser votado más. Pasé horas resolviendo problemas con el complemento wal2json hasta que encontré esto y esta fue la respuesta correcta para mí. Parece que el complemento wal2json usa la replicación lógica, por lo que para que su comando pg_recvlogical de ejemplo funcione, necesitaba configurar pg_hba.conf para usar el nombre de la base de datos 'prueba' en lugar de la palabra clave 'replicación'
Alf47
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.