Перейти к основному содержимому

Настройка

Конфигурирование Pangolin Pooler

Компонент Pangolin Pooler имеет основной конфигурационный файл – pangolin-pooler.ini (путь /etc/pangolin-pooler/).

Редактирование конфигурационных параметров происходит с помощью текстового редактора. Также требуется назначение прав на конфигурационный файл:

sudo chown postgres:postgres /etc/pangolin-pooler/pangolin-pooler.ini
sudo chmod 0600 /etc/pangolin-pooler/pangolin-pooler.ini

У компонента Pangolin Pooler также доступна возможность использования файла аутентификации userlist.txt, который хранит список пользователей и паролей. Подробное описание и процесс конфигурирования userlist.txt представлены в разделе далее.

Для применения изменений конфигурации компонента Pooler необходимо выполнить команду перезагрузки конфигурации:

  • через системную команду:

    sudo systemctl reload pangolin-pooler

    или

    systemctrl --user reload pangolin-pooler
  • через команду управления RELOAD в административной БД pgbouncer:

    $ psql -p 6544 pgbouncer

    pgbouncer=# RELOAD;

Конфигурационные параметры

В разделе приведено описание параметров и разделов конфигурационного файла pangolin-pooler.ini компонента Pangolin Pooler.

Подсказка

Конфигурационный файл имеет формат .ini. Имена разделов находятся между [ и ]. Строки, начинающиеся с ; или #, воспринимаются как комментарии и игнорируются.

Общие настройки

В таблице ниже приведены общие настройки, которые определяются в разделе [pgbouncer] конфигурационного файла.

Параметр

Описание

Значение по умолчанию

logfile

Указывает имя файла журнала. Для работы в фоновом режиме (-d) необходимо указать либо этот параметр, либо syslog.

Внимание!

Установка logfile сама по себе не отключает ведение журнала в stderr. Для этого используйте опцию командной строки -q или -d.

/pangolinlogs/pangolin-pooler/pangolin-pooler.log

pidfile

Указывает PID-файл. Если pidfile не задан, работа в фоновом режиме (-d) не разрешена

/var/run/user/{user_id}/pangolin-pooler/pangolin-pooler.pid

listen_addr

Указывает список адресов (разделенных запятыми), по которым следует прослушивать TCP-соединения. Можно также использовать *, что означает «слушать все адреса». Если значение не задано, принимаются только соединения с сокетами Unix. Адреса могут быть указаны численно (IPv4/IPv6) или по имени

localhost

listen_port

Определяет, какой порт прослушивать. Применяется как к TCP, так и к Unix-сокетам

6544

unix_socket_dir

Определяет местоположение для сокетов Unix. Применяется как к прослушивающему сокету, так и к соединениям с сервером. Если задана пустая строка, сокеты Unix отключены. Значение, начинающееся с @, указывает, что должен быть создан сокет Unix в абстрактном пространстве имен.

Чтобы перезагрузка в режиме онлайн (-R) работала, необходимо сконфигурировать сокет Unix, который должен находиться в пространстве имен файловой системы

/tmp

unix_socket_mode

Режим файловой системы для сокета Unix. Игнорируется для сокетов в абстрактном пространстве имен

0777

unix_socket_group

Имя группы, используемое для сокетов Unix. Игнорируется для сокетов в абстрактном пространстве имен

Не задано

user

Если установлено, указывает пользователя Unix, на которого следует перейти после запуска. Работает, только если Pooler запущен от имени root или если он уже запущен от имени указанного пользователя

Не задано

pool_mode

Определяет, когда соединение с сервером может быть повторно использовано другими клиентами:

  • session – соединение возвращается в пул после отключения клиента;
  • transaction – соединение возвращается в пул после завершения транзакции;
  • statement – соединение освобождается обратно в пул после завершения запроса. Транзакции, охватывающие несколько операторов, в этом режиме запрещены

session

max_client_conn

Максимальное количество разрешенных клиентских соединений

100

default_pool_size

Разрешенное количество соединений с сервером для пары пользователь/база данных. Может быть переопределено в конфигурации для каждой базы данных

20

min_pool_size

Минимальное количество активных соединений с сервером.

Автоматически добавляет серверные соединения в пул, если их число становится меньше указанного. Это улучшает поведение при возвращении нагрузки после периода бездействия. Значение эффективно ограничивается размером пула.

0 (отключено)

reserve_pool_size

Сколько дополнительных подключений разрешить к пулу (см. reserve_pool_timeout)

0 (отключено)

reserve_pool_timeout

Время, за которое должен быть обслужен клиент. После указанного времени будут использованы дополнительные соединения из резервного пула. Значение 0 – отключает

5.0 (секунды)

max_db_connections

Разрешенное количество соединений с сервером для каждой базы данных (независимо от пользователя). При этом учитывается база данных pgbouncer, к которой подключился клиент, а не база данных СУБД исходящего соединения.

Этот параметр также можно задать для каждой базы данных в разделе [databases]

0 (неограниченно)

max_user_connections

Разрешенное количество подключений к серверу для одного пользователя (независимо от базы данных). При этом учитывается пользователь, связанный с пулом, который является либо пользователем, указанным для подключения к серверу, либо, при отсутствии такового, пользователем, под которым подключился клиент.

Этот параметр также можно задать для каждого пользователя в разделе [users]

0 (неограниченно)

max_user_client_connections

Разрешенное количество клиентских подключений на одного пользователя (независимо от базы данных). Это значение должно быть больше, чем max_user_connections. Разница между max_user_connections и max_user_client_connections может рассматриваться как максимальный размер очереди для пользователя.

