Postgresql не приймає з'єднання реплікації


19

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

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

Тепер проблема з реплікацією полягає в "з'єднанні реплікації" з підлеглого сервера, не підключаються до основного сервера, але я можу підключитися, використовуючи ті ж парами, використовуючи оболонку psql. Я вважаю винуватцем рядок з'єднання у відновленнях підлеглого .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. Кілька імен бази даних можна надати, розділивши їх комами. Окремий файл, що містить імена бази даних, можна вказати, передуючи імені файлу з @.


чи потрібно нам створити базу даних реплікацій? чи це вбудований ??
gimibarak

Він не вбудований, і вам доведеться налаштувати реплікацію. Ось посилання: digitalocean.com/community/tutorials/…
Sachin Verma

Зауважте, що це не стосується логічної реплікації.
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' замість ключового слова 'реплікація'
Alf47
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.