pgbouncer
pgbouncer — пул соединений Postgres Pro
Синтаксис
В системах Linux:
pgbouncer [-d] [-R] [-v] [-u пользователь] pgbouncer.ini 
pgbouncer -V | -h 
В Windows:
pgbouncer [-v] [-u пользователь] pgbouncer.ini 
pgbouncer -V | -h 
Для использования pgbouncer в виде службы Windows есть дополнительные аргументы:
pgbouncer.exe --regservice pgbouncer.ini 
pgbouncer.exe --unregservice pgbouncer.ini 
Описание
pgbouncer — это программа, управляющая пулом соединений Postgres Pro. Любое конечное приложение может подключиться к pgbouncer, как если бы это был непосредственно сервер Postgres Pro, и pgbouncer создаст подключение к реальному серверу, либо задействует одно из ранее установленных подключений.
Предназначение pgbouncer — минимизировать издержки, связанные с установлением новых подключений к Postgres Pro.
Чтобы не нарушать семантику транзакций при переключении подключений, pgbouncer поддерживает несколько видов пулов:
- Пул сеансов
- Наиболее корректный метод. Когда клиент подключается, ему назначается одно серверное подключение на всё время, пока клиент остаётся подключённым. Когда клиент отключается, это подключение к серверу возвращается в пул. Этот метод работает по умолчанию. 
- Пул транзакций
- Подключение к серверу назначается клиенту только на время транзакции. Когда pgbouncer замечает, что транзакция завершена, это подключение возвращается в пул. 
- Пул операторов
- Наиболее агрессивный метод. Подключение к серверу будет возвращаться в пул сразу после завершения каждого запроса. Транзакции с несколькими операторами в этом режиме запрещаются, так как они не будут работать. 
Административный интерфейс pgbouncer состоит из нескольких новых команд SHOW, доступных при подключении к специальной «виртуальной» базе данных pgbouncer.
Быстрый запуск
Базовая настройка и использование демонстрируются ниже.
- Создайте файл - pgbouncer.ini. Подробнее он описывается на странице man- pgbouncer(5). Например:- [databases] template1 = host=localhost dbname=template1 auth_user=someuser [pgbouncer] listen_port = 6432 listen_addr = localhost auth_type = md5 auth_file = userlist.txt logfile = pgbouncer.log pidfile = pgbouncer.pid admin_users = someuser 
- Создайте файл - userlist.txtсо списком пользователей, которым разрешено подключение:- "некоторый_пользователь" "его_пароль_на_сервере" 
- Запустите pgbouncer: - $ pgbouncer -d pgbouncer.ini - Примечание- Эта команда не работает в системах Windows. Вместо этого pgbouncer должен запускаться в виде службы, которую необходимо сначала зарегистрировать следующим образом: - pgbouncer --regservice 
- Сделайте так, чтобы ваше приложение (или клиент - psql) подключалось к pgbouncer, а не к серверу Postgres Pro непосредственно:- $ psql -p 6432 -U someuser template1 
- Для управления pgbouncer подключитесь к специальной административной базе данных pgbouncer и выполните - SHOW HELP;, чтобы ознакомиться с его справкой:- $ psql -p 6432 -U someuser pgbouncer pgbouncer=# SHOW HELP; NOTICE: Console usage DETAIL: SHOW [HELP|CONFIG|DATABASES|FDS|POOLS|CLIENTS|SERVERS|SOCKETS|LISTS|VERSION|...] SET key = arg RELOAD PAUSE SUSPEND RESUME SHUTDOWN [...] 
- Если вы вносили изменения в файл - pgbouncer.ini, его можно перезагрузить командой:- pgbouncer=# RELOAD; 
Параметры
- -d, --daemon
- Запустить в фоновом режиме. Без этого указания процесс будет работать на переднем плане. При запуске в фоновом режиме необходимо явное указание параметра - pidfile, а также- logfileили- syslog. В фоновом режиме сообщения не будут записываться в stderr.- Примечание- Это не работает в Windows, там pgbouncer нужно запускать в виде службы. 
- -R, --reboot
- Примечание- Этот параметр устарел. Вместо него следует применять последовательный перезапуск с несколькими процессами pgbouncer с одним и тем же принимающим портом, используя - so_reuseport.- Выполнить перезапуск на «лету». При этом pgbouncer подключается к работающему процессу, забирает у него открытые сокеты и начинает использовать их. Если активного процесса нет, он запускается в обычном режиме. - Примечание- Это работает, только если ОС поддерживает сокеты Unix и в конфигурации определён параметр - unix_socket_dir. Не работает в Windows. Также при этом не поддерживаются подключения TLS, они сбрасываются.
- -u- пользователь, --user- пользователь
- Переключиться на заданного пользователя при запуске. 
- -v, --verbose
- Увеличить детализацию вывода. Может использоваться неоднократно. 
- -q, --quiet
- Приглушить вывод: не выводить ничего в stderr. Это не влияет на уровень выводимых сообщений, а только отключает вывод в stderr. Предназначено для применения в скриптах - init.d.
- -V, --version
- Вывести версию. 
- -h, --help
- Вывести короткую справку. 
- --regservice
- Win32: Зарегистрировать pgbouncer в качестве службы Windows. Имя службы будет определяться значением параметра конфигурации - service_name.
- --unregservice
- Win32: Разрегистрировать службу Windows. 
Административная консоль
Эта консоль доступна при обычном подключении к базе pgbouncer:
$ psql -p 6432 pgbouncer
Подключаться к этой консоли разрешено только пользователям, перечисленным в параметрах конфигурации admin_users или stats_users. (За исключением режима auth_mode=any, когда в качестве stats_user может подключиться любой пользователь.)
Кроме того, пользователю pgbouncer разрешено подключение без пароля, если это подключение устанавливается через сокет Unix и у клиента тот же uid пользователя Unix, что и у работающего процесса.
Административная консоль в настоящее время поддерживает только простой протокол запросов. Некоторые драйверы используют расширенный протокол запросов для всех команд; эти драйверы не будут работать в данном случае.
Команды вывода информации
Команды SHOW выводят полезную информацию. Каждая команда описана ниже.
SHOW STATS
Выводит статистику. Выводимые этой и связанными командами суммарные значения, накапливаемые с момента запуска pgbouncer, и средние значения обновляются с периодичностью stats_period.
- database
- База данных, для которой представлена статистика. 
- total_xact_count
- Общее число транзакций SQL, прошедших через pgbouncer. 
- total_query_count
- Общее число SQL-запросов, прошедших через pgbouncer. 
- total_received
- Общий объём сетевого трафика (в байтах), который получил pgbouncer. 
- total_sent
- Общий объём сетевого трафика (в байтах), который передал pgbouncer. 
- total_xact_time
- Общее время (в микросекундах), в течение которого pgbouncer использовал подключения к Postgres Pro, выполняя запросы или простаивая. 
- total_query_time
- Общее время (в микросекундах), в течение которого pgbouncer активно использовал подключения к Postgres Pro, выполняя запросы. 
- total_wait_time
- Среднее время ожидания ответов сервера в течение секунды (в микросекундах). Сбрасывается, когда клиентскому подключению назначается серверное подключение. 
- avg_xact_count
- Среднее число транзакций в секунду за последний период статистики. 
- avg_query_count
- Среднее число запросов в секунду за последний период статистики. 
- avg_recv
- Средняя скорость получения данных от клиентов (байт в секунду). 
- avg_sent
- Средняя скорость передачи данных клиентам (байт в секунду). 
- avg_xact_time
- Средняя длительность транзакции (в микросекундах). 
- avg_query_time
- Средняя длительность запроса (в микросекундах). 
- avg_wait_time
- Среднее время ожидания ответов сервера клиентами, для которых было назначено серверное подключение в текущем интервале - stats_period, в микросекундах (в среднем в секунду за этот интервал).
SHOW STATS_TOTALS
Выводит подмножество результатов SHOW STATS, включающее только суммарные значения (total_).
SHOW STATS_AVERAGES
Выводит подмножество результатов SHOW STATS, включающее только средние значения (avg_).
SHOW TOTALS
Выводит ту же статистику, что SHOW STATS, но по всем базам данных в целом.
SHOW SERVERS
- type
- «S» для серверов 
- user
- Имя пользователя, с которым pgbouncer подключается к серверу. 
- database
- Имя базы данных. 
- state
- Состояние подключения pgbouncer к серверу, один из вариантов: - active,- idle,- used,- tested,- new,- active_cancelили- being_canceled.
- addr
- IP-адрес сервера Postgres Pro. 
- port
- Порт сервера Postgres Pro. 
- local_addr
- Исходный адрес подключения на локальной машине. 
- local_port
- Исходный порт подключения на локальной машине. 
- connect_time
- Время установления подключения. 
- request_time
- Время выдачи последнего запроса. 
- wait
- Не используется для серверных подключений. 
- wait_us
- Не используется для серверных подключений. 
- close_needed
- 1, если соединение будет закрыто при ближайшей возможности в связи с выполнением команды - RECONNECTлибо в связи с изменением параметров соединения, вызванным перезагрузкой файла конфигурации или изменениями в DNS.
- ptr
- Адрес внутреннего объекта для данного подключения. Используется как уникальный идентификатор. 
- link
- Адрес клиентского подключения, с которым связан сервер. 
- remote_pid
- Идентификатор обслуживающего серверного процесса (PID). Когда подключение выполняется через сокет Unix и ОС может выдать PID процесса, это PID, полученный от ОС. В противном случае этот идентификатор извлекается из пакета для отмены, переданного сервером; это будет интересующий PID при подключении к серверу Postgres Pro, но если подключение обслуживает другой pgbouncer, это будет случайное число. 
- tls
- Информация о TLS-подключении; пустая строка, если TLS не используется. 
- application_name
- Строка, содержащая параметр - application_name, заданный для связанного клиентского подключения, или пустая строка, если он не задан или если подключение отсутствует.
SHOW CLIENTS
- type
- «C» для клиентов. 
- user
- Пользователь, подключённый со стороны клиента. 
- database
- Имя базы данных. 
- state
- Состояние клиентского подключения: - active,- waiting,- active_cancel_reqили- waiting_cancel_req.
- addr
- IP-адрес клиента. 
- port
- Порт клиента. 
- local_addr
- Конечный адрес подключения на локальной машине. 
- local_port
- Конечный порт подключения на локальной машине. 
- connect_time
- Время установления подключения. 
- request_time
- Время последнего запроса клиента. 
- wait
- Текущая длительность ожидания (в секундах). 
- wait_us
- Дробная часть текущей длительности ожидания (в микросекундах). 
- close_needed
- Не используется для клиентов. 
- ptr
- Адрес внутреннего объекта для данного подключения. Используется как уникальный идентификатор. 
- link
- Адрес серверного подключения, с которым связан клиент. 
- remote_pid
- Идентификатор процесса (PID), в случае, если клиент подключается через сокет UNIX и ОС может выдать этот идентификатор. 
- tls
- Информация о TLS-подключении; пустая строка, если TLS не используется. 
- application_name
- Строка, содержащая параметр - application_name, заданный клиентом для данного подключения, или пустая строка, если он не задан или если подключение отсутствует.
SHOW POOLS
Новый пул создаётся для каждой пары сущностей (база данных, пользователь).
- database
- Имя базы данных. 
- user
- Имя пользователя. 
- cl_active
- Число клиентских подключений, которые либо связаны с подключениями к серверу, либо простаивают без запросов, ожидающих обработки. 
- cl_waiting
- Число клиентских подключений, которые отправили запросы, но ещё не получили подключения к серверу. 
- cl_active_cancel_req
- Число клиентских подключений, которые передали серверу команды отмены запроса и ожидают ответ сервера. 
- cl_waiting_cancel_req
- Число клиентских подключений, для которых серверу в данный момент передаются команды отмены запросов. 
- sv_active
- Число серверных подключений, связанных с клиентами. 
- sv_active_cancel
- Число серверных подключений, для которых в данный момент передаются команды отмены запросов. 
- sv_being_canceled
- Серверы, которые должны простаивать, но ждут, пока не будут завершены все текущие команды отмены запросов, отправленные этим серверам. 
- sv_idle
- Число серверных подключений, которые не используются и могут немедленно задействоваться для запросов клиентов. 
- sv_used
- Число серверных подключений, которые простаивают дольше - server_check_delay, поэтому перед повторным использованием для них нужно выполнять- server_check_query.
- sv_tested
- Число серверных подключений, для которых в данный момент выполняются запросы - server_reset_queryили- server_check_query.
- sv_login
- Число серверных подключений, через которые в данный момент выполняется вход на сервер. 
- maxwait
- Показывает, как долго ожидает в очереди самый первый клиент (в секундах). Если это число начинает увеличиваться, значит текущий пул серверов не справляется с запросами достаточно быстро. Причиной тому может быть перегруженный сервер, либо просто слишком маленький размер пула (параметр - pool_size).
- maxwait_us
- Дробная часть максимального времени ожидания (в микросекундах). 
- pool_mode
- Действующий режим пула. 
SHOW PEER_POOLS
Для каждого настроенного узла создаётся новая запись peer_pool.
- database
- Идентификатор настроенной записи узла. 
- cl_active_cancel_req
- Число клиентских подключений, которые передали серверу команды отмены запроса и ожидают ответ сервера. 
- cl_waiting_cancel_req
- Число клиентских подключений, для которых серверу в данный момент передаются команды отмены запросов. 
- sv_active_cancel
- Число серверных подключений, для которых в данный момент передаются команды отмены запросов. 
- sv_login
- Число серверных подключений, через которые в данный момент выполняется вход на сервер. 
SHOW LISTS
Показывает следующие внутренние сведения, в столбцах (не строках):
- databases
- Число баз данных. 
- users
- Число пользователей. 
- pools
- Число пулов. 
- free_clients
- Число свободных клиентов. 
- used_clients
- Число активных клиентов. 
- login_clients
- Число клиентов в состоянии входа ( - login).
- free_servers
- Число свободных серверов. 
- used_servers
- Число задействованных серверов. 
- dns_names
- Количество имён DNS в кеше. 
- dns_zones
- Количество зон DNS в кеше. 
- dns_queries
- Количество выполняющихся запросов к DNS. 
- dns_pending
- Не используется. 
SHOW USERS
- name
- Имя пользователя. 
- pool_mode
- Переопределение - pool_modeдля пользователя либо- NULL, если должен использоваться режим по умолчанию.
SHOW DATABASES
- name
- Имя настроенной записи базы данных. 
- host
- Узел, к которому подключается pgbouncer. 
- port
- Порт, к которому подключается pgbouncer. 
- database
- Реальное имя базы данных, к которой подключается pgbouncer. 
- force_user
- Когда пользователь указан в строке соединения, подключение между pgbouncer и Postgres Pro должно устанавливаться от его имени, вне зависимости от пользователя на стороне клиента. 
- pool_size
- Максимальное число серверных подключений. 
- min_pool_size
- Минимальное число серверных подключений. 
- reserve_pool
- Максимальное число дополнительных подключений для этой базы данных. 
- pool_mode
- Переопределение pool_mode для базы данных либо - NULL, если должен использоваться режим по умолчанию.
- max_connections
- Максимально возможное число подключений для этой базы, установленное либо глобально, параметром - max_db_connections, либо на уровне базы.
- current_connections
- Текущее число подключений для этой базы. 
- paused
- 1, если база данных находится в состоянии паузы, иначе — 0. 
- disabled
- 1, если база данных находится в отключённом состоянии, иначе — 0. 
SHOW PEERS
- peer_id
- Идентификатор настроенной записи узла. 
- host
- Узел, к которому подключается pgbouncer. 
- port
- Порт, к которому подключается pgbouncer. 
- pool_size
- Максимальное число серверных подключений, которое можно установить для этого узла. 
SHOW FDS
Внутренняя команда, которая показывает список файловых дескрипторов и их внутреннее состояние.
При подключении пользователя с именем pgbouncer через сокет Unix из процесса с UID, совпадающим с UID текущего процесса, ему передаются реальные файловые дескрипторы. Это применяется для выполнения перезагрузки «на лету».
Примечание
В Windows это не работает.
Эта команда также блокирует внутренний цикл событий, так что её не следует выполнять, когда pgbouncer используется.
- fd
- Числовое значение файлового дескриптора (ФД). 
- task
- Предназначение; возможны следующие варианты: - pooler,- clientили- server.
- user
- Пользователь подключения, занимающего этот ФД. 
- database
- База данных подключения, занимающего этот ФД. 
- addr
- IP-адрес подключения, занимающего данный ФД; - unix, если это сокет Unix.
- port
- Порт подключения, занимающего данный ФД. 
- cancel
- Ключ отмены для данного подключения. 
- link
- Файловый дескриптор ответной стороны сервера/клиента. - NULL, если подключение простаивает.
SHOW SOCKETS, SHOW ACTIVE_SOCKETS
Выводит низкоуровневую информацию обо всех или только активных сокетах. В вывод включается информация, выводимая командами SHOW CLIENTS и SHOW SERVERS, а также дополнительные сведения низкого уровня.
SHOW CONFIG
Выводит текущие параметры конфигурации, по одному в строке со следующими столбцами:
- key
- Имя переменной конфигурации. 
- value
- Значение переменной конфигурации. 
- default
- Значение по умолчанию. 
- changeable
- Значение - yesили- no, показывающее, можно ли изменить переменную во время работы. Если значение- no, переменная может быть изменена только при перезагрузке. Чтобы изменить переменную во время работы, воспользуйтесь командой- SET.
SHOW MEM
Выводит низкоуровневую информацию о размере различных блоков памяти, выделенных для внутреннего использования. Эта информация имеет динамическую природу и может меняться.
SHOW DNS_HOSTS
Выводит имена узлов, содержащиеся в кеше DNS.
- hostname
- Имя узла. 
- ttl
- Сколько секунд остаётся до очередного внешнего поиска. 
- addrs
- Список адресов, разделённых запятыми. 
SHOW DNS_ZONES
Показывает зоны DNS в кеше.
- zonename
- Имя зоны. 
- serial
- Текущий серийный номер. 
- count
- Имена узлов, относящихся к этой зоне. 
SHOW VERSION
Показывает строку с версией pgbouncer.
SHOW STATE
Показывает параметры состояния pgbouncer. Текущие состояния: активное, состояние паузы и приостановленное.
Команды управления процессом
PAUSE [бд]
pgbouncer пытается отключиться от всех серверов. При закрытии каждого подключения к серверу ожидается освобождение этого подключения в соответствии с режимом пула серверов (в режиме пула транзакций должна завершиться транзакция, в режиме пула операторов должен завершиться оператор, а в режиме пула сеансов должен отключиться клиент). Выполнение этой команды заканчивается, только когда отключатся все подключения. Эта команда должна применяться во время перезапуска базы данных.
Если указано имя базы данных, будет приостановлена работа только с ней.
Новые подключения клиентов к базе, поставленной на паузу, будут находиться в состоянии ожидания, пока не будет выполнена команда RESUME.
DISABLE бд
Запрещает любые новые подключения клиентов к указанной базе данных.
ENABLE бд
Разрешает новые подключения клиентов после предыдущей команды DISABLE.
RECONNECT бд
Закрывает все открытые подключения к указанной базе (или ко всем базам) по мере их освобождения в соответствии с режимом пула, не дожидаясь окончания времени жизни подключений. При этом немедленно могут быть установлены новые подключения к серверу, согласно текущим параметрам пула.
Эта команда может быть полезна, когда изменяется конфигурация подключения к серверу, например, нужно постепенно переключиться на новый сервер. Эту команду не нужно выполнять, если вы меняете строку соединения в pgbouncer.ini и перезагружаете конфигурацию (см. RELOAD) или когда меняются адреса в DNS, так как равнозначное действие будет выполнено автоматически. Эта команда может быть полезна, только если подключения pgbouncer маршрутизируются какими-то внешними средствами.
После выполнения этой команды возможен длительный период, когда будут существовать и старые подключения, и новые. Это может иметь значение только при переключении трафика между читающими репликами или при переключении между узлами в конфигурации с несколькими ведущими. Если необходимо переключить все подключения сразу, рекомендуется использовать команду PAUSE. Чтобы закрыть подключения экстренно (например, когда произвести переключение нужно не постепенно, а срочно), вы можете воспользоваться командой KILL.
KILL бд
Немедленно закрывает все клиентские и серверные подключения к указанной базе данных, деактивируя её.
Новые подключения клиентов к деактивированной базе будут находиться в состоянии ожидания, пока не будет выполнена команда RESUME.
SUSPEND
Все буферы сокетов очищаются и pgbouncer прекращает принимать данные через них. Выполнение этой команды заканчивается, только когда все буферы будут очищены. Эта команда должна применяться, когда pgbouncer перезагружается «на лету».
Новые подключения клиентов к приостановленной базе будут находиться в состоянии ожидания, пока не будет выполнена команда RESUME.
RESUME [бд]
Восстанавливает работу после предыдущей команды KILL, PAUSE или SUSPEND.
SHUTDOWN
Приводит к завершению процесса pgbouncer.
RELOAD
Указывает процессу pgbouncer перезагрузить файлы конфигурации и обновить значения изменяемых параметров, а именно основной файл конфигурации, а также файлы, указанные в параметрах auth_file и auth_hba_file.
pgbouncer отслеживает изменения в файле конфигурации, затрагивающие подключения к базе данных. Существующие подключения со старыми параметрами будут закрыты при ближайшем освобождении этих подключений (в соответствии с режимом пула), а новые подключения к серверу немедленно начнут использовать изменившиеся параметры соединения.
WAIT_CLOSE [бд]
Ожидает, пока для всех серверных подключений к указанной базе (или ко всем базам) не сбросится признак close_needed (см. Подраздел «SHOW SERVERS»). Эту команду можно вызвать после RECONNECT или RELOAD, чтобы, например, в скриптах переключения узлов, дождаться применения изменений конфигураций в полном объёме.
Другие команды
SET ключ = аргумент
Изменяет параметр конфигурации (см. также Подраздел «SHOW CONFIG»). Например:
SET log_connections = 1; SET server_check_query = 'select 2';
(Заметьте, что эта команда выполняется в консоли администратора pgbouncer и задаёт параметры pgbouncer. Команда SET, выполненная в другой базе данных, будет передана на выполнению серверу Postgres Pro, как и любая другая SQL-команда.)
Сигналы
- SIGHUP
- Перезагрузка конфигурации. Равносильно выполнению команды - RELOADв консоли.
- SIGINT
- Безопасное отключение. Равносильно выполнению команд - PAUSEи- SHUTDOWNв консоли.
- SIGTERM
- Немедленное отключение. Равносильно выполнению команды - SHUTDOWNв консоли.
- SIGUSR1
- Равносильно выполнению команды - PAUSEв консоли.
- SIGUSR2
- Равносильно выполнению команды - PAUSEв консоли.
Параметры libevent
Из документации libevent:
Поддержку
epoll,kqueue,devpoll,pollилиselectможно отключить, установив переменную окруженияEVENT_NOEPOLL,EVENT_NOKQUEUE,EVENT_NODEVPOLL,EVENT_NOPOLLилиEVENT_NOSELECT, соответственно.Если установить переменную окружения
EVENT_SHOW_METHOD,libeventпокажет текущий выбранный метод уведомлений в ядре.
Файл конфигурации pgbouncer.ini
Файл конфигурации имеет формат ini-файла. Названия разделов записываются между [ и ]. Строки, начинающиеся с ; или #, считаются комментариями и игнорируются. Символы ; и #, встречающиеся не в начале строки, не распознаются.
Общие параметры
- logfile
- Указывает имя файла журнала. Для работы в режиме демона ( - -d) должен быть задан либо этот параметр, либо- syslog. Файл журнала остаётся открытым, так что после смены имени для прокрутки следует выполнить- kill -HUPили- RELOAD;в консоли. В Windows необходимо остановить и вновь запустить службу.- Обратите внимание, что параметр - logfileсам по себе не отключает вывод сообщений в stderr. Отключить его можно, воспользовавшись параметром командной строки- -qили- -d.- По умолчанию: не задано. 
- pidfile
- Указывает имя файла PID. Без этого указания работа в режиме демона ( - -d) не допускается.- По умолчанию: не задано. 
- listen_addr
- Указывает список адресов (через запятую), по которым должны приниматься TCP-подключения. Вы можете указать - *, что будет означать «принимать по всем адресам». Когда этот параметр не задан, принимаются только подключения через Unix-сокеты.- Адреса могут задаваться числами (в формате IPv4/IPv6) или именами. - По умолчанию: не задано. 
- listen_port
- Номер принимающего порта. Задаётся и для сокетов TCP, и для Unix-сокетов. - По умолчанию: 6432 
- unix_socket_dir
- Указывает расположение сокетов Unix. Действует и для принимающего сокета, и для подключений к серверу. Если задана пустая строка, сокеты Unix отключаются. При указании значения, начинающегося с - @, будет создан сокет Unix в абстрактном пространстве имён (в настоящее время поддерживается в Linux и Windows).- Чтобы работала перезагрузка «на лету» ( - -R), необходимо настроить сокет Unix, который должен находиться в пространстве имён файловой системы.- По умолчанию: - /tmp(в Windows — пустая строка)
- unix_socket_mode
- Режим файловой системы для сокета Unix. Игнорируется для сокетов в абстрактном пространстве имён. Не поддерживается в Windows. - По умолчанию: 0777 
- unix_socket_group
- Имя группы для сокета Unix. Игнорируется для сокетов в абстрактном пространстве имён. Не поддерживается в Windows. - По умолчанию: не задано. 
- user
- Если задан, определяет, на какого пользователя Unix нужно переключиться после запуска. Работает, только если pgbouncer запускается от имени root или уже запущен от имени заданного пользователя. - Не поддерживается в Windows. - По умолчанию: не задано. 
- pool_mode
- Указывает, когда подключение к серверу могут повторно использовать другие клиенты. - session
- Сервер возвращается в пул после отключения клиента. Это вариант по умолчанию. 
- transaction
- Сервер возвращается в пул после завершения транзакции. 
- statement
- Сервер возвращается в пул после завершения запроса. В этом режиме не допускаются транзакции, охватывающие несколько операторов. 
 