Этот параметр также можно установить для каждого пользователя в разделе [users]

0 (неограниченно)

server_round_robin

По умолчанию Pooler использует соединения с сервером по принципу LIFO (last-in, first-out), так что наибольшая нагрузка распределяется по небольшому количеству соединений. Это обеспечивает наилучшую производительность, если есть только один сервер, обслуживающий базу данных. Но если за адресом базы данных стоит система round-robin (TCP, DNS или список хостов), то будет лучше, если Pangolin Pooler также будет использовать соединения по такому принципу, добиваясь равномерной нагрузки

0

track_extra_parameters

По умолчанию Pangolin Pooler отслеживает параметры client_encoding, datestyle, timezone, standard_conforming_strings и application_name для каждого клиента. Для отслеживания других параметров, их можно указать здесь, чтобы Pooler знал, что они должны сохраняться в кеше клиентских переменных и восстанавливаться на сервере всякий раз, когда клиент становится активным.

Если нужно указать несколько значений, используется список, разделенный запятыми (например, default_transaction_readonly, IntervalStyle)

IntervalStyle

ignore_startup_parameters

По умолчанию Pooler разрешает использовать в стартовых пакетах только те параметры, которые он может отслеживать: client_encoding, datestyle, timezone и standard_conforming_strings. Все остальные параметры приведут к ошибке. Чтобы разрешить другие параметры, их можно указать в ignore_startup_parameters, чтобы Pooler знал, что они обрабатываются администратором, и мог их игнорировать.

Если нужно указать несколько значений, используется список, разделенный запятыми (например: options, extra_float_digits)

extra_float_digits

peer_id

Идентификатор пира, используемый для идентификации данного процесса pangolin-pooler в группе запущенных вместе процессов. Значение peer_id должно быть уникальным в группе запущенных вместе процессов pangolin-pooler. При значении 0 пиринг Pooler отключен.

Максимальное значение, которое может быть использовано для peer_id - 16383

0

disable_pqexec

Отключение протокола Simple Query (PQexec). В отличие от протокола Extended Query, Simple Query допускает несколько запросов в одном пакете, что позволяет осуществлять некоторые классы атак с использованием «SQL-инъекций». Его отключение может повысить безопасность, потому что работать будут только те клиенты, которые используют исключительно протокол Extended Query

0

application_name_add_host

Добавление адреса хоста и порта клиента в настройку имени приложения, устанавливаемую при запуске соединения. Помогает определить источник неправильных запросов. Эта логика применяется только при запуске соединения. Если application_name позже будет изменено с помощью SET, Pooler не будет изменять его снова

0

conffile

Показывает расположение текущего файла конфигурации. Изменение этого параметра заставит Pangolin Pooler использовать другой файл конфигурации для следующего RELOAD/SIGHUP

Файл из командной строки

stats_period

Устанавливает, как часто обновляются средние значения, отображаемые в различных командах SHOW, и как часто агрегированная статистика записывается в журнал (см. log_stats)

60 (в секундах)

max_prepared_statements

Количество подготовленных запросов, поддерживаемых активными на одном серверном соединении. Если значение параметра равно 0, поддержка подготовленных запросов для транзакций и пула запросов отключена. Чтобы добиться максимальной производительности, необходимо, чтобы этот параметр был больше, чем количество часто используемых подготовленных запросов в приложении.

Более подробное описание параметра представлено в исходной документации ядра компонента PgBouncer.

Рекомендуется ознакомиться с разделом «Поддержка подготовленных запросов»

0

ndc_suspending_timeout

Содержит значение момента времени старта приложения или получения последней команды NDC_KEEPALIVE. Это значение в основном цикле обработки событий сравнивается с текущим моментом времени и, если разница превышает заданное в конфигурационном файле значение ndc_suspending_timeout, то Pooler прерывает все существующие соединения к базам данных и все клиентские соединения, кроме соединений с административной консолью, и переходит в режим NDC_DISALLOWED (поведение аналогичное получению команды NDC_SUSPEND).

Если в конфигурационном файле не указано значение ndc_suspending_timeout, или оно равно нулю, то проверка на необходимость прервать прием и обработку клиентских соединений не выполняется.

Если примененное значение заменено на значение по умолчанию (0), то возобновляется прием и обработка клиентских соединений.

Если значение по умолчанию заменено на другое, то сохраняется момент времени смены параметра и начинается проверка необходимости автоматического переключения в режим приостановки приема и обслуживания клиентских соединений.

Рекомендуется ознакомиться с разделом «Поддержка топологии N-ЦОД в Pangolin Pooler»

0 (секунды)

Настройки аутентификации

Pangolin Pooler самостоятельно обрабатывает аутентификацию клиентов и имеет собственную базу данных пользователей. В таблице ниже приведены параметры, отвечающие за настройки аутентификации.

Параметр

Описание

Значение по умолчанию

auth_type

