Postgresql не принимает репликационное соединение


19

Обычная старая потоковая репликация. PostgreSQL: 9.2.7 Windows 8.1 64 бит

Мой основной и дополнительный кластеры находятся на одной машине Windows. Я уже сделал pg_start_backup () и все, поэтому оба узла имеют точно такие же данные.

Теперь проблема с репликацией заключается в том, что «подключение репликации» от подчиненного сервера не подключается к основному серверу, но я могу подключиться с использованием тех же параметров, используя оболочку psql. Я думаю, что виновником является строка подключения в recovery.conf ведомого:

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

Я пробовал localhost, 0.0.0.0, LAN IP все, но журнал pg говорит:

 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

Теперь посмотрите на моего Мастера 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

Как будто я разрешил все возможные соединения, но ведомый не может подключиться. Можете ли вы помочь?

Ответы:


25

Имя базы данных должно быть, replicationпоскольку allне распространяется на репликационные соединения.

host    replication    postgres             127.0.0.1/0               trust

Документация PostgreSQL далее гласит:

Значение replicationуказывает, что запись соответствует, если запрашивается подключение репликации (обратите внимание, что подключения репликации не указывают какую-либо конкретную базу данных). В противном случае это имя конкретной базы данных PostgreSQL. Несколько имен базы данных могут быть предоставлены, разделяя их запятыми. Отдельный файл, содержащий имена баз данных, можно указать, поставив перед именем файла символ @.


нам нужно создать базу данных репликации? или это встроенный ??
Гимибарак

Он не встроен, и вы должны настроить репликацию. Вот ссылка: digitalocean.com/community/tutorials/…
Сачин Верма

Обратите внимание, что это не относится к логической репликации.
mlissner

3

Добавление строки ниже pg_hba.confи перезагрузка работали для меня. Учитывая, что тип является «локальным», указывать адрес явно не нужно.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

И не забудьте pg_ctl reload


2

Еще одно возможное решение, с которым я столкнулся. Если вы выполняете логическую репликацию и для DATABASE задана репликация, она не будет работать. Нужно просто получить обычный параметр. replicationПараметр для физической репликации, а не логическая репликации.

Чувак, ему понадобилась работа, чтобы понять. Надеюсь, это поможет!


1
За это нужно больше голосовать. Я потратил часы на устранение неисправностей плагина wal2json, пока не нашел это, и это был правильный ответ для меня. Похоже, что плагин wal2json использует логическую репликацию, поэтому, чтобы заставить работать их примерную команду pg_recvlogical, мне нужно было настроить pg_hba.conf на использование имени базы данных «test» вместо ключевого слова «replication»
Alf47
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.