- max_client_conn
- Максимально допустимое число клиентских подключений. - При увеличении должно также увеличиваться ограничение на число файловых дескрипторов. Заметьте, что фактическое число занятых файловых дескрипторов будет больше, чем - max_client_conn. Если каждый пользователь подключается к серверу под своим именем, теоретически возможный максимум равен:- max_client_conn + (max pool_size * total databases * total users) - Если пользователь задан в строке соединения (все пользователи подключаются под одним именем), теоретический максимум равен: - max_client_conn + (max pool_size * total databases) - Теоретический максимум не должен достигаться никогда, если только кто-то намеренно не предпримет специальные меры для этого. Тем не менее это значит, что число файловых дескрипторов должно ограничиваться довольно большим числом. - Поищите - ulimitв руководстве man в вашей системе. Замечание: ограничение- ulimitнеприменимо в среде Windows.- По умолчанию: 100 
- default_pool_size
- Сколько подключений к серверу возможно для пары пользователь/база. Может быть переопределено в конфигурации базы данных. - По умолчанию: 20 
- min_pool_size
- Добавить в пул дополнительные соединения, если число активных подключений меньше этого числа. Даёт положительный эффект, когда нагрузка появляется внезапно после периода простоя. Это значение будет ограничено размером пула. - По умолчанию: 0 (отключено) 
- reserve_pool_size
- Число дополнительно разрешённых подключений в пуле (см. - reserve_pool_timeout). При 0 резерв отсутствует.- По умолчанию: 0 (отключено) 
- reserve_pool_timeout
- Если клиент не обслуживается заданный период времени (в секундах), pgbouncer задействует дополнительные подключения из резервного пула. При 0 это не происходит. - По умолчанию: 5.0 
- max_db_connections
- Не допускать больше заданного числа серверных подключений к базе данных (независимо от пользователя). При этом учитывается база данных pgbouncer, к которой подключён клиент, а не база данных Postgres Pro исходящего подключения. Данный предел можно установить для каждой базы данных в разделе - [databases].- Обратите внимание, что когда предел достигается, закрытие подключения клиента в одном пуле не позволяет немедленно установить другое подключение к серверу через другой пул, так как подключение первого пула по-прежнему открыто. Когда сервер закроет его (по тайм-ауту неактивности), новое подключение будет немедленно установлено для ожидающего пула. - По умолчанию: 0 (нет ограничения) 
- max_user_connections
- Не допускать больше заданного числа подключений к серверу для пользователя (независимо от базы данных). При этом учитывается пользователь pgbouncer, связанный с пулом, — это может быть либо пользователь, указанный для подключения к серверу, либо, в отсутствие этого указания, пользователь, от имени которого подключился клиент. Этот предел можно установить для каждого пользователя в разделе - [users].- Обратите внимание, что когда предел достигается, закрытие подключения клиента в одном пуле не позволяет немедленно установить другое подключение к серверу через другой пул, так как подключение первого пула по-прежнему открыто. Когда сервер закроет его (по тайм-ауту неактивности), новое подключение будет немедленно установлено для ожидающего пула. - По умолчанию: 0 (нет ограничения) 
- server_round_robin
- По умолчанию pgbouncer повторно использует подключения сервера в порядке LIFO (последнее пришло, первое ушло), так что основная загрузка распределяется по нескольким последним соединениям. Это даёт наибольшую производительность, если базу данных обслуживает один сервер. Но если за адресом (TCP, DNS или списком хостов) базы данных скрывается система балансировщика, лучше, если pgbouncer будет использовать подключения в данном режиме, обеспечивая таким образом равномерную нагрузку. - По умолчанию: 0 
- track_extra_parameters
- По умолчанию pgbouncer отслеживает параметры - client_encoding,- datestyle,- timezone,- standard_conforming_stringsи- application_nameдля каждого клиента. Чтобы разрешить отслеживание других параметров, их можно задать в этой переменной. В таком случае pgbouncer будет хранить их в кеше переменных клиента и восстанавливать на сервере каждый раз, когда клиент становится активным.- Если нужно указать несколько значений, используется перечисление через запятую (например, - default_transaction_readonly, IntervalStyle).- Примечание- Большинство параметров нельзя отслеживать таким образом. Можно отслеживать только те параметры, которые Postgres Pro передаёт клиенту. В Postgres Pro есть официальный список параметров, которые передаются клиенту. Расширения Postgres Pro могут изменять этот список и сами добавлять передаваемые параметры, а также могут начать передавать уже существующие параметры, которые не передаются Postgres Pro. Например, Citus 12.0+ заставляет PostgreSQL также передавать - search_path.- Протокол - postgresпозволяет настраивать параметры непосредственно в виде параметров в стартовом пакете или внутри поля- optionsстартового пакета. Параметры, указанные любым из этих методов, поддерживаются переменной- track_extra_parameters. Однако в- track_extra_parametersможно включить только параметры, содержащиеся в поле- options, но не само поле.- По умолчанию: - IntervalStyle
- ignore_startup_parameters
- По умолчанию pgbouncer принимает только параметры, которые он может отслеживать в стартовых пакетах: - client_encoding,- datestyle,- timezoneи- standard_conforming_strings.- Все другие параметры вызывают ошибку. Чтобы принимались и другие параметры, их нужно указать здесь, чтобы pgbouncer знал, что они обрабатываются администратором и их можно игнорировать. - Если нужно указать несколько значений, используется перечисление через запятую (например, - options,extra_float_digits).- Протокол - postgresпозволяет настраивать параметры непосредственно в виде параметров в стартовом пакете или внутри поля- optionsстартового пакета. Параметры, указанные любым из этих методов, поддерживаются переменной- ignore_startup_parameters. В- ignore_startup_parametersможно даже включить само поле- options, в результате чего любые неизвестные параметры, содержащиеся в поле- options, будут игнорироваться.- По умолчанию: пустая строка 
- peer_id
- Идентификатор узла, используемый для определения этого процесса pgbouncer в группе одноранговых процессов pgbouncer. Значение - peer_idдолжно быть уникальным в пределах группы одноранговых процессов pgbouncer. Если установлено значение 0, пиринг в pgbouncer отключается. За дополнительной информацией обратитесь к разделу [peers]. Максимальное значение, которое можно указывать для- peer_id, — 16383.- По умолчанию: 0 
- disable_pqexec
- Отключает простой протокол запросов (PQexec). В отличие от расширенного протокола запросов, этот протокол допускает указание нескольких запросов в одном пакете, что оставляет место для атак с SQL-инъекцией. Отключение этого протокола может улучшить безопасность. Разумеется, это означает, что при этом смогут работать только клиенты, которые используют исключительно расширенный протокол запросов. - По умолчанию: 0 
- application_name_add_host
- Добавляет адрес узла и порт клиента к имени приложения, задаваемого при установлении подключения. Это помогает идентифицировать источник плохих запросов и т. п. Это выполняется, только когда подключение устанавливается. Если свойство - application_nameбудет изменено позднее командой- SET, pgbouncer его уже не поменяет.- По умолчанию: 0 
- conffile
- Показывает расположение текущего файла конфигурации. При изменении этого параметра pgbouncer будет использовать другой файл конфигурации после команд - RELOAD/- SIGHUP.- По умолчанию: файл, заданный в командной строке 
- service_name
- Используется при регистрации службы win32. - По умолчанию: - pgbouncer
- job_name
- Псевдоним - service_name.
- stats_period
- Определяет, с какой периодичностью (в секундах) будут пересчитываться средние значения, выводимые различными командами - SHOW, и как часто агрегированная статистика будет записываться в журнал (но см.- log_stats).- По умолчанию: 60 
Параметры аутентификации
pgbouncer выполняет собственную аутентификацию клиентского приложения и имеет собственную базу данных пользователей. Для управления аутентификацией и данными пользователей используются следующие параметры.
- auth_type
- Определяет, как аутентифицировать пользователей. - cert
- Клиент должен подключаться по соединению TLS с действительным клиентским сертификатом. Имя пользователя берётся из поля - CommonName(Общее имя) сертификата.
- md5
- Применять проверку пароля по хешу MD5. Этот метод аутентификации выбирается по умолчанию. Файл - auth_fileможет содержать как зашифрованные MD5, так и открытые пароли. Даже при выборе- md5, если пароль пользователя задан для метода SCRAM, автоматически будет применяться проверка по алгоритму SCRAM.
- scram-sha-256
- Применять проверку пароля по алгоритму SCRAM-SHA-256. Заданный параметром - auth_fileфайл должен содержать зашифрованные SCRAM или открытые пароли. Учтите, что зашифрованные SCRAM пароли могут использоваться только для проверки пароли клиентов, но не для входа на сервер. Чтобы использовать SCRAM для серверных подключений, пароли необходимо задать открытым текстом.
- plain
- По каналу передаётся пароль в открытом тексте. Устаревший вариант. 
- trust
- Аутентификация не выполняется. Тем не менее имя пользователя должно присутствовать в - auth_file.
- any
- Подобен методу - trust, но переданное имя пользователя игнорируется. Требует, чтобы для всех баз данных было настроено подключение заданного пользователя. Кроме того, база данных консоли допускает подключение любого пользователя в качестве администратора.
- hba
- Фактический тип аутентификации загружается из - auth_hba_file. Это позволяет применять разные методы аутентификации для разных вариантов доступа. Например: для подключений через сокет Unix применять метод- peer, а для TCP — TLS.
- pam
- Для проверки подлинности пользователей используется инфраструктура PAM (Pluggable Authentication Modules, Подключаемые модули аутентификации). Файл - auth_fileигнорируется. Этот метод несовместим с базами данных, для которых используется- auth_user. Инфраструктуре PAM в качестве имени службы передаётся- pgbouncer.- pamв файле конфигурации HBA не поддерживается.
 