Как аутентифицировать пользователей:

  • cert – клиент должен подключиться по TLS-соединению с действительным сертификатом клиента. Имя пользователя берется из поля CommonName сертификата.
  • md5 – использовать проверку паролей на основе MD5. Это метод аутентификации по умолчанию. auth_file может содержать как MD5-зашифрованные, так и обычные пароли. Если настроен md5, а у пользователя есть SCRAM-секрет, то вместо него автоматически используется SCRAM-аутентификация.
  • scram-sha-256 – использовать проверку паролей с помощью SCRAM-SHA-256. auth_file должен содержать секреты SCRAM или пароли в открытом виде.
  • plain – пароль передается в открытом виде. Метод более не актуален.
  • trust – аутентификация не выполняется. Имя пользователя должно существовать в auth_file.
  • any – аналогичен методу trust, но указанное имя пользователя игнорируется. Требуется, чтобы все базы данных были настроены на вход под определенным пользователем. Кроме того, консольная база данных позволяет любому пользователю входить в систему под именем администратора.
  • hba – фактический тип аутентификации загружается из файла auth_hba_file. Это позволяет использовать различные методы аутентификации для разных путей доступа, например: соединения через Unix сокет используют метод peer, соединения через TCP должны использовать TLS.
  • pam – для аутентификации пользователей используется PAM, auth_file игнорируется. Этот метод несовместим с базами данных, использующими параметр auth_user. Имя службы, передаваемое в PAM - pangolin-pooler. pam не поддерживается в файле конфигурации HBA.

md5

auth_hba_file

Файл конфигурации HBA для использования, когда параметр auth_type установлен в hba

Не задано

auth_ident_file

Файл карты идентификаторов для использования, когда параметр auth_type установлен в hba и будет определена карта пользователей

Не задано

auth_file

Имя файла, из которого будут загружаться имена пользователей и пароли. Подробнее описано в подразделе «Файл аутентификации» далее

Большинство типов аутентификации требуют, чтобы были заданы либо auth_file, либо auth_user; в противном случае пользователи не будут определены

/etc/pangolin-pooler/userlist.txt

auth_user

Если задан auth_user, то любой пользователь, не указанный в auth_file, будет запрашиваться через запрос auth_query из pg_authid в базе данных, используя auth_user. Пароль auth_user будет взят из auth_file. Если auth_user не требует пароля, то его не нужно определять в auth_file.

Прямой доступ к pg_authid требует прав администратора. Предпочтительнее использовать не суперпользователя, который вместо этого вызывает функцию SECURITY DEFINER

Не задано

auth_query

Запрос для загрузки пароля пользователя из базы данных.

Прямой доступ к pg_authid требует прав администратора. Предпочтительнее использовать не суперпользователя, который вместо этого вызывает функцию SECURITY DEFINER

Внимание!

Запрос выполняется внутри целевой базы данных. Поэтому, если используется функция, ее необходимо установить в каждую базу данных.

SELECT rolname, CASE WHEN rolvaliduntil < pg_catalog.now() THEN NULL ELSE rolpassword END FROM pg_authid WHERE rolname=$1 AND rolcanlogin

auth_dbname

Имя базы данных в разделе [database] для использования в целях аутентификации. Этот параметр может быть как глобальным, так и переопределенным в строке подключения, если он указан

Не задано

Сквозная аутентификация

В данном разделе представлены параметры для настройки механизма сквозной аутентификации.

Параметр

Описание

Значение по умолчанию

auth_proxy

Регулирует активацию режима сквозной аутентификации

off

auth_failure_threshold

Задает максимальное число не аутентифицированного N раз подряд клиента с идентичными параметрами (тип соединения, адрес клиента, база данных и имя пользователя), при котором будет взведен таймер не активности аутентификации для этого клиента

0 (выключено)

auth_inactivity_period

Определяет время, в течение которого ранее не аутентифицированному более N раз подряд клиенту при подключении с идентичными параметрами (тип соединения, адрес клиента, база данных и имя пользователя), Pangolin Pooler откажет в обслуживании

0 (в секундах)

auth_last_size

Задает максимальное число кешируемых записей о последних аутентификациях пользователей.

Информацию о последних аутентификациях пользователей можно получить с помощью команды SHOW LAST

10

log_audit

Включает или выключает аудит

off

Настройки журнала

В таблице ниже приведены конфигурационные параметры, отвечающие за настройку журнала.

Параметр

Описание

Значение по умолчанию

syslog

Включение и выключение syslog

0

syslog_ident

Под каким именем отправлять журналы в syslog

pangolin-pooler

syslog_facility

Под каким объектом отправлять журналы в syslog.

Возможные варианты: auth, authpriv, daemon, user, local0-7

daemon

log_connections

Вести журнал успешных входов в систему

1

log_disconnections

Вести журнал отключений с указанием причин

1

log_pooler_errors

Вести журнал сообщений об ошибках, которые пулер отправляет клиентам

1

log_stats

Запись агрегированной статистики в журнал, каждый stats_period. Эту функцию можно отключить, если используются внешние инструменты мониторинга для получения тех же данных из команд SHOW

1

verbose

Повысить многословность. Аналогично переключателю -v в командной строке. Например, использование -v -v в командной строке равносильно verbose=2

0

show_period

Вывода результата команды SHOW POOLS в лог-файл компонента Pangolin Pooler (по умолчанию – pangolin-pooler.log).

Подробнее в подразделе «Настройка вывода команды SHOW POOLS в лог Pangolin Pooler»

0

Управление доступом к консоли

В таблице ниже приведены конфигурационные параметры, отвечающие за управление доступом к консоли.

Параметр

Описание

Значение по умолчанию

admin_users

Список пользователей базы данных, которым разрешено подключаться и выполнять все команды в консоли. Разделен запятыми.

Игнорируется, если auth_type имеет значение any, в этом случае любое имя пользователя может быть допущено в качестве администратора

Пусто

stats_users

Список пользователей базы данных (разделен запятыми), которым разрешено подключаться и выполнять запросы в консоли только для чтения, а также все команды SHOW, кроме SHOW FDS

Пусто

Проверки целостности соединений, тайм-ауты

