O Postgresql não aceita conexão de replicação


19

Replicação simples de streaming antigo. PostgreSQL: 9.2.7 Windows 8.1 de 64 bits

Meus clusters primário e secundário estão na mesma máquina Windows. Eu já fiz pg_start_backup () e tudo, então os dois nós têm exatamente os mesmos dados.

Agora, o problema com a replicação é "conexão de replicação" do servidor escravo, não conecte ao servidor primário, mas eu posso conectar usando os mesmos parâmetros usando o shell psql. O que eu acho culpado é a cadeia de conexão no recovery.conf do escravo:

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

Eu tentei localhost, 0.0.0.0, lan IP tudo, mas pg log diz:

 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

Agora veja o pg_hba.conf do meu mestre:

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

É como se eu permitisse todas as conexões possíveis, mas o escravo não pode se conectar. Você pode fazer alguma ajuda?

Respostas:


25

O nome do banco de dados deve ser replicationo allque não abrange as conexões de replicação.

host    replication    postgres             127.0.0.1/0               trust

A documentação do PostgreSQL diz ainda:

O valor replicationespecifica que o registro corresponde se uma conexão de replicação for solicitada (observe que as conexões de replicação não especificam nenhum banco de dados específico). Caso contrário, este é o nome de um banco de dados PostgreSQL específico. Vários nomes de banco de dados podem ser fornecidos, separando-os com vírgulas. Um arquivo separado contendo nomes de banco de dados pode ser especificado precedendo o nome do arquivo com @.


precisamos criar um banco de dados de replicação? ou é embutido?
gimibarak

Não é embutido e você precisa configurar a replicação. Aqui está a referência: digitalocean.com/community/tutorials/…
Sachin Verma

Observe que esse não é o caso da replicação lógica.
mlissner 24/04

3

Adicionar a linha abaixo pg_hba.confe recarregar funcionou para mim. Considerando que o tipo é 'local', não é necessário especificar explicitamente um endereço.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

E lembre-se de pg_ctl reload


2

Outra solução possível aqui que encontrei. Se você estiver fazendo replicação lógica e tiver o DATABASE definido como replicação, ele não funcionará. Ele precisa apenas obter um parâmetro regular. O replicationparâmetro é para replicação física, não replicação lógica.

Cara, esse levou algum trabalho para descobrir. Eu espero que isso ajude!


11
Isso precisa ser mais votado. Passei horas solucionando problemas do plug-in wal2json até encontrar esse e essa foi a resposta certa para mim. Parece que o plugin wal2json usa replicação lógica, portanto, para que o comando pg_recvlogical de exemplo funcione, eu precisava definir o pg_hba.conf para usar o nome do banco de dados 'test' em vez da palavra-chave 'replication'
Alf47
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.