Я пытаюсь настроить балансировщик нагрузки pgpool для кластера потоковой репликации Postgresql.
Я использую postgresql-12 и pgpool2-4.1.0 из репозитория Postgresql https://apt.postgresql.org/pub/repos/apt/ в Debian 10.2 (последняя стабильная версия).
Я настроил кластер Postgresql с потоковой репликацией с использованием физических слотов (не доставки WAL), и все, похоже, работает правильно. Вторичные реплики подключают реплицируемые данные без каких-либо проблем.
Затем я установил pgpool2-4.1.0 на те же сервера. Я внес соответствующие изменения в pgpool.conf в соответствии с wiki pgpool и включил сторожевой таймер.
Когда я запускаю pgpool, на всех трех узлах я вижу, что сторожевой таймер работает правильно, кворум существует, и pgpool выбирает мастер (узел pgpool), который также включает виртуальный IP-адрес из конфигурации.
Я могу подключиться к бэкэнду postgres через pgpool и успешно выполнить команды чтения и записи.
Проблема появляется в журналах pgpool, из системного журнала я получаю:
Jan 13 15:10:30 debian10 pgpool[9826]: 2020-01-13 15:10:30: pid 9870: LOG: failed to connect to PostgreSQL server on "pg1:5433", getsockopt() detected error "Connection refused"
Jan 13 15:10:30 debian10 pgpool[9826]: 2020-01-13 15:10:30: pid 9870: LOCATION: pool_connection_pool.c:680
При проверке упомянутого выше PID я получаю процесс проверки работоспособности pgpool. I pg1, pg2, pg3 - это серверы баз данных, которые прослушивают все адреса на порте 5433, pg1 - первичный. pgpool слушает 5432.
Пользователь базы данных, который используется для проверки работоспособности, - «pgpool», я подтвердил, что могу подключиться к базе данных с помощью этого пользователя со всех хостов в конкретной подсети.
Когда я отключаю проверку работоспособности, проблема исчезает, но цель побеждает. Любые идеи?