В таблице ниже приведены конфигурационные параметры, отвечающие за проверки целостности соединений и тайм-ауты.

Параметр

Описание

Значение по умолчанию

server_reset_query

Запрос отправляется на сервер при разрыве соединения, прежде чем сделать его доступным для других клиентов. В этот момент ни одна транзакция не выполняется, поэтому значение не должно включать ABORT или ROLLBACK. Когда используется пул транзакций, server_reset_query не используется, потому что в этом режиме клиенты не должны использовать никакие функции, основанные на сеансах, поскольку каждая транзакция завершается в отдельном соединении и, следовательно, получает отдельное состояние сеанса

DISCARD ALL

server_reset_query_always

Определяет, должен ли server_reset_query выполняться во всех режимах пулов. Если этот параметр выключен (по умолчанию), запрос server_reset_query будет выполняться только в пулах, находящихся в режиме session-pooling. Соединения в режиме пула транзакций не должны нуждаться в запросе сброса

0

server_check_delay

Определяет, как долго держать освобожденные соединения доступными для немедленного повторного использования без выполнения server_check_query. Значение 0 означает, что проверка выполняется всегда

30.0

server_check_query

Простой запрос, не требующий никаких действий, для проверки того, имеется ли соединение с сервером. Если строка пустая, то проверка отключена

SELECT 1

server_fast_close

Отключить сервер в режиме пула сессий сразу или после завершения текущей транзакции, если он находится в режиме close_need (установленном с помощью RECONNECT, RELOAD, изменяющего настройки соединения, или изменения DNS), вместо того чтобы ждать окончания сессии. В режиме пула операторов или транзакций это не используется, так как там это поведение используется по умолчанию

0

server_lifetime

Пулер закроет неиспользуемое (не связанное в данный момент ни с одним клиентским соединением) серверное соединение, которое было подключено дольше, чем это значение. Установка значения 0 означает, что соединение будет использовано только один раз, а затем закрыто

3600.0 (секунды)

server_idle_timeout

Если соединение с сервером простаивает больше указанного количества секунд, оно будет закрыто. Значение 0 означает, что тайм-аут отключен

600.0 (секунды)

server_connect_timeout

Если соединение и вход в систему не завершатся за это время, соединение будет закрыто

15.0 (секунды)

server_login_retry

Если вход на сервер не удался из-за сбоя подключения или аутентификации, пулер ждет столько времени, сколько указано в server_login_retry, прежде чем повторить попытку подключения. В течение интервала ожидания, новые клиенты, пытающиеся подключиться к неудачному серверу, сразу получат ошибку без повторной попытки подключения

15.0 (секунды)

client_login_timeout

Если клиент подключается, но не успевает войти в систему за время client_login_timeout, он будет отключен. В основном это необходимо для того, чтобы не допустить остановки SUSPEND и, соответственно, перезапуска в режиме онлайн

60.0 (секунды)

autodb_idle_timeout

Если автоматически созданные (через *) пулы баз данных не использовались в течение autodb_idle_timeout секунд, они освобождаются

3600.0 (секунды)

dns_max_ttl

Продолжительность кеширования DNS-поисков. Фактическое значение DNS TTL игнорируется

15.0 (секунды)

dns_nxdomain_ttl

Как долго могут кешироваться ошибки DNS и поиск DNS NXDOMAIN

15.0 (секунды)

dns_zone_check_period

Период проверки изменения серийного номера зоны.

Pooler может собирать DNS-зоны из имен хостов (все после первой точки), а затем периодически проверять, не изменилась ли последовательность зон. Если он замечает изменения, все имена хостов в этой зоне просматриваются заново. Если IP-адрес какого-либо хоста изменится, его соединения будут аннулированы. Работает только с бэкендом c-ares (опция конфигурации --with-cares)

0.0 (отключено, задается в секундах)

max_client_route_allowed

Определяет максимальное количество переходов состояний клиентских подключений (см. SHOW CLIENTS).

Используется в диагностических целях

1024

resolv_conf

Расположение пользовательского файла resolv.conf. Параметр позволяет указывать пользовательские DNS-серверы и другие параметры разрешения имен независимо от глобальной конфигурации операционной системы.

Разбор файла выполняется библиотекой бэкенда DNS, а не Pangolin Pooler, поэтому подробности о допустимом синтаксисе и директивах смотрите в документации к библиотеке

/etc/pangolin-pooler/resolv.conf

Настройки TLS

В таблице ниже приведены конфигурационные параметры, отвечающие за настройки TLS.

Параметр

Описание

Значение по умолчанию

client_tls_sslmode

По умолчанию TLS-соединения отключены. При включении необходимо также настроить client_tls_key_file и client_tls_cert_file, чтобы задать ключ и сертификат, которые Pooler использует для приема клиентских соединений. Наиболее распространенный формат файла сертификата — pem.

Возможные значения:

  • disable — обычный TCP. Если клиент запрашивает TLS, игнорируется. Установлен по умолчанию;
  • allow — используется, если клиент запрашивает TLS, иначе используется обычный TCP. Если клиент предъявляет сертификат клиента, он не проверяется;
  • prefer — то же, что allow;
  • require — клиент должен использовать TLS. В противном случае клиентское соединение будет отклонено. Если клиент предъявляет сертификат клиента, он не проверяется;
  • verify-ca — сертификат клиента проверяется на валидность;
  • verify-full — то же, что и verify-ca.

disable

client_tls_key_file

Приватный ключ для Pangolin Pooler для приема клиентских соединений

Не задано

client_tls_cert_file

