Postgresql non accetta la connessione di replica


19

Semplice replica in streaming vecchio. PostgreSQL: 9.2.7 Windows 8.1 a 64 bit

I miei cluster primari e secondari si trovano sullo stesso computer Windows. Ho già fatto pg_start_backup () e tutto il resto, quindi entrambi i nodi hanno gli stessi dati.

Ora il problema con la replica è "connessione di replica" dal server slave non connettersi al server primario ma posso collegarmi usando gli stessi parametri usando la shell psql. Quello che penso colpevole è la stringa di connessione in recovery.conf dello slave:

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

Ho provato localhost, 0.0.0.0, lan IP tutto ma pg log 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

Ora guarda il mio master pg_hba.conf:

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

È come se avessi permesso ogni possibile connessione, ma lo slave non può connettersi. Puoi fare qualche aiuto?

Risposte:


25

Il nome del database deve essere replicationpoiché allnon copre le connessioni di replica.

host    replication    postgres             127.0.0.1/0               trust

La documentazione di PostgreSQL dice inoltre:

Il valore replicationspecifica che il record corrisponde se viene richiesta una connessione di replica (tenere presente che le connessioni di replica non specificano alcun database specifico). Altrimenti, questo è il nome di un database PostgreSQL specifico. È possibile fornire più nomi di database separandoli con virgole. È possibile specificare un file separato contenente i nomi del database precedendo il nome del file con @.


dobbiamo creare un database di replica? o è integrato ??
Gimibarak,

Non è integrato e devi configurare la replica. Ecco il riferimento: digitalocean.com/community/tutorials/…
Sachin Verma

Si noti che questo non è il caso della replica logica.
mlissner,

3

L'aggiunta della riga seguente pg_hba.confe il ricaricamento hanno funzionato per me. Considerando che il tipo è "locale", non è necessario specificare esplicitamente un indirizzo.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

E ricorda di pg_ctl reload


2

Un'altra possibile soluzione qui in cui mi sono imbattuto. Se si esegue la replica logica e DATABASE è impostato sulla replica, non funzionerà. Deve solo ottenere un parametro regolare. Il replicationparametro è per la replica fisica, non per la replica logica.

Amico, quello ha impiegato un po 'di lavoro per capire. Spero che questo possa essere d'aiuto!


1
Questo deve essere votato di più. Ho passato ore a risolvere i problemi del plugin wal2json fino a quando non l'ho trovato e questa è stata la risposta giusta per me. Sembra che il plugin wal2json usi la replica logica, quindi per far funzionare il loro esempio di comando pg_recvlogical ho dovuto impostare pg_hba.conf in modo da usare il nome del database 'test' invece della parola chiave 'replication'
Alf47
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.