- auth_hba_file
- Файл конфигурации HBA, который используется, когда параметр - auth_typeравен- hba.- По умолчанию: не задано. 
- auth_file
- Имя файла, из которого будут загружаться имена и пароли пользователей. За подробностями обратитесь к Подразделу «Формат файла аутентификации». - Для большинства типов аутентификации (см. - auth_type) необходимо, чтобы был задан параметр- auth_fileили- auth_user; в противном случае в системе не будет созданных пользователей.- По умолчанию: не задано. 
- auth_user
- Если задан параметр - auth_user, пользователи, не описанные в файле- auth_file, будут проверяться запросом- auth_queryпо таблице- pg_shadowв базе данных- auth_user. Пароль пользователя- auth_userбудет взят из файла- auth_file. (Если для пользователя- auth_userне требуется пароль, задавать его в- auth_fileне нужно.)- Для прямого доступа к - pg_shadowтребуются права администратора. Поэтому рекомендуется, чтобы обычный пользователь обращался к ней, вызывая функцию SECURITY DEFINER (с контекстом безопасности определившего).- По умолчанию: не задано. 
- auth_query
- Запрос для извлечения пароля пользователя из базы данных. - Для прямого доступа к - pg_shadowтребуются права администратора. Поэтому рекомендуется, чтобы обычный пользователь обращался к ней, вызывая функцию SECURITY DEFINER (с контекстом безопасности определившего).- Заметьте, что этот запрос выполняется в целевой базе данных, так что если в нём используются функции, они должны быть установлены в каждой базе. - По умолчанию: - SELECT usename, passwd FROM pg_shadow WHERE usename=$1
- auth_dbname
- Имя базы данных в разделе [databases], которое будет использоваться для аутентификации. Этот параметр может быть глобальным или переопределяемым в строке подключения. 
Параметры журнала
- syslog
- Включает/отключает запись в syslog. В Windows вместо этого используется журнал событий. - По умолчанию: 0 
- syslog_ident
- Имя, с которым события передаются в syslog. - По умолчанию: - pgbouncer(имя программы)
- syslog_facility
- Субъект, который будет указываться в событиях, отправляемых в syslog. Возможные варианты: - auth,- authpriv,- daemon,- user,- local0-7.- По умолчанию: - daemon
- log_connections
- Фиксировать в журнале успешные подключения. - По умолчанию: 1 
- log_disconnections
- Фиксировать отключения с указаниями их причин. - По умолчанию: 1 
- log_pooler_errors
- Фиксировать сообщения об ошибках, которые pgbouncer передаёт клиентам. - По умолчанию: 1 
- log_stats
- Записывать агрегированную статистику в журнал, с периодичностью - stats_period. Это может быть лишним, если ту же статистику запрашивают внешние средства мониторинга, вызывая команды- SHOW.- По умолчанию: 1 
- verbose
- Увеличивает уровень детализации. Соответствует ключу - -vв командной строке. Например, указание- -v -vв командной строке равносильно записи- verbose=2в конфигурации.- По умолчанию: 0 
Управление доступом к консоли
- admin_users
- Разделённый запятыми список пользователей базы данных, которым разрешено подключаться к консоли и выполнять в ней любые команды. Игнорируется с - auth_type, равным- any, так как в этом случае любой пользователь может подключаться как администратор.- По умолчанию: пустая строка 
- stats_users
- Разделённый запятыми список пользователей баз данных, которым разрешено подключаться к консоли и выполнять команды только на чтение, а именно все команды - SHOW, за исключением- SHOW FDS.- По умолчанию: пустая строка 
Проверки активности соединений, тайм-ауты
- server_reset_query
- Запрос, посылаемый серверу при освобождении подключения, прежде чем оно станет доступно другим клиентам. В этот момент никакая транзакция не выполняется, так что значение не должно включать команды - ABORTили- ROLLBACK.- Предполагается, что этот запрос очистит все изменения в состоянии сеанса базы данных, чтобы следующий клиент получил подключение в определённом состоянии. По умолчанию выполняется команда - DISCARD ALL, которая очищает всё, но при этом следующему клиенту не остаётся никакого кешированного состояния. Её можно поменять на более мягкую, например- DEALLOCATE ALL, просто освобождающую подготовленные операторы (если работа приложения не нарушается, когда какое-то состояние сохраняется).- Когда применяется пул транзакций, - server_reset_queryне действует, так как в этом режиме клиенты не должны использовать никакие свойства сеансов, потому что каждая транзакция завершается в отдельном соединении и таким образом получает разные состояния сеанса.- По умолчанию: - DISCARD ALL
- server_reset_query_always
- Определяет, должен ли запрос - server_reset_queryвыполняться во всех режимах пула. Когда этот параметр отключён (по умолчанию),- server_reset_queryбудет запускаться только в режиме пула сеансов. Соединениям в режиме пула транзакций не должен требоваться запрос сброса состояния.- Этот параметр предназначен для аномальных конфигураций, в которых приложения не вполне корректно используют свойства сеансов, подключаясь к пулу транзакций pgbouncer. Он позволяет сменить недетерминированное неправильное поведение на детерминированное (но всё же неправильное) — клиенты всегда теряют своё состояние после каждой транзакции. - По умолчанию: 0 
- server_check_delay
- Определяет, как долго должны сохраняться освобождаемые подключения в состоянии готовности к повторному использованию, без запуска запроса - server_check_query. При значении 0 этот запрос запускается всегда.- По умолчанию: 30.0 
- server_check_query
- Простой холостой запрос, проверяющий, сохраняется ли подключение к серверу. - Если это пустая строка, проверка соединения отключается. - По умолчанию: - select 1
- server_fast_close
- Определяет, должен ли сервер в режиме пула сеансов отключаться немедленно либо после завершения текущей транзакции, если он находится в режиме - close_needed(который включается командами- RECONNECTи- RELOADили при изменениях в DNS), или необходимо дожидаться завершения сеанса. Режимы пула запросов и транзакций так и работают, поэтому включение этого параметра на эти режимы не влияет.- Если этот параметр включён, то есть подключение к серверу закрывается до завершения сеанса клиента, клиентское подключение также закрывается. Тем самым гарантируется, что прерывание сеанса не останется незамеченным для клиента. - Этот параметр позволяет ускорить вступление в силу изменений параметров соединений в случае использования пула сеансов и существования долгоживущих сеансов. Недостатком его использования может быть то, что клиентские сеансы могут прерываться при изменении конфигурации, так что клиентские приложения должны уметь переподключаться и восстанавливать состояние сеанса. Но заметьте, что никакие транзакции при этом не будут потеряны, так как прерываться будут не выполняющиеся транзакции, а только лишь простаивающие сеансы. - По умолчанию: 0 
- server_lifetime
- pgbouncer будет закрывать неиспользуемое серверное подключение (то есть не подключённое ни к одному клиентскому подключению), существующее дольше заданного времени (в секундах). Ноль означает, что соединение будет использоваться только один раз, а затем будет закрываться. - По умолчанию: 3600.0 
- server_idle_timeout
- Если подключение к серверу простаивает дольше заданного времени (в секундах), оно будет закрыто. При значении 0 тайм-аут отключается. - По умолчанию: 600.0 
- server_connect_timeout
- Если инициализация подключения и вход на сервер не завершается за указанное время (в секундах), соединение будет закрыто. - По умолчанию: 15.0 
- server_login_retry
- Время ожидания повторной попытки подключения пулом соединений (в секундах), если вход на сервер завершился ошибкой из-за сбоя подключения или аутентификации. В течение интервала ожидания новые клиенты, пытающиеся подключиться к неисправному серверу, немедленно получат сообщение об ошибке без повторной попытки подключения. - Цель такого поведения заключается в том, чтобы избавить клиентов от необходимости ожидания в очереди, пока соединение с сервером станет доступным, если сервер не работает. Однако это также означает, что если сервер ненадолго станет недоступен, например, во время перезапуска или при ошибочной конфигурации, то пройдёт как минимум такой интервал времени, прежде чем пул соединений вновь допустит подключение к этому серверу. Во избежание таких ситуаций следует управлять запланированными событиями, такими как перезапуски, используя команду - PAUSE.- По умолчанию: 15.0 
- client_login_timeout
- Если клиент подключается, но не может пройти аутентификацию за указанное время (в секундах), он будет отключён. Требуется в основном, чтобы «мёртвые» подключения не задерживали операцию - SUSPENDи, как следствие, перезагрузку «на лету».- По умолчанию: 60.0 
- autodb_idle_timeout
- Если создаваемые автоматически (через «*») пулы баз данных не используются заданное время (в секундах), они освобождаются. Минусом этого является то, что их статистика также сбрасывается. - По умолчанию: 3600.0 
- dns_max_ttl
- Время кеширования результатов поиска DNS (в секундах). Фактический DNS TTL игнорируется. - По умолчанию: 15.0 
- dns_nxdomain_ttl
- Время кеширования ошибок DNS и результатов - NXDOMAIN(в секундах).- По умолчанию: 15.0 
- dns_zone_check_period
- Интервал проверки серийного номера зоны. - pgbouncer может собрать список зон DNS из имён узлов (всё после первой точки) и затем периодически проверять, не изменился ли серийный номер зоны. Если он меняется, то все имена узлов, относящиеся к зоне, разрешаются заново. Если для какого-либо узла получается другой IP-адрес, его подключения признаются недействительными. - По умолчанию: 0.0 (отключено) 
- resolv_conf
- Расположение пользовательского файла - resolv.conf, в котором можно указать адреса серверов DNS а также другие параметры разрешения имён, не зависящие от глобальной конфигурации операционной системы.- Обработку этого файла выполняет используемая библиотека DNS, а не pgbouncer, поэтому, чтобы ознакомиться с его синтаксисом и указаниями, обратитесь к документации этой библиотеки. - По умолчанию: не задан (используются параметры операционной системы) 
Параметры TLS
- client_tls_sslmode
- Режим TLS, выбираемый для подключений клиентов. По умолчанию подключения с использованием TLS запрещены. Когда этот режим включается, необходимо также настроить в - client_tls_key_fileи- client_tls_cert_fileключ и сертификат, которые будет использовать pgbouncer.- disable
- Обычный TCP. Если клиент запрашивает TLS, его запрос игнорируется. Это режим по умолчанию. 
- allow
- Если клиент запрашивает TLS, он используется. В противном случае используется обычный протокол TCP. Если клиент предоставляет свой сертификат, он не проверяется. 
- prefer
- То же, что и - allow.
- require
- Клиент должен использовать TLS. В противном случае соединение клиента сбрасывается. Если клиент предоставляет свой сертификат, он не проверяется. 
- verify-ca
- Клиент должен использовать TLS с годным клиентским сертификатом. 
- verify-full
- То же, что и - verify-ca.
 