Сертификат для закрытого ключа. Клиенты могут подтвердить его

Не задано

client_tls_ca_file

Файл корневого сертификата для проверки клиентских сертификатов

Не задано

client_tls_protocols

Разрешенные версии протокола TLS. Минимальная версия – 1.2. Допустимые значения: tlsv1.2, tlsv1.3. Сокращения: secure (tlsv1.2, tlsv1.3)

secure

client_tls_ciphers

Разрешенные шифры TLS в синтаксисе OpenSSL. Сокращения:

  • default/secure/fast/normal (все они используют системные настройки OpenSSL по умолчанию);
  • all (включает все шифры, не рекомендуется).

Затронуты только соединения, использующие TLS версии 1.2 и ниже. В настоящее время не существует настройки, контролирующей выбор шифров, используемых соединениями TLS версии 1.3

default

client_tls_ecdhcurve

Имя эллиптической кривой, используемой для обмена ключами ECDH.

Допустимые значения: none (DH отключен), auto (256-битный ECDH), имя кривой

auto

client_tls_dheparams

Тип обмена ключами DHE. Допустимые значения: none (DH отключен), auto (2048-битный DH), legacy (1024-битный DH)

auto

server_tls_sslmode

Режим TLS, используемый для соединений с серверами СУБД. Возможные значения:

  • disable — обычный TCP. TLS даже не запрашивается у сервера;
  • allow — если сервер отклоняет обычную версию, попробовать использовать TLS;
  • prefer — TLS-соединение всегда запрашивается первым у СУБД. В случае отказа соединение будет установлено по классическому TCP. Сертификат сервера не проверяется. Используется по умолчанию;
  • require — соединение должно проходить по протоколу TLS. Если сервер отклоняет его, попытка обычного TCP не предпринимается. Сертификат сервера не проверяется;
  • verify-ca — соединение должно осуществляться по протоколу TLS, а сертификат сервера должен быть действителен в соответствии с файлом server_tls_ca_file. Имя хоста сервера не проверяется на соответствие сертификату;
  • verify-full — соединение должно осуществляться по протоколу TLS, а сертификат сервера должен быть действителен в соответствии с файлом server_tls_ca_file. Имя хоста сервера должно соответствовать информации сертификата.

prefer

server_tls_ca_file

Файл корневого сертификата для проверки сертификатов сервера

Не задано

server_tls_key_file

Закрытый ключ для аутентификации пулера на сервере

Не задано

server_tls_cert_file

Сертификат для закрытого ключа. Сервер может подтвердить его

Не задано

server_tls_protocols

Разрешенные версии протокола TLS.

Допустимые значения: tlsv1.2, tlsv1.3. Сокращения: secure (tlsv1.2, tlsv1.3)

secure

server_tls_ciphers

Разрешенные шифры TLS в синтаксисе OpenSSL. Сокращения:

  • default/secure/fast/normal (все они используют системные настройки OpenSSL по умолчанию);
  • all (включает все шифры, не рекомендуется).

Затронуты только соединения, использующие TLS версии 1.2 и ниже. В настоящее время не существует настройки, контролирующей выбор шифров, используемых соединениями TLS версии 1.3

default

ssl_legacy_provider

Параметр управляет активацией устаревших алгоритмов через подгрузку провайдера Legacy в OpenSSL 3.0.0+ (аналог Engine API в OpenSSL 1.+) при запуске компонента. Это необходимо для обеспечения обратной совместимости с компонентами, использующими OpenSSL 1.+

1

Опасные тайм-ауты

Внимание!

Установка тайм-аутов, указанных в таблице, может привести к непредвиденным ошибкам.

В таблице ниже приведены конфигурационные параметры, отвечающие за установку тайм-аутов.

Параметр

Описание

Значение по умолчанию

query_timeout

Запросы, выполняющиеся дольше этого времени, отменяются. Следует использовать только при немного меньшем размере серверной части statement_timeout, чтобы применять только для сетевых проблем

0.0 (отключено, задается в секундах)

query_wait_timeout

Максимальное время, которое запросы могут провести в ожидании выполнения. Если за это время запрос не будет назначен серверу, клиент отключается. Значение 0 отключает параметр, что означает для клиентов неограниченное время ожидания в очереди.

Настройка используется для предотвращения захвата соединений невосприимчивыми серверами, помогает, когда сервер не работает или отклоняет соединения по какой-либо причине

120.0 (секунды)

cancel_wait_timeout

Максимальное время, которое запросы на отмену могут провести в ожидании выполнения. Если за это время запрос на отмену не будет назначен серверу, клиент отключается. В случае значения параметра '0' запросы на отмену будут ставиться в очередь бесконечно.

Эта настройка используется для предотвращения блокировки клиента, когда отмена не может быть переслана из-за нерабочего состояния сервера.

10.0 (секунды)

client_idle_timeout

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

0.0 (отключено, задается в секундах)

idle_transaction_timeout

Если клиент находится в состоянии «простоя в транзакции» дольше чем это значение, он будет отключен

0.0 (отключено, задается в секундах)

suspend_timeout

Сколько времени ждать очистки буфера при SUSPEND или перезагрузке (-R). Соединение будет разорвано, если очистка не удалась

10 (секунды)

Низкоуровневые сетевые настройки

В таблице ниже приведены конфигурационные параметры, отвечающие за низкоуровневые сетевые настройки.

Параметр

Описание

Значение по умолчанию

pkt_buf

Размер внутреннего буфера для пакетов. Влияет на размер отправляемых TCP-пакетов и общее использование памяти. Фактические пакеты libpq могут быть больше этого размера, поэтому нет необходимости устанавливать его большим

