Вопрос или проблема
Я пытаюсь создать весеннее приложение, которое подключается к базе данных postgresql. Приложение работает нормально при прямом подключении к базе данных, но когда я пытаюсь подключиться к ней через pgbouncer, аутентификация по умолчанию не удается. Я хочу подключиться к pgbouncer для целей балансировки нагрузки.
Пока что всё работает на localhost. Мое приложение пытается подключиться к pgbouncer, но я получаю следующую ошибку:
LOG C-0x5583ca3d3490: (nodb)/(nouser)@127.0.0.1:39042 такого пользователя не существует: postgres
LOG C-0x5583ca3d3490: (nodb)/[email protected]:39042 попытка входа: db=Test69 user=postgres tls=no
LOG C-0x5583ca3d3490: (nodb)/[email protected]:39042 закрытие из-за: “доверительная” аутентификация не удалась (время=0с)
WARNING C-0x5583ca3d3490: (nodb)/[email protected]:39042 ошибка пула: “доверительная” аутентификация не удалась
Насколько я понимаю, доверительная аутентификация должна просто позволять любому подключаться, но по какой-то причине это не удается
Ответ или решение
Ошибка аутентификации "trust" в PgBouncer может возникнуть по нескольким причинам. В вашем случае, судя по приведенному лог-файлу, проблема в том, что пользователь "postgres" не распознается при попытке подключения через PgBouncer, хотя соединение напрямую с PostgreSQL проходит успешно.
1. Проверьте настройки PgBouncer
Первым делом необходимо убедиться в корректности конфигурации PgBouncer. Проверьте файл конфигурации pgbouncer.ini
на наличие правильных параметров для аутентификации и пользователя, с которым вы пытаетесь подключиться:
[databases]
Test69 = host=127.0.0.1 dbname=Test69 user=postgres
[pgbouncer]
auth_type = trust
Параметр auth_type
следует установить в значение trust
, чтобы разрешить подключения без аутентификации, но нужно убедиться, что все остальные настройки также правильные.
2. Проверка пользователей в PostgreSQL
Необходимо проверить, существует ли пользователь "postgres" в вашей базе данных PostgreSQL. Это можно сделать, подключившись к PostgreSQL напрямую и выполнив следующий SQL-запрос:
SELECT usename FROM pg_catalog.pg_user;
Если пользователь "postgres" отсутствует в списке, вам потребуется создать его, используя следующее:
CREATE USER postgres WITH PASSWORD 'your_password';
3. Конфигурация pg_hba.conf
Другой ключевой файл — это pg_hba.conf
, который управляет доступом к вашей базе данных. Убедитесь, что маппинг для вашего пользователя "postgres" настроен правильно, и он допускает trust
для соединений от PgBouncer. Пример записи, который можно добавить:
# TYPE DATABASE USER ADDRESS METHOD
host Test69 postgres 127.0.0.1/32 trust
После внесения изменений в pg_hba.conf
, не забудьте перезагрузить службу PostgreSQL, чтобы изменения вступили в силу.
4. Проверьте конфигурацию PgBouncer
Убедитесь, что PgBouncer корректно запущен и использует актуальные параметры. Запустите PgBouncer с ключом -d
для детальной отладки, чтобы убедиться, что он запускается с правильными настройками и загружает нужный файл конфигурации.
5. Проверка логов
Логи PgBouncer могут дать ценную информацию. Просмотрите их на наличие ошибок, связанных с аутентификацией или загрузкой конфигурационных файлов. Это может привести вас к корню проблемы.
6. Убедитесь, что ваше приложение правильно настроено
Проверьте, что в вашей Spring-приложении или в конфигурации подключения к базе данных указаны правильные параметры для подключения через PgBouncer. Например, строка подключения должна выглядеть следующим образом:
spring.datasource.url=jdbc:postgresql://127.0.0.1:6432/Test69
spring.datasource.username=postgres
spring.datasource.password=your_password
Заключение
Таким образом, основными шагами в решении проблемы аутентификации "trust" в PgBouncer являются: проверка правильности конфигураций PgBouncer и PostgreSQL, наличие пользователя в базе данных, корректная настройка файла pg_hba.conf
, а также правильная конфигурация в вашем приложении. Следуя этим пунктам, вы сможете устранить проблему с аутентификацией и успешно подключиться через PgBouncer для балансировки нагрузки.