- client_tls_key_file
- Закрытый ключ pgbouncer, применяемый для шифрования клиентских подключений. - По умолчанию: не задано. 
- client_tls_cert_file
- Сертификат частного ключа. Клиенты могут проверить его. - По умолчанию: не задано. 
- client_tls_ca_file
- Файл с корневым сертификатом, по которому будут проверяться клиентские сертификаты. - По умолчанию: не задано. 
- client_tls_protocols
- Определяет, какие версии протокола TLS разрешены. Допустимые значения: - tlsv1.0,- tlsv1.1,- tlsv1.2,- tlsv1.3. Краткие обозначения:- all(tlsv1.0,tlsv1.1,tlsv1.2,tlsv1.3),- secure(tlsv1.2,tlsv1.3),- legacy(равнозначно all).- По умолчанию: - secure
- client_tls_ciphers
- Определяет допустимые шифры TLS, в синтаксисе OpenSSL. Допустимые краткие значения: - default/- secure,- compat/- legacy,- insecure/- all,- normal,- fast.- Распространяется только на соединения, использующие TLS версии 1.2 и ниже. В настоящее время нет параметра, который бы управлял выбором шифров при использовании TLS версии 1.3. - По умолчанию: - fast
- 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 для подключений к серверам Postgres Pro. Режим по умолчанию — - prefer.- disable
- Обычный TCP. TLS даже не запрашивается у сервера. 
- prefer
- Сначала всегда запрашивается TLS-подключение к Postgres Pro. В случае отказа происходит переключение на простой TCP. Сертификат сервера не проверяется. Это режим по умолчанию. 
- require
- Подключение обязательно должно устанавливаться через TLS. Если сервер не принимает его, простой TCP использоваться не будет. Сертификат сервера не проверяется. 
- verify-ca
- Подключение должно устанавливаться через TLS, а сертификат сервера должен быть действительным согласно файлу - server_tls_ca_file. Имя узла сервера по сертификату не проверяется.
- verify-full
- Подключение должно устанавливаться через TLS, а сертификат сервера должен быть действительным согласно файлу - server_tls_ca_file. Имя узла должно соответствовать указанному в сертификате.
 