4096

max_packet_size

Максимальный размер пакетов СУБД, которые пропускает Pooler. Один пакет — это либо один запрос, либо одна строка набора результатов. Полный набор результатов может быть больше

2147483647 (не ограничено)

listen_backlog

Аргумент backlog для listen(2). Определяет, сколько новых попыток соединения, не получивших ответа, будет храниться в очереди. Когда очередь переполнена, новые соединения отбрасываются

128

sbuf_loopcnt

Сколько раз нужно обработать данные на одном соединении, прежде чем продолжить работу. Без этого ограничения одно соединение с большим набором результатов может надолго замедлить Pangolin Pooler. Один цикл обрабатывает один pkt_buf данных. Значение 0 означает отсутствие ограничения

5

so_reuseport

Указывает, устанавливать ли параметр сокета SO_REUSEPORT для сокетов, прослушивающих TCP. В некоторых операционных системах это позволяет запустить несколько экземпляров пулера на одном хосте, прослушивающих один и тот же порт, и заставить ядро автоматически распределять соединения. Эта опция — способ заставить Pangolin Pooler использовать больше ядер процессора (Pooler является однопоточным и использует одно ядро процессора на экземпляр)

0

tcp_defer_accept

Устанавливает опцию сокета TCP_DEFER_ACCEPT. Это булева опция: 1 означает включено. Фактическое значение, установленное при включении, в настоящее время закодировано строго на 45 секунд

1

tcp_socket_buffer

Не задано

tcp_keepalive

Включает базовый keepalive с настройками ОС по умолчанию

1

tcp_keepcnt

Не задано

tcp_keepidle

Не задано

tcp_keepintvl

Не задано

tcp_user_timeout

Устанавливает параметр сокета TCP_USER_TIMEOUT. Задает максимальное время в миллисекундах, в течение которого переданные данные могут оставаться непризнанными, прежде чем TCP-соединение будет принудительно закрыто. Если установлено значение 0, то используется значение по умолчанию операционной системы

0

Раздел [databases]

Раздел [databases] определяет имена баз данных, к которым могут подключаться клиенты Pooler, и указывает, куда будут направляться эти соединения. Раздел содержит строки типа ключ=значение:

dbname = connection string

Где в качестве ключа будет взято имя базы данных, а в качестве значения — строка подключения, состоящая из пар ключ=значение параметров подключения (представлены далее в таблице).

Имя базы данных может содержать символы _0-9A-Za-z без кавычек. Имена, содержащие другие символы, должны быть заключены в стандартные кавычки идентификатора SQL – двойные кавычки. При использовании внутри имени БД один экземпляр двойной кавычки ("), необходимо оформлять как двойные парные кавычки ("").

* выступает в качестве «альтернативной» базы данных: если точное имя не существует, его значение берется в качестве строки подключения для запрашиваемой базы данных. Например, если есть следующая запись и нет других переопределяющих записей:

* = host=foo

Тогда подключение к Pangolin Pooler с указанием базы данных bar будет вести себя так, как если следующая запись существует (пользуясь тем, что по умолчанию dbname — это имя базы данных на стороне клиента):

bar = host=foo dbname=bar

Такие автоматически созданные записи базы данных очищаются, если они простаивают дольше времени, заданного в параметре autodb_idle_timeout.

Параметр

Описание

Значение

dbname

Имя базы данных назначения

По умолчанию: То же, что и имя базы данных на стороне клиента

host

Имя хоста или IP-адрес для подключения

Имена хостов разрешаются во время соединения, результат кешируется в соответствии с параметром dns_max_ttl. При изменении разрешения имени хоста существующие серверные соединения автоматически закрываются при их освобождении (в соответствии с режимом пула), а новые серверные соединения сразу используют новое разрешение. Если DNS возвращает несколько результатов, они используются поочередно.

Внимание!

В списке все хосты должны быть доступны в любое время: нет никаких механизмов для пропуска недоступных хостов или для выбора только доступных хостов из списка. Также это влияет только на то, как выбираются места назначения новых соединений. Изучите параметр server_round_robin для определения того, как клиенты назначаются на уже установленные серверные соединения.

По умолчанию: не задано, что означает использование сокета Unix.

Если значение начинается с /, то используется сокет Unix в пространстве имен файловой системы. Если значение начинается с @, то используется сокет Unix в абстрактном пространстве имен.

Можно указать список имен или адресов хостов, разделенных запятыми. В этом случае соединения устанавливаются поочередно.

port

По умолчанию: 5433

user

Если установлено значение user=, все соединения с базой данных назначения будут осуществляться с указанным пользователем, что означает, что для этой базы данных будет существовать только один пул.

В противном случае Pooler входит в базу данных назначения с именем пользователя клиента, а значит на одного пользователя будет приходиться один пул

password

Если пароль здесь не указан, будет использован пароль из файла auth_file или auth_query

auth_port

Номер порта, к которому нужно подключиться для выполнения аутентификации пользователей

Ознакомьтесь с разделом «Cквозная аутентификация»

По умолчанию 5544

auth_user

Переопределяет глобальный параметр auth_user, если он указан

auth_query

Переопределение глобального параметра auth_query, если он указан. Весь оператор SQL должен быть заключен в одинарные кавычки

auth_dbname

Переопределение глобального параметра auth_dbname, если он указан

auth_pool_size

Параметр задает максимальное количество соединений для выполнения аутентификации пользователей.

Ознакомьтесь с разделом «Cквозная аутентификация»

1

pool_size

Устанавливает максимальный размер пулов для этой базы данных.

Если не задано, используется значение default_pool_size

min_pool_size

Установка минимального размера пула для базы данных.

Выполняется только в том случае, если хотя бы одно из следующих условий верно:

  • в этой записи в разделе [database] установлено значение для ключа user (он же системный пользователь подключений);
  • есть хотя бы один клиент, подключенный к пулу

Если не задан, используется глобальный min_pool_size

reserve_pool_size

Установка дополнительных соединений для этой базы данных. По соображениям обратной совместимости reserve_pool является псевдонимом для этого параметра

Если не задано, используется reserve_pool_size

connect_query

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

pool_mode

Устанавливает режим пула, характерный для этой базы данных

Если не задан, используется режим пула по умолчанию

load_balance_hosts

Если в host указан список, разделенный запятыми, load_balance_hosts определяет, какая запись будет выбрана для нового подключения.

  • round-robin - при новой попытке подключения выбирается следующая запись хоста в списке.
  • disable - новое соединение продолжает использовать ту же запись хоста до тех пор, пока соединение не прервется, после чего выбирается следующая запись хоста.

Рекомендуется установить значение server_login_retry ниже, чем по умолчанию, чтобы обеспечить быструю повторную попытку при наличии нескольких хостов

round-robin

max_db_connections

Настраивает максимальное значение для всей базы данных, то есть все пулы в базе данных не будут иметь больше этого количества соединений с сервером

server_lifetime

Настраивает время жизни сервера для каждой базы данных

Если значение не задано, база данных будет использовать значение времени жизни сервера, настроенное для всего экземпляра

client_encoding

Запрашивает у сервера использование указанной клиентской кодировки (client_encoding)

datestyle

Запрашивает у сервера использование указанного стиля даты (datestyle)

timezone

Запрашивает у сервера использование указанного часового пояса (timezone)

Раздел [users]

Этот раздел содержит строки с парами ключ=значение:

user1 = settings

Где ключ будет восприниматься как имя пользователя, а значение — как список пар ключ=значение настроек конфигурации, специфичных для этого пользователя.

Здесь доступны несколько параметров, представлены в таблице далее.

Внимание!

При настройке auth_file, если пользователь указан в этом разделе, но не указан в auth_file (userlist.txt), Pangolin Pooler попытается использовать auth_query для поиска пароля для этого пользователя, если установлен auth_user. Если auth_user не установлен, Pooler будет имитировать, что пользователь существует, не сможет вернуть клиенту сообщения «такого пользователя нет», но и не будет принимать указанный пароль.

Внимание!

Сквозная аутентификация не работает для пользователей, которые указаны в секции [users].

Параметр

Описание

Значение

pool_size

Задайте максимальный размер пула для всех подключений от этого пользователя

Если значение не задано, используется база данных или default_pool_size

reserve_pool_size

Задайте количество дополнительных подключений к пулу для этого пользователя

Если значение не задано, используется конфигурация базы данных или глобальный параметр reserve_pool_size

pool_mode

Устанавливает режим пула, который будет использоваться для всех соединений от этого пользователя

Если он не задан, используется режим пула базы данных или режим пула по умолчанию

max_user_connections

Задает максимум для пользователя, то есть все пулы с этим пользователем не будут иметь больше этого количества подключений к серверу

query_timeout

Задает максимальное количество секунд, в течение которых может выполняться пользовательский запрос

Если этот тайм-аут установлен, он переопределяет значение на уровне сервера

idle_transaction_timeout

Задает максимальное количество секунд, в течение которых пользователь может держать транзакцию в режиме ожидания

Если этот тайм-аут установлен, он переопределяет значение на уровне сервера

client_idle_timeout

Задает максимальное время в секундах, в течение которого клиент может бездействовать при подключении к экземпляру компонента

Если этот тайм-аут установлен, он переопределяет значение на уровне сервера

max_user_client_connections

Настройте максимальное количество клиентских подключений для пользователя. Это пользовательский эквивалент параметра max_client_conn

Раздел [peers]

В разделе [peers] определяются пиры, которым Pangolin Pooler может пересылать запросы на отмену и куда эти запросы будут направляться.

Раздел содержит строки с парами ключ=значение:

peer_id = connection string

Параметр

Описание

Значение

host

Имя хоста или IP-адрес для подключения

port

По умолчанию: 5433

pool_size

Устанавливает максимальное количество запросов на отмену, которые могут одновременно поступать к пиру.

Запросы на отмену обычно поступают пакетами, например, когда резервный сервер СУБД «медленный» или не работает. Поэтому важно, чтобы размер пула (pool_size) не был настолько мал, чтобы он не мог справиться с данными поступающими пакетами

Если значение не задано, то по умолчанию используется default_pool_size

Поддержка подготовленных запросов

В таблице ниже приведены конфигурационные параметры, отвечающие за настройку функциональности «Поддержка подготовленных запросов».

Параметр

Описание

Значение по умолчанию

session_region_id

Идентификатор региона для клиентских сессий, генерируемый алгоритмом snowflakeID, 0-23

0

session_worker_id

Идентификатор обработчика для клиентских сессий, генерируемый алгоритмом snowflakeID, 0-1023

1

Примечание

Необходимость отдельного session_worker_id обусловлена возможностью запуска на одном узле нескольких процессов Pangolin Pooler. Для разделения множества идентификаторов между такими процессами используется параметр session_worker_id - свой для каждого процесса узла компонента Pangolin Pooler (session_region_id).

Необходимо учитывать что каждый узел кластера должен иметь свое значение параметра session_region_id.

Кеширования серверных и клиентских сертификатов

В таблице ниже приведены конфигурационные параметры, отвечающие за кеширования серверных и клиентских сертификатов.

Параметр

Описание

Значение по умолчанию

client_tls_enable_vault_certificates_cache

Определяет необходимость кеширования клиентских сертификатов в Pangolin Pooler

0 (не используется)

server_tls_enable_vault_certificates_cache

Определяет необходимость кеширования серверных сертификатов в Pangolin Pooler

0 (не используется)

Поддержка CRL

В таблице ниже приведены конфигурационные параметры, отвечающие за поддержку CRL.

Параметр

Описание

Значение по умолчанию

client_tls_crl_file

Путь к файлу CRL

Не задано

client_tls_crl_path

Путь к директории с файлами CRL, по которым выполняется проверка аннулирования клиентских сертификатов

Не задано

server_tls_crl_file

Путь к файлу CRL

Не задано

server_tls_crl_path

Путь к директории с файлами CRL, по которым выполняется проверка аннулирования серверного сертификата Pangolin

Не задано

Управление сертификатами PKCS#12

В таблице ниже приведены конфигурационные параметры, отвечающие за функциональность «Использование и управление сертификатами PKCS#12».

Параметр

Описание

Значение по умолчанию

client_tls_pkcs12_config_path

Путь к конфигурационному файлу в JSON-формате, содержащему данные для генерации сертификата

Не задано

server_tls_pkcs12_config_path

Путь к конфигурационному файлу в JSON-формате, содержащему данные для генерации сертификата

Не задано

Файл аутентификации userlist.txt

Формат файла, заданного параметром auth_file - userlist.txt. Это текстовый файл в следующем формате:

"username2" "md5abcdef012342345" ...
"username2" "SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey>"

Должно быть не менее двух полей, заключенных в двойные кавычки. Первое поле — имя пользователя, а второе — пароль в открытом виде, MD5-хеш или SCRAM-секрет. Pangolin Pooler игнорирует остальную часть строки. Двойные кавычки в значении поля можно экранировать, написав две двойные кавычки.

Пароли или секреты, хранящиеся в файле аутентификации, служат двум целям. Во-первых, они используются для проверки паролей входящих клиентских соединений, если настроен метод аутентификации на основе пароля. Во-вторых, они используются в качестве паролей для исходящих соединений с внутренним сервером, если внутренний сервер требует аутентификации на основе пароля (если пароль не указан непосредственно в строке подключения к базе данных). Последний вариант работает, если пароль хранится в виде обычного текста или MD5-хеша. Это объясняется свойством безопасности, присущим SCRAM: хранимый секрет SCRAM сам по себе не может быть использован для получения учетных данных для входа в систему.

Конфигурирование userlist.txt

  1. Измените файл userlist.txt (путь к файлу /etc/pangolin-pooler/userlist.txt) при помощи текстового редактора, добавив следующие строки:

    "<user>" "<password>"

    Пример файла userlist.txt:

    "user" "qwerty"

    Или в засекреченном виде:

    "user" "md5175c641eaed0b6c05ae8444b73d789f0"
  2. Измените права и владельца файла:

    sudo chown postgres:postgres /etc/pangolin-pooler/userlist.txt
    sudo chmod 0600 /etc/pangolin-pooler/userlist.txt

Конфигурирование SSL-соединения

Pangolin Pooler позволяет устанавливать защищенное соединение по протоколу SSL (а именно TLS версии 1.2) между клиентами и Pangolin Pooler, и между СУБД и Pangolin Pooler. Для того, чтобы защищенное соединение работало, необходимо провести конфигурирование параметров в Pangolin Pooler и в СУБД Pangolin, а также иметь:

  • сертификат x509 и закрытый ключ для каждого сервера БД;
  • сертификат x509 удостоверяющего центра(УЦ);
  • сертификат и закрытый ключ клиента;
  • CRL-файлы удостоверяющих центров для проверки сертификатов по спискам отозванных сертификатов.

Настройка СУБД Pangolin

После выпуска сертификатов, в конфигурационном файле postgresql.conf необходимо указать пути к сертификату и закрытому ключу сервера, корневого сертификата и, при необходимости, список отозванных сертификатов. После, чтобы включить шифрование, нужно установить параметр в конфигурационном файле ssl = 'on' и перезагрузить сервер. После этого, с СУБД можно будет установить как зашифрованное, так и базовое соединение, в зависимости от того, какие способы разрешены в pg_hba.conf.

Для аутентификации клиента необходимо выпустить сертификат клиента, после чего передавать его при помощи драйвера (например jdbc, который использует параметры sslcert, sslkey, sslrootcert и sslmode). Этого достаточно, чтобы начать использовать TLS и mTLS в Pangolin.

Проверить, какое соединение было установлено можно SQL-запросом:

postgres=# CREATE EXTENSION sslinfo;

CREATE EXTENSION
postgres=# SELECT a.current_user, b.ssl_version FROM (SELECT current_user AS current_user) a,(SELECT ssl_version() AS ssl_version) b;

current_user | ssl_version
--------------+-------------
postgres | TLSv1.2

Настройка Pangolin Pooler

В pangolin-pooler.ini добавьте секцию TLS-настроек и настройте параметры защищенного соединения.

примечание

Между Pangolin Pooler и СУБД Pangolin настраивается SSL-соединение, между Pangolin Pooler и клиентом — по требованию клиента. В обоих случаях минимальная версия TLS 1.2.