- server_tls_ca_file
- Файл с корневым сертификатом, по которому будут проверяться сертификаты сервера Postgres Pro. - По умолчанию: не задано. 
- server_tls_key_file
- Закрытый ключ pgbouncer, с которым он будет аутентифицироваться на сервере Postgres Pro. - По умолчанию: не задано. 
- server_tls_cert_file
- Сертификат закрытого ключа. Сервер Postgres Pro может проверять его. - По умолчанию: не задано. 
- server_tls_protocols
- Определяет, какие версии протокола TLS разрешены. Допустимые значения: - tlsv1.0,- tlsv1.1,- tlsv1.2,- tlsv1.3. Краткие обозначения:- all(tlsv1.0,tlsv1.1,tlsv1.2,tlsv1.3),- secure(tlsv1.2,tlsv1.3),- legacy(равнозначно all).- По умолчанию: - secure
- server_tls_ciphers
- Определяет допустимые шифры TLS, в синтаксисе OpenSSL. Допустимые краткие значения: - default/- secure,- compat/- legacy,- insecure/- all,- normal,- fast.- Распространяется только на соединения, использующие TLS версии 1.2 и ниже. В настоящее время нет параметра, который бы управлял выбором шифров при использовании TLS версии 1.3. - По умолчанию: - fast
Опасные тайм-ауты
Установка следующих тайм-аутов может приводить к неожиданным ошибкам.
- query_timeout
- Запросы, выполняющиеся дольше этого времени (в секундах), будут отменяться. Его значение следует выбирать лишь немногим меньшим параметра - statement_timeoutна сервере, чтобы это происходило только при проблемах в сети.- По умолчанию: 0.0 (отключено) 
- query_wait_timeout
- Максимальное время, которое могут ожидать выполнения запросы (в секундах). Если запрос не назначается серверу за это время, клиент отключается. Нулевое значение отключает этот параметр, то есть клиенты будут ожидать бесконечно. - Этот параметр используется для предотвращения захватывания подключений «зависшими» серверами. Кроме того, он полезен, когда сервер не работает или по какой-либо причине отклоняет подключения. - По умолчанию: 120.0 
- cancel_wait_timeout
- Максимальное время, которое могут ожидать выполнения команды отмены запросов (в секундах). Если команды отмены запросов не назначаются серверу за это время, клиент отключается. Нулевое значение отключает этот параметр, то есть команды отмены запросов будут ожидать бесконечно. - Этот параметр используется для предотвращения блокировки клиента, когда команды отмены запросов не могут быть переданы из-за неработоспособности сервера. - По умолчанию: 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
- Максимальный размер пакетов Postgres Pro, который сможет пропустить через себя pgbouncer. Один пакет представляет либо один запрос, либо строку из набора результатов. Размер всего набора результатов может быть больше. - По умолчанию: 2147483647 
- listen_backlog
- Значение параметра очереди для - listen(). Определяет, сколько неотвеченных запросов на подключение будет находиться в очереди. Когда очередь заполнена, следующие новые подключения будут сбрасываться.- По умолчанию: 128 
- sbuf_loopcnt
- Устанавливает, сколько циклов должны обрабатываться данные для одного подключения, после чего нужно переходить к другим. Без этого ограничения одно подключение с большим набором результатом может занять pgbouncer на долгое время. В одном цикле обрабатываются данные размером - pkt_bufбайт. Ноль убирает ограничение.- По умолчанию: 5 
- so_reuseport
- Определяет, будет ли для принимающих TCP-сокетов устанавливаться параметр - SO_REUSEPORT. В некоторых операционных системах данный параметр позволяет запускать несколько экземпляров pgbouncer на одном узле, с одним и тем же принимающим портом, при этом соединения автоматически распределяются ядром. Таким образом pgbouncer может использовать больше ядер процессора. (pgbouncer — однопоточное приложение и использует одно ядро для каждого экземпляра.)- Данный параметр имеет желаемый эффект в Linux. В системах, которые вообще не поддерживают указанный параметр сокета, включение этого параметра приведёт к ошибке. - Для всех экземпляров pgbouncer на одном узле должны задаваться разные значения как минимум для - unix_socket_dirи- pidfile, а также- logfile, если он используется. Также обратите внимание, что при использовании этого параметра вы больше не сможете подключаться к конкретному экземпляру pgbouncer через TCP/IP, что может затруднить мониторинг и сбор метрик.- Чтобы отмена запросов продолжала работать, следует настроить пиринг между различными процессами pgbouncer. За более подробной информацией обратитесь к описанию параметра конфигурации - peer_idи раздела конфигурации- [peers]. Также в разделе Примеры есть пример с использованием пиринга и- so_reuseport.- По умолчанию: 0 
- tcp_defer_accept
- Задаёт параметр сокета - TCP_DEFER_ACCEPT; за подробным описанием обратитесь к- man 7 tcp. (Это логический параметр: 1 означает, что он включён. Фактическое значение при включённом параметре в настоящее время неизменяемо и составляет 45 секунд.)- В настоящее время поддерживается только в Linux. - По умолчанию: 1 в Linux, в других системах — 0 
- tcp_socket_buffer
- По умолчанию: не задано. 
- tcp_keepalive
- Включает базовый опрос активности со стандартными параметрами ОС. - В Linux системные параметры по умолчанию: tcp_keepidle=7200, tcp_keepintvl=75, tcp_keepcnt=9. Вероятно, они имеют близкие значения и в других ОС. - По умолчанию: 1 
- tcp_keepcnt
- По умолчанию: не задано. 
- tcp_keepidle
- По умолчанию: не задано. 
- tcp_keepintvl
- По умолчанию: не задано. 
- tcp_user_timeout
- Задаёт параметр сокета - TCP_USER_TIMEOUT. Он определяет максимальное количество времени в миллисекундах, в течение которого передаваемые данные могут оставаться неподтверждёнными, прежде чем соединение TCP будет принудительно закрыто. Если установлено значение 0, используются параметры операционной системы по умолчанию.- В настоящее время поддерживается только в Linux. - По умолчанию: 0 
Раздел [databases]
Раздел [databases] определяет имена баз данных, к которым могут подключаться клиенты pgbouncer, и указывает, куда будут перенаправляться эти подключения. Раздел содержит строки ключ=значение, такие как 
dbname = connection string
, где ключ будет приниматься как имя базы данных, а значение — как строка подключения, состоящая из параметров подключения в виде пар ключ=значение, описанных ниже (аналогично libpq, но сам libpq не используется и имеет другую функциональность).
Пример:
foodb = host=host1.example.com port=5432 bardb = host=localhost dbname=bazdb
Имя базы данных может содержать символы _0-9A-Za-z без кавычек. Имена, содержащие другие символы, должны заключаться в двойные кавычки по правилам для идентификаторов SQL (две кавычки ("") воспринимаются внутри строки как одна).
Имя базы данных pgbouncer зарезервировано для административной консоли и не может использоваться здесь в качестве ключа.
«*» воспринимается как имя всех остальных баз: если точного соответствия имени для запрошенной базы данных не находится, в качестве строки подключения выбирается данное значение. Например, если есть следующая запись (и нет других переопределяющих записей):
* = host=foo
В этом случае подключение к pgbouncer с указанием базы данных bar будет работать так, как если бы существовала следующая запись (в качестве dbname по умолчанию используется имя базы, полученное от клиента):
bar = host=foo dbname=bar
Такие автоматически создаваемые записи баз данных очищаются, если они простаивают больше времени, задаваемого параметром autodb_idle_timeout.
- dbname
- Имя целевой базы данных. - По умолчанию: имя базы данных, полученное от клиента 
- host
- Имя или IP-адрес узла, к которому нужно подключиться. Имена узлов разрешаются в момент подключения, и результат кешируется в течение времени, заданного параметром - dns_max_ttl. Если результат разрешения имени меняется, существующие подключения к серверу автоматически закрываются при их освобождении (в соответствии с режимом пула), и изменение немедленно отражается на новых подключениях. Если DNS возвращает несколько записей, они используются по очереди.- Если значение начинается с - /, используется сокет Unix в пространстве имён файловой системы. Если значение начинается с- @, используется сокет Unix в абстрактном пространстве имён.- Можно указать список имён узлов или адресов через запятую. В этом случае подключения выполняются по кругу. (Если список узлов содержит имена узлов, которые, в свою очередь, разрешаются через DNS в несколько адресов, системы балансировщика работают независимо. Это зависит от реализации, которая может быть изменена.) Обратите внимание, что в списке все узлы должны быть доступны в любой момент: нет никаких механизмов для пропуска недоступных или выбора только доступных узлов из списка и т. п. (Это является существенным отличием от списка узлов в libpq.) Также учтите, что это повлияет только на выбор цели для новых подключений. Назначение клиентов для уже установленных подключений к серверу подробнее рассматривается в описании параметра - server_round_robin.- Примеры: - host=localhost host=127.0.0.1 host=2001:0db8:85a3:0000:0000:8a2e:0370:7334 host=/var/run/postgresql host=192.168.0.1,192.168.0.2,192.168.0.3 - По умолчанию: не задан, что подразумевает использование сокетов Unix 
- port
- По умолчанию: 5432 
- user
- Если задано - user=, все подключения к целевой базе данных будут выполняться с заданным именем пользователя, что означает, что для этой базы данных будет всего один пул.- В противном случае pgbouncer подключается к целевой базе данных с именем пользователя, переданным клиентом, что означает, что для каждого пользователя будет отдельный пул. 
- password
- Если пароль здесь не задаётся, будет использован пароль из - auth_fileили- auth_query.
- auth_user
- Переопределяет глобальную переменную - auth_user, если она задана.
- pool_size
- Задаёт максимальный размер пулов для этой базы данных. Если не задано, применяется значение - default_pool_size.
- min_pool_size
- Задаёт минимальный размер пулов для этой базы данных. Если не задано, применяется глобальное значение - min_pool_size.
- reserve_pool
- Задаёт число дополнительных подключений для этой базы данных. Если не задано, применяется значение - reserve_pool_size.
- connect_query
- Запрос, который будет выполняться сразу после установления соединения, но до того, как его смогут использовать какие-либо клиенты. Если при запросе возникают ошибки, они только фиксируются в журнале, другой реакции не следует. 
- pool_mode
- Задаёт режим пула для данной базы данных. Если этот параметр не задаётся, применяется значение - pool_modeпо умолчанию.
- max_db_connections
- Задаёт максимум подключений для базы данных (то есть, используя все пулы этой базы данных, нельзя будет установить больше этого числа подключений к серверу). 
- client_encoding
- Запрашивает у сервера использование указанной клиентской кодировки ( - client_encoding).
- datestyle
- Запрашивает у сервера использование указанного стиля даты ( - datestyle).
- timezone
- Запрашивает у сервера использование указанного часового пояса ( - timezone).
Раздел [users]
Этот раздел содержит строки ключ=значение, такие как
user1 = settings
, где в качестве ключа принимается имя пользователя, а в качестве значения — переопределяемые для него параметры конфигурации.
Пример:
user1 = pool_mode=session
Здесь доступно лишь несколько параметров.
- pool_mode
- Задаёт режим пула для всех подключений данного пользователя. Если этот параметр не задаётся, применяется значение - pool_modeпо умолчанию или заданное для базы данных.
- max_user_connections
- Задаёт максимум подключений для пользователя (то есть, используя все пулы, нельзя будет установить больше этого числа подключений к серверу). 
Раздел [peers]
В этом разделе определяются одноранговые узлы, которым pgbouncer может пересылать команды отмены запросов, и куда будут перенаправляться эти команды.
Процессы pgbouncer можно объединить в группу, определив значение peer_id и раздел [peers] в конфигурациях всех процессов pgbouncer. Эти процессы могут затем пересылать команды отмены запросов своему родительскому процессу. Это необходимо для работы команд отмены запросов, когда несколько процессов pgbouncer (возможно, на разных серверах) работают с одним и тем же балансировщиком нагрузки TCP. Команды отмены запросов отправляются по разным TCP-подключениям, отличным от подключения запроса, который они отменяют, поэтому балансировщик нагрузки TCP может отправить подключение команды отмены запроса другому процессу, отличному от того, для которого оно предназначалось. Благодаря пирингу эти команды отмены запросов в конечном итоге попадают в правильный процесс.
Раздел содержит строки ключ=значение, такие как
peer_id = connection string
, где ключ будет приниматься как peer_id, а значение — как строка подключения, состоящая из параметров подключения в виде пар ключ=значение, описанных ниже (аналогично libpq, но сам libpq не используется и имеет другую функциональность).
Пример:
1 = host=host1.example.com 2 = host=/tmp/pgbouncer-2 port=5555
Примечание
Чтобы пиринг работал, peer_id каждого процесса pgbouncer в группе должен быть уникальным в пределах группы одноранговых узлов, а раздел [peers] должен содержать записи для каждого из этих идентификаторов. За примерами обратитесь к соответствующей главе. Раздел [peers] может (но не обязательно должен) содержать peer_id узла pgbouncer, для которого предназначена конфигурация. Такая запись не учитывается, но упрощает управление конфигурациями, так как позволяет использовать один и тот же раздел [peers] для нескольких конфигураций.
- host
- Имя или IP-адрес узла, к которому нужно подключиться. Имена узлов разрешаются в момент подключения, и результат кешируется в течение времени, заданного параметром - dns_max_ttl. Если DNS возвращает несколько результатов, они используются в циклическом порядке. Но в целом не рекомендуется использовать имя узла, которое разрешается для нескольких IP-адресов, поскольку тогда команда отмены запроса всё равно может быть перенаправлена не на тот узел, и её придётся пересылать снова (что разрешено не более трёх раз).- Если значение начинается с - /, используется сокет Unix в пространстве имён файловой системы. Если значение начинается с- @, используется сокет Unix в абстрактном пространстве имён.- Примеры: - host=localhost host=127.0.0.1 host=2001:0db8:85a3:0000:0000:8a2e:0370:7334 host=/var/run/pgbouncer-1 
- port
- По умолчанию: 6432 
- pool_size
- Если не задан, используется - default_pool_size.
Директива включения
Файл конфигурации pgbouncer может содержать директивы включения, которые указывают, что нужно прочитать и обработать дополнительный файл конфигурации. Это позволяет разделить файл конфигурации на физически отдельные части. Директивы включения выглядят примерно так:
%include имя_файлаЕсли файл задаётся не абсолютным путём, его путь воспринимается относительно текущего рабочего каталога.
Формат файла аутентификации
В этом разделе описывается формат файла, задаваемого параметром auth_file. Это текстовый файл следующего вида:
"username1" "password" ... "username2" "md5abcdef012342345" ... "username2" "SCRAM-SHA-256$число_итераций:соль$сохранённый_ключ:ключ_сервера"
В строке должно быть минимум два поля, заключённых в двойные кавычки. В первом поле задаётся имя пользователя, а во втором — пароль, либо открытым текстом, либо защищённый MD5 или SCRAM. Остальное содержимое строки pgbouncer игнорирует. Кавычки в этой строке можно записать, продублировав их.
Принятый в Postgres Pro формат пароля, защищённого MD5:
"md5" + md5(password + username)
Таким образом, для пользователя admin с паролем 1234 защищённый MD5 пароль будет следующим: md545f2603610af569b6155c45067268c6b.
Принятый в Postgres Pro формат пароля, защищённого SCRAM:
SCRAM-SHA-256$число_итераций:соль$сохранённый_ключ:ключ_сервера
Пароли или шифры, записанные в файле аутентификации, имеют два предназначения. Во-первых, если для клиента настроен метод аутентификации по паролю, то пароль пользователя сверяется с записанным в этом файле. Во-вторых, если сервер БД требует аутентификации по паролю (и пароль не задан явно в строке подключения), пароль для исходящего подключения к этому серверу также будет взят из этого файла. Второй вариант использования возможен при условии, что пароль записан в открытом виде или в виде MD5-хеша. Пароли в формате SCRAM могут использоваться для входа на сервер, только если клиент проходит аутентификацию по протоколу SCRAM, в определении базы pgbouncer не задаётся имя пользователя, а шифры SCRAM на сервере Postgres Pro и в pgbouncer идентичны (совпадает не только пароль, но и соль, а также количество итераций). Эти условия объясняются присущим механизму SCRAM свойством — из шифра SCRAM нельзя извлечь данные, требующиеся для аутентификации.
Файл аутентификации можно составить вручную, но также можно сгенерировать его из какого-то другого списка пользователей и паролей. В качестве примера скрипта, который генерирует файл с данными аутентификации из таблицы pg_shadow, может быть полезен ./etc/mkauth.py.
Вы также можете использовать auth_query вместо auth_file и таким образом обойтись без отдельного файла аутентификации.
Формат файла HBA
Расположение файла HBA определяется параметром auth_hba_file. Он используется, только если для auth_type задано значение hba.
Соответствует формату Postgres Pro pg_hba.conf, описанному в Разделе 20.1.
- Поддерживаемые типы записей: - local,- host,- hostssl,- hostnossl.
- В поле базы данных поддерживаются варианты: - all,- sameuser, @- файл, несколько имён. Не поддерживаются:- replication,- samerole,- samegroup.
- В поле имени пользователя поддерживаются варианты: - all, @- файл, несколько имён. Не поддерживается:- +groupname.
- В поле адреса поддерживается: - IPv4,- IPv6. Не поддерживаются: имена DNS, префиксы доменов.
- В поле метода аутентификации поддерживаются только те, которые поддерживает pgbouncer в - auth_type, а также- peerи- reject, но исключая- anyи- pam, которые работают только глобально. Сопоставления имён пользователей (- map=) не поддерживаются.
Примеры
Простой пример конфигурации:
[databases] template1 = host=localhost dbname=template1 auth_user=someuser [pgbouncer] pool_mode = session listen_port = 6432 listen_addr = localhost auth_type = md5 auth_file = users.txt logfile = pgbouncer.log pidfile = pgbouncer.pid admin_users = someuser stats_users = stat_collector
Примеры базы данных:
[databases] ; подключение к foodb через сокет Unix foodb = ; перенаправление bardb в базу bazdb на локальном узле bardb = host=localhost dbname=bazdb ; обращение к целевой базе данных будет производить один пользователь forcedb = host=localhost port=300 user=baz password=foo client_encoding=UNICODE datestyle=ISO
Пример безопасной функции для auth_query:
CREATE OR REPLACE FUNCTION pgbouncer.user_lookup(in i_username text, out uname text, out phash text)
RETURNS record AS $$
BEGIN
    SELECT usename, passwd FROM pg_catalog.pg_shadow
    WHERE usename = i_username INTO uname, phash;
    REURN;
END;$$ LANUAGE plpgsql SECURITY DEFINER;
REVOKEALL ON FUNCTION pgbouncer.user_lookup(text) FROM public, pgbouncer;
GRANT XECUTE ON FUNCTION pgbouncer.user_lookup(text) TO pgbouncer;Примеры конфигураций для двух одноранговых процессов pgbouncer при создании многоядерной структуры pgbouncer с использованием so_reuseport.
Конфигурация для первого процесса:
[databases] postgres = host=localhost dbname=postgres [peers] 1 = host=/tmp/pgbouncer1 2 = host=/tmp/pgbouncer2 [pgbouncer] listen_addr=127.0.0.1 auth_file=auth_file.conf so_reuseport=1 unix_socket_dir=/tmp/pgbouncer1 peer_id=1
Конфигурация для второго процесса:
[databases] postgres = host=localhost dbname=postgres [peers] 1 = host=/tmp/pgbouncer1 2 = host=/tmp/pgbouncer2 [pgbouncer] listen_addr=127.0.0.1 auth_file=auth_file.conf so_reuseport=1 ; only unix_socket_dir and peer_id are different unix_socket_dir=/tmp/pgbouncer2 peer_id=2