Управление и использование#

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

$ psql -p 6544 pgbouncer

Подключаться к этой консоли разрешено только пользователям, перечисленным в параметрах конфигурации admin_users или stats_users (за исключением режима auth_mode = any, когда в качестве stats_user может подключиться любой пользователь).

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

Вывод команды SHOW HELP

Вывод команды SHOW HELP в консоли администрирования:

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
 [...]

Для приложения Pangolin Pooler также доступен синтаксис опций из командной строки.

Вывод команды pangolin-pooler –help
$ pangolin-pooler --help
pangolin-pooler is a connection pooler for Pangolin DBMS.

Usage:
  pangolin-pooler [OPTION]... CONFIG_FILE

Options:
  -d, --daemon         run in background (as a daemon)
  -q, --quiet          run quietly
  -R, --reboot         do an online reboot
  -u, --user=USERNAME  assume identity of USERNAME
  -v, --verbose        increase verbosity
  -V, --version        show version, then exit
  -h, --help           show this help, then exit
  -l, --log=FILENAME   write (or append) server log to FILENAME


Pangolin product version information:
  --product_version        prints product name and version
  --product_build_info     prints product build number, date and hash
  --product_component_hash prints component hash string

Команды SHOW#

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

Команда

Описание

SHOW STATS

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

SHOW STATS_TOTALS

Подмножество SHOW STATS, показывающее общие значения (total_)

SHOW STATS_AVERAGES

Подмножество SHOW STATS, показывающее средние значения (avg_)

SHOW TOTALS

Как SHOW STATS, но агрегированное по всем базам данных

SHOW SERVERS

Информация о серверных подключениях

SHOW CLIENTS

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

SHOW POOLS

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

SHOW PEER_POOLS

Для каждого настроенного узла создается новая запись peer_pool. Данная команда выводит эту информацию

SHOW LISTS

Список количества БД, пользователей, пулов и другой информации в виде столбцов

SHOW USERS

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

SHOW DATABASES

Информация о реализуемых подключениях к базам данных и их состоянии

SHOW PEERS

Показывает информацию о пирах

SHOW FDS

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

SHOW SOCKETS, SHOW ACTIVE_SOCKETS

Показывает низкоуровневую информацию о сокетах или только об активных сокетах. Сюда входит информация, отображаемая в разделах SHOW CLIENTS и SHOW SERVERS, а также другая низкоуровневая информация

SHOW CONFIG

Отображаются текущие параметры конфигурации, по одному на строку

SHOW MEM

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

SHOW DNS_HOSTS

Показывает имена хостов в кеше DNS

SHOW DNS_ZONES

Показывает зоны DNS в кеше

SHOW VERSION

Показывает версию ядра компонента Pangolin Pooler - PgBouncer

SHOW STATE

Показывает настройки состояния компонента (активное, приостановленное и ожидающее)

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

Команда

Описание

SHOW AUTHSERVERS

Показывает информацию по соединениям с сервером аутентификации

SHOW AUTHPOOLS

Показывает информацию по пулам аутентификации

SHOW AUTHUSERS

Показывает информацию о пользователях

SHOW LAST

Показывает информацию об аутентификации последних N пользователей

SHOW LOCKED_USERS

Показывает информацию о временно заблокированных пользователях

Описание полей, возвращаемых командами, приведено в последующих подразделах.

SHOW STATS#

Команда SHOW STATS показывает статистику. В этой и связанных с ней командах общие показатели отсчитываются с момента запуска процесса, промежуточные значения обновляются раз в период, заданный stats_period.

Название поля

Описание поля

database

Статистика представлена по каждой базе данных

total_xact_count

Общее количество SQL-транзакций, объединенных в пул Pangolin Pooler

total_query_count

Общее количество SQL-команд, объединенных в пул Pangolin Pooler

total_server_assignment_count

Общее количество раз, когда сервер был назначен клиенту

total_received

Общий объем сетевого трафика в байтах, полученный Pangolin Pooler

total_sent

Общий объем сетевого трафика в байтах, отправленный Pangolin Pooler

total_xact_time

Общее количество времени в микросекундах, затраченных Pangolin Pooler при подключении к СУБД в рамках транзакции, либо при простое в рамках транзакции, либо при выполнении запросов

total_query_time

Общее количество времени в микросекундах, затраченных Pangolin Pooler на активное подключение к СУБД и выполнение запросов

total_wait_time

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

total_client_parse_count

Общее количество подготовленных запросов, созданных клиентами. Применимо только в режиме отслеживания именованных подготовленных запросов

total_server_parse_count

Общее количество подготовленных операторов, созданных Pangolin Pooler на сервере. Применимо только в режиме отслеживания именованных подготовленных запросов

total_bind_count

Общее количество подготовленных операторов, подготовленных для выполнения клиентами и отправленных в СУБД с помощью Pangolin Pooler. Применимо только в режиме отслеживания именованных подготовленных запросов

avg_xact_count

Среднее количество транзакций в секунду за последний период статистики

avg_query_count

Среднее количество запросов в секунду за последний период статистики

avg_server_assignment_count

Среднее количество обращений к серверу за секунду в течение последнего периода сбора статистики

avg_recv

Среднее количество полученных (от клиентов) байт в секунду

avg_sent

Среднее количество отправленных (клиентам) байт в секунду

avg_xact_time

Средняя продолжительность транзакции в микросекундах

avg_query_time

Средняя продолжительность запроса в микросекундах

avg_wait_time

Время, которое клиенты проводят в ожидании сервера в микросекундах (среднее время ожидания клиентов, которым был назначен сервер, в течение текущего stats_period)

avg_client_parse_count

Среднее количество операторов, созданных клиентами. Применимо только в режиме отслеживания именованных подготовленных запросов

avg_server_parse_count

Среднее количество операторов, созданных Pangolin Pooler на сервере. Применимо только в режиме отслеживания именованных подготовленных запросов

avg_bind_count

Среднее количество операторов, подготовленных для выполнения клиентами и переданных в СУБД с помощью Pangolin Pooler. Применимо только в режиме отслеживания именованных подготовленных запросов

SHOW SERVERS#

В таблице ниже приведены поля вывода команды SHOW SERVERS.

Название поля

Описание поля

type

Тип соединения, «S» для сервера

user

Имя пользователя, используемое Pangolin Pooler для подключения к серверу

database

Имя базы данных

replication

Если для подключения к серверу используется репликация. Значение none, logical или physical

state

Состояние подключения к серверу Pangolin Pooler. Значения: active, idle, used, tested, new, active_cancel, being_canceled

addr

IP-адрес сервера СУБД

port

Порт сервера СУБД

local_addr

Локальный адрес начала подключения

local_port

Локальный порт начала подключения

connect_time

Когда было установлено соединение

loged_in_time

Время подключения

loged_in

Длительность поднятия соединения в секундах

loged_in_us

Дробная часть длительности поднятия соединения в микросекундах

request_time

Время отправки последнего запроса

wait

Не используется для подключений к серверу

wait_us

Не используется для подключений к серверу

close_needed

Флаг закрытия: 1 если соединение будет закрыто как можно скорее, потому что идет перезагрузка файла конфигурации / обновление DNS изменило информацию о соединении / был получен RECONNECT

ptr

Адрес внутреннего объекта подключения

link

Адрес клиентского соединения, с которым сопряжен сервер

remote_pid

PID процесса серверной стороны

tls

Информация о TLS-соединении или пустая строка, если TLS не используется

application_name

Имя приложения, ассоциированное со связанным клиентским соединением, или пустая строка, если приложение не установлено / нет соединения

prepared_statements

Количество подготовленных запросов на сервере, ограниченное значением max_prepared_statements

id

Уникальный идентификатор для сервера

SHOW CLIENTS#

В таблице ниже приведены поля вывода команды SHOW CLIENTS.

Название поля

Описание поля

type

Тип соединения, «C» для клиента

user

Пользователь, подключенный к клиенту

database

Имя базы данных

replication

Использование репликации. Значения: none, logical или physical

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

Идентификатор процесса, если клиент подключается через сокет Unix и ОС поддерживает его получение

tls

Информация о TLS-подключении или пустая строка, если TLS не используется

application_name

Имя приложения, ассоциированное со связанным клиентским соединением, или пустая строка, если приложение не установлено / нет соединения

prepared_statements

Количество подготовленных запросов, подготовленных клиентом

id

Уникальный идентификатор клиента

SHOW POOLS#

В таблице ниже приведены поля вывода команды 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

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

maxwait_us

Дробная часть максимального времени ожидания в микросекундах

avg_time

Среднее время поднятия пула с учетом аутентификации в секундах

avg_time_us

Дробная часть среднего времени поднятия пула в микросекундах

max_time

Максимальное время поднятия пула с учетом аутентификации в секундах

max_time_us

Максимальное время поднятия пула в микросекундах

pool_mode

Используемый режим пула

load_balance_hosts

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

SHOW PEER_POOLS#

В таблице ниже приведены поля вывода команды SHOW PEER_POOLS.

Название поля

Описание поля

database

Идентификатор настроенной записи

cl_active_cancel_req

Клиентские подключения, ожидающие ответа сервера на запрос отмены

cl_waiting_cancel_req

Клиентские соединения, еще не отправившие запрос отмены на сервер

sv_active_cancel

Подключения к серверу, выполняющие передачу запроса на отмену

sv_login

Подключения к серверу, находящиеся в процессе входа в систему

SHOW LISTS#

В таблице ниже приведены поля вывода команды SHOW LISTS.

Название поля

Описание поля

databases

Количество баз данных

users

Количество пользователей

pools

Количество пулов

free_clients

Количество свободных клиентов, которые отключились, но Pangolin Pooler сохраняет выделенную для них память

used_clients

Количество использованных клиентов

login_clients

Количество клиентов в состоянии входа в систему

free_servers

Количество свободных серверов, которые отключены, но Pangolin Pooler сохраняет выделенную для них память

used_servers

Количество использованных серверов

auth_pools

Количество пулов аутентификации

free_auth_servers

Количество свободных серверов аутентификации

used_auth_servers

Количество задействованных серверов аутентификации

dns_names

Количество DNS-имен в кеше

dns_zones

Количество DNS-зон в кеше

dns_queries

Количество выполняемых DNS-запросов в настоящее время

dns_pending

Не используется

SHOW USERS#

В таблице ниже приведены поля вывода команды SHOW USERS.

Название поля

Описание поля

name

Имя пользователя

pool_size

Пользовательское значение pool_size или NULL, если не задано

reserve_pool_size

Пользовательское переопределение reserve_pool_size или NULL, если не задано

pool_mode

Переопределение пользователем pool_mode или NULL, если не задано

max_user_connections

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

current_connections

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

max_user_client_connections

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

current_client_connections

Текущее количество клиентских подключений, открытых для Pangolin Pooler у этого пользователя

SHOW DATABASES#

В таблице ниже приведены поля вывода команды SHOW DATABASES.

Название поля

Описание поля

name

Имя настроенной записи базы данных

host

IP-адрес, к которому подключается Pangolin Pooler

port

Порт, к которому подключается Pangolin Pooler

database

Фактическое имя базы данных, к которой подключается Pangolin Pooler

force_user

Если имя пользователя указано в строке подключения, то соединение между Pangolin Pooler и СУБД устанавливается с указанным пользователем, независимо от того, кто является клиентом

pool_size

Максимальное количество подключений к серверу

min_pool_size

Минимальное количество подключений к серверу

reserve_pool_size

Максимальное количество дополнительных подключений к этой базе данных

server_lifetime

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

pool_mode

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

load_balance_hosts

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

max_connections

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

current_connections

Текущее количество подключений к серверу для этой базы данных

max_client_connections

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

current_client_connections

Текущее количество клиентских подключений к этой базе данных

paused

1, если эта база данных в данный момент приостановлена, иначе 0

disabled

1, если эта база данных в данный момент отключена, иначе 0

SHOW PEERS#

В таблице ниже приведены поля вывода команды SHOW PEERS.

Название поля

Описание поля

peer_id

Идентификатор настроенной записи

host

IP-адрес, к которому подключается Pangolin Pooler

port

Порт, к которому подключается Pangolin Pooler

pool_size

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

SHOW FDS#

Внимание

Эта команда блокирует внутренний цикл обработки событий, поэтому ее не следует использовать во время работы Pangolin Pooler.

В таблице ниже приведены поля вывода команды SHOW FDS.

Название поля

Описание поля

fd

Числовое значение файлового дескриптора (FD)

task

Предназначение. Принимает одно из значений: pooler, client или server

user

Пользователь соединения, использующий FD

database

База данных соединения, использующего FD

addr

IP-адрес соединения, использующего FD. Принимает значение unix, если используется сокет Unix

port

Порт, используемый соединением с использованием FD

cancel

Клавиша отмены для этого подключения

link

fd для соответствующего сервера/клиента. NULL, если неактивен

SHOW CONFIG#

В таблице ниже приведены поля вывода команды SHOW CONFIG.

Название поля

Описание поля

key

Имя переменной конфигурации

value

Значение конфигурации

default

Значение конфигурации по умолчанию

changeable

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

SHOW DNS_HOSTS#

В таблице ниже приведены поля вывода команды SHOW DNS_HOSTS.

Название поля

Описание поля

hostname

Имя хоста

ttl

Время в секундах до следующего поиска

addrs

Список адресов, разделенных запятыми

SHOW DNS_ZONES#

В таблице ниже приведены поля вывода команды SHOW DNS_ZONES.

Название поля

Описание поля

zonename

Название зоны

serial

Текущий серийный номер

count

Имена хостов, принадлежащих этой зоне

SHOW AUTHSERVERS#

В таблице ниже приведены поля вывода команды SHOW AUTHSERVERS.

Название поля

Описание поля

type

Тип соединения, «A» для серверов аутентификации

database

Имя базы данных

state

Состояние подключения к серверу Pangolin Pooler. Значения: active, used или idle

addr

IP-адрес сервера СУБД

port

Порт сервера СУБД

local_addr

Исходный адрес подключения на локальной машине

local_port

Исходный порт подключения на локальной машине

connect_time

Время установления подключения

loged_in_time

Время подключения (время, когда получен ответ на handshake запрос)

request_time

Время выдачи последнего запроса

ptr

Адрес внутреннего объекта для данного подключения. Используется как уникальный идентификатор

tls

Информация о TLS-подключении. Пустая строка, если TLS не используется

SHOW AUTHPOOLS#

В таблице ниже приведены поля вывода команды SHOW AUTHPOOLS.

Название поля

Описание поля

database

Имя базы данных

cl_auth

Количество клиентских подключений, которые выполняют запрос аутентификации к серверу аутентификации

sv_active

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

sv_idle

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

sv_used

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

sv_tested

Подключения к серверу, в которых выполняются server_reset_query или server_check_query

sv_login

Подключения к серверу, находящиеся в процессе входа в систему

maxwait

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

maxwait_us

Дробная часть максимального времени ожидания в микросекундах

SHOW AUTHUSERS#

В таблице ниже приведены поля вывода команды SHOW AUTHUSERS.

Название поля

Описание поля

name

Имя пользователя

addr

IP-адрес клиента

port

Порт клиента

database

Имя базы данных

pool_mode

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

SHOW LAST#

В таблице ниже приведены поля вывода команды SHOW LAST.

Название поля

Описание поля

user

Имя пользователя

addr

IP-адрес клиента

port

Порт клиента

tls

Информация о TLS-подключении. Пустая строка, если TLS не используется

method

Метод аутентификации (например, md5, scram-sha-256, ldap, cert). Отображается только для аутентифицированных пользователей

place

Место выполнения аутентификации (Pangolin Pooler, Pangolin DBMS)

status

Статус аутентификации (ok, failed, expired)

connect_time

Время установления подключения

wait

Время ожидания клиента в очереди до аутентификации в секундах

wait_us

Дробная часть времени ожидания в микросекундах

auth_time

Время выполнения аутентификации (получения статуса аутентификации)

auth

Время выполнения аутентификация (в секундах). Если это число начинает увеличиваться, значит текущий сервер аутентификации не справляется с запросами достаточно быстро. Причиной может быть перегруженный сервер, а в случае внешних аутентификаций (GSS, LDAP, RADIUS) перегруженный сервер аутентификации

auth_us

Дробная часть времени выполнения аутентификации в микросекундах

SHOW LOCKED_USERS#

В таблице ниже приведены поля вывода команды SHOW LOCKED_USERS.

Название поля

Описание поля

user

Имя пользователя

addr

IP-адрес клиента

port

Порт клиента

database

Имя базы данных

begin

Время начала блокировки

end

Время окончания блокировки

Команды управления процессом#

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

Команда

Описание

PAUSE <database_name>

Pangolin Pooler пытается отключиться от всех серверов. При отключении от каждого сервера ожидается, что это подключение к серверу будет освобождено в соответствии с режимом объединения в пул (в режиме пула транзакций конкретная транзакция должна завершиться, в режиме пула операторов — конкретный оператор должен завершиться, а в режиме пула сеансов – должен отключиться клиент). Команда не будет выполнена до тех пор, пока все подключения к серверам не будут отключены. Команда используется во время перезапуска базы данных.

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

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

DISABLE <database_name>

Отклоняет все новые клиентские подключения к данной базе данных

ENABLE <database_name>

Разрешает новые клиентские подключения после команды DISABLE

RECONNECT <database_name>

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

Эта команда полезна, если настройки подключения к серверу изменились, например, для постепенного перехода на новый сервер. Эту команду не нужно выполнять, если строка подключения в pangolin-pooler.ini была изменена и перезагружена (RELOAD) или если изменилось разрешение DNS, потому что в этом случае аналогичное действие будет выполнено автоматически. Эта команда нужна только в том случае, если что-то, находящееся «ниже» (по потоку данных) Pangolin Pooler, перенаправляет подключения.

После выполнения этой команды может пройти некоторое время, в течение которого некоторые серверные подключения будут направляться к старому месту назначения, а некоторые — к новому. Это имеет смысл при переключении трафика для чтения между репликами только для чтения или при переключении между узлами в конфигурации репликации с несколькими ведущими узлами. Если необходимо одновременно переключить все подключения, рекомендуется использовать PAUSE. Чтобы закрыть серверные подключения без ожидания (например, при аварийном переключении, а не при постепенном переключении), также рассмотрите KILL

KILL <database_name>

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

Новые подключения клиентов к отключенной базе данных будут ожидать вызова RESUME

KILL_CLIENT <id>

Немедленно разрывает указанное клиентское соединение вместе со всеми серверными соединениями для данного клиента. Клиент, соединение с которым необходимо «разорвать», определяется по значению id, которое можно получить с помощью команды SHOW CLIENTS

SUSPEND

Очищает все буферы сокетов, и Pangolin Pooler перестает прослушивать данные в них. Команда не будет выполнена, пока все буферы не будут очищены. Используется во время «быстрой» перезагрузки Pangolin Pooler.

Новые подключения клиентов к приостановленной базе данных будут ожидать вызова RESUME

RESUME <database_name>

Восстанавливает работу после предыдущей команды KILL, PAUSE или SUSPEND

SHUTDOWN

Завершает процесс Pangolin Pooler

SHUTDOWN WAIT_FOR_SERVERS

Прекращает прием новых подключений и завершает работу после отключения всех серверов. Работает аналогично командам PAUSE и SHUTDOWN с той разницей, что в данном случае команда прекращает прием новых подключений в ожидании PAUSE, а также принудительно отключает клиентов, ожидающих подключения к серверу

SHUTDOWN WAIT_FOR_CLIENTS

Прекращает принимать новые подключения и завершает процесс после того, как все существующие клиенты отключатся. Эту команду можно использовать для перезапуска двух процессов Pangolin Pooler с нулевым временем простоя по следующей процедуре:

  1. Запустите два или более процессов Pangolin Pooler на одном и том же порту с помощью so_reuseport (рекомендуется настроить секцию [peers]). Чтобы добиться нулевого времени простоя при перезапуске, перезапускайте эти процессы по очереди, оставляя остальные запущенными для приема соединений во время перезапуска одного из них.

  2. Выберите процесс для перезапуска, например, с названием A.

  3. Запустите SHUTDOWN WAIT_FOR_CLIENTS (или отправьте SIGTERM) процессу A.

  4. Реализуйте повторное подключение всех клиентов. Возможно, потребуется подождать некоторое время, пока пул на стороне клиента не вызовет повторное подключение в соответствии с server_idle_timeout (или аналогичной) конфигурацией. Или, если пул на стороне клиента не используется, потребуется перезапустить клиентов. Как только все клиенты повторно подключатся, процесс A завершится автоматически, так как к нему больше не будут подключаться клиенты.

  5. Запустите процесс A снова.

  6. Повторите шаги 3, 4 и 5 для каждого из оставшихся процессов, пока все процессы не будут перезапущены.

RELOAD

Задает процессу Pangolin Pooler перезагрузку файлов конфигурации и обновление изменяемых параметров. Это касается основного файла конфигурации (pangolin-pooler.ini), а также файлов, указанных в параметрах auth_file (userlist.txt) и auth_hba_file

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

WAIT_CLOSE

Ожидает, пока все серверные подключения к указанной базе данных или ко всем базам данных не выйдут из состояния close_needed (SHOW SERVERS). Это можно сделать после RECONNECT или RELOAD, чтобы дождаться полной активации соответствующего изменения конфигурации, например, в сценариях переключения

Другие команды#

В таблице ниже приведены команды, не вошедшие в таблицу выше.

Команда

Описание

SET <key = arg>

Изменяет параметр конфигурации (рассмотрите также команду SHOW CONFIG). Например:

SET log_connections = 1;
SET server_check_query = 'select 2';

Данная команда запускается в консоли администрирования и устанавливает настройки компонента. Команда SET, запущенная в другой базе данных, будет передана серверу СУБД как любая другая команда SQL.

Дополнительно реализованные команды#

В таблице ниже приведены команды, которые были реализованы в процессе доработки компонента.

Команда

Описание

RESET_AUTH

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

Параметры выборки пользователя передаются в формате: "[<user>[|<db>[|<addr>[|ssl]]]]", где:

  • <user> – имя пользователя;

  • <db> – наименование базы данных;

  • <addr> – адрес хоста, с которого аутентифицировался пользователь;

  • ssl – признак того, что пользователь аутентифицировался по защищенному соединению;

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

NDC_KEEPALIVE

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

NDC_SUSPEND

Прерывает все существующие соединения к базам данных, а также все клиентские соединения, кроме соединений с административной консолью (для обеспечения связи с базой pgbouncer). Получив эту команду, Pangolin Pooler переходит в режим NDC_DISALLOWED и прекращает обработку входящих клиентских соединений.

Поведение аналогично вызову команды KILL <database_name> для всех баз данных, с которыми были установлены соединения, за исключением того, что базы данных не переходят в режим выключения.

Сигналы#

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

Команда

Описание

SIGHUP

Перезагрузка конфигурации. Равнозначно выполнению команды RELOAD в консоли

SIGTERM

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

SIGINT

Безопасное завершение работы. Равнозначно выполнению командыSHUTDOWN WAIT_FOR_SERVERS в консоли. Если этот сигнал получен во время завершения работы, то вместо «безопасного завершения работы» запускается «немедленное завершение работы»

SIGQUIT

Немедленное завершение работы. Равнозначно выполнению команды SHUTDOWN в консоли

SIGUSR1

Равнозначно выполнению команды PAUSE в консоли

SIGUSR2

Равнозначно выполнению команды RESUME в консоли

Опции командной строки#

Ниже приведено описание опций компонента при работе в командной строке.

-d, --daemon

Запуск в фоновом режиме. Без этого указания процесс будет выполняться на переднем плане.

В фоновом режиме требуется указание pidfile и logfile или syslog. После перехода в фоновый режим сообщения журнала не будут записываться в stderr.

-R, --reboot

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

Внимание

Опция устарела. Вместо этой опции используйте последовательный перезапуск с несколькими процессами, прослушивающими один и тот же порт с помощью so_reuseport.

Примечание

Работает только в том случае, если ОС поддерживает сокеты Unix и unix_socket_dir не отключена в конфигурации. Не работает с TLS-соединениями, они прерываются.

-u <username>, --user=<username>

Переключение на данного пользователя при запуске.

-v, --verbose

Увеличение детализации сообщений. Может использоваться несколько раз.

-q, --quiet

Не выводить сообщения в stderr. Это не влияет на уровень детализации сообщений, но stderr использовать нельзя. Для использования в скриптах init.d.

-V, --version

Вывод версии.

-h, --help

Вывод краткой справки.

Сценарии использования#

Доступ в БД через Pangolin Pooler#

  1. Подключитесь в psql консоль пользователем postgres через Pangolin Pooler:

    $ psql -p 6544
    

    Результат: Вход успешный.

  2. Зайдите в консоль администрирования Pooler и проверьте количество подключенных к базе пользователей:

    $ psql -p 6544 -U pgbouncer -d pgbouncer
    
    SHOW CLIENTS;
    

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

    -[ RECORD 4 ]-------+------------------------
    type                | C
    user                | postgres
    database            | postgres
    state               | active
    addr                | {IP-Address}
    port                | {port}
    local_addr          | {IP-Address}
    local_port          | {local_port}
    connect_time        | 2024-07-29 16:40:55 MSK
    loged_in_time       | 2024-07-29 17:05:30 MSK
    request_time        | 2024-07-29 16:55:41 MSK
    wait                | 0
    wait_us             | 0
    loged_in            | 0
    loged_in_us         | 0
    close_needed        | 0
    ptr                 | 0x259cf70
    link                |
    remote_pid          | 0
    tls                 |
    application_name    | psql
    prepared_statements | 0
    

Вывод версии компонента#

Для вывода версии компонента Pangolin Pooler, а также ядра компонента (PgBouncer) выполните команду:

pangolin-pooler -V

Пример вывода:

Pangolin Pooler 1.5.0
PgBouncer 1.24.0
libevent 2.1.8-stable
adns: evdns2
tls: OpenSSL 1.1.1k  FIPS 25 Mar 2021
authproxy: yes
2fa: yes

Проверка работы двухфакторной аутентификации при подключении к Pangolin через Pangolin Pooler#

  1. Настройте двухфакторную аутентификацию для реализации подключения к СУБД через Pangolin Pooler с включенной или выключенной сквозной аутентификацией.

  2. Создайте пользователя и задайте ему пароль:

    postgres=#CREATE ROLE test_user;
    CREATE ROLE
    
    postgres=#ALTER user test_user WITH LOGIN;
    ALTER ROLE
    
    postgres=#ALTER user test_user WITH PASSWORD '<password>';
    ALTER ROLE
    
  3. Подключитесь к Pangolin, выполните команду:

    psql 'host=clustername port=5433 user=user1 sslmode=verify-ca sslcert=client-user1.crt sslkey=client-user1.key sslrootcert=root.crt'
    

    Введите на запрос пароля корректный пароль. В случае успеха psql перейдет в режим ожидания ввода запросов:

    Password for user test_user:
    

    Ожидаемый результат:

    psql (17.5)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help.
    
    postgres=> 
    
  4. Проверьте, что выполняется запрос к БД, например:

    test_user@postgres=# SELECT now();
    
    +-------------------------------+
    |              now              |
    +-------------------------------+
    | 2025-06-27 17:18:22.813347+03 |
    +-------------------------------+
    (1 row)
    

Сброс контекста сквозной аутентификация#

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

  1. Выполните запрос списка пользователей:

    PGPASSWORD='<password3>' psql -p 6544 -d pgbouncer -U pgbouncer -c "SHOW AUTHUSERS"
    

    Ожидаемый результат: Запрос выполнен успешно. Все значения колонки auth_state равны done. Пример вывода:

    name   |    addr     | port  | database | pool_mode | tls | auth_state
    ------+--------------+-------+----------+-----------+-----+------------
     u1   | <IP-Address> | 44246 | d1       |           | yes | done
     u1   | <IP-Address> | 44260 | d2       |           | yes | done
     u2   | <IP-Address> | 43228 | d2       |           | yes | done
    (3 rows)
    
  2. Выполните сброс состояния аутентификация для всех пользователей:

    PGPASSWORD='<password3>' psql -p 6544 -d pgbouncer -U pgbouncer -c "RESET_AUTH"
    

    Результат: Запрос выполнен успешно:

    RESET_AUTH
    
  3. Повторно выполните запрос списка пользователей:

    PGPASSWORD='<password3>' psql -p 6544 -d pgbouncer -U pgbouncer -c "SHOW AUTHUSERS"
    

    Ожидаемый результат: Запрос выполнен успешно. Все значения колонки auth_state равны none. Пример вывода:

    name   |    addr     | port  | database | pool_mode | tls | auth_state
    ------+--------------+-------+----------+-----------+-----+------------
     u1   | <IP-Address> | 44246 | d1       |           | yes | none
     u1   | <IP-Address> | 44260 | d2       |           | yes | none
     u2   | <IP-Address> | 43228 | d2       |           | yes | none
    (3 rows)
    

Исправление попытки неудачной аутентификации#

  1. Выполните подключение к БД:

    psql "host=<IP-Address> port=<port> user=testuser dbname=testdb sslmode=require"
    
  2. Аутентификация завершена ошибкой:

    psql: error: FATAL
    
  3. Проверьте лог-файл Pangolin Pooler на наличие записи типа:

    2025-07-18 14:31:02.104 MSK [2102] FATAL testdb/testuser@<IP-Address>:<port> PgBouncer does not allow to use weak authentication type: "trust"
    
  4. Исправьте метод аутентификации в pg_hba на стороне СУБД, заменив trust на безопасный метод, например scram-sha-256:

    # Было:
    host    all             all             <IP-Address>/32            trust
    
    # Стало:
    host    all             all             <IP-Address>/32            scram-sha-256
    
  5. Перечитайте конфигурацию:

    sudo systemctl reload postgresql
    
  6. Повторите попытку подключения:

    psql "host=<IP-Address> port=<port> user=testuser dbname=testdb sslmode=require"
    
  7. Успешная аутентификация подтверждается сообщениями в логе:

    2025-07-18 14:34:44.412 MSK AUDIT testdb/testuser@<IP-Address>:<port> login attempt tls=yes
    2025-07-18 14:34:44.416 MSK AUDIT testdb/testuser@<IP-Address>:<port> send auth startup packet
    2025-07-18 14:34:44.491 MSK AUDIT testdb/testuser@<IP-Address>:<port> auth server login ok
    

Определение клиентского IP адреса, подключенного к СУБД через Pangolin Pooler#

Вне зависимости от использования сквозной аутентификации, определить клиентский IP-адрес можно следующим образом:

  1. Выполните запрос для поиска целевого подключения и его параметров. Пример:

    postgres=# SELECT * FROM pg_stat_activity WHERE datname = 'tst1'\gx
    
    -[ RECORD 1 ]----+-------------------------------------------------------------------  
    datid            | 16734  
    datname          | tst1  
    pid              | 2366  
    usesysid         | 10  
    usename          | postgres  
    application_name | pgAdmin 4 - CONN:9435271  
    client_addr      | 
    client_hostname  |  
    client_port      |   
    backend_start    | 2023-11-13 11:57:06.347595+03  
    xact_start       | 2023-11-13 11:57:58.16217+03  
    query_start      | 2023-11-13 11:57:58.16217+03  
    state_change     | 2023-11-13 11:57:58.162323+03  
    wait_event_type  | Client  
    wait_event       | ClientRead  
    state            | idle in transaction  
    query            | begin;  
                     | select 1;  
    backend_type     | client backend
    

    Значения pid и client_port будут использоваться далее: pid = 2366, client_port = 54406.

  2. Подключитесь к административной БД pgbouncer:

    $ psql -p 6544 -U pgbouncer -d pgbouncer
    
  3. Выполните команду SHOW SERVERS и по значениям remote_pid и local_port найдите нужную запись:

    pgbouncer=# SHOW SERVERS\gx 
    
    -[ RECORD 3 ]-+------------------------  
    type          | S  
    user          | postgres  
    database      | tst1  
    state         | active  
    addr          | <IP-Address>
    port          | <port>   
    local_addr    | <IP-Address>
    local_port    | <port>   
    connect_time  | 2023-11-13 11:57:06 MSK  
    loged_in_time | 2023-11-13 11:57:06 MSK  
    request_time  | 2023-11-13 11:57:58 MSK  
    remote_pid    | 2366
    link          | 0x179d6b0
    

    Значение link равное 0x179d6b0 потребуется на следующем шаге.

  4. Выполните SHOW CLIENTS и найдите запись, где ptr совпадает с link из предыдущего шага:

    pgbouncer=# SHOW CLIENTS\gx
    
    -[ RECORD 3 ]-+------------------------  
    type          | C  
    user          | postgres  
    database      | tst1  
    state         | active  
    addr          | <IP-Address_client>  
    port          | <port> 
    local_addr    | <IP-Address>
    local_port    | <port>   
    connect_time  | 2023-11-13 11:57:28 MSK  
    loged_in_time | 2023-11-13 13:30:22 MSK  
    request_time  | 2023-11-13 11:57:58 MSK  
    ptr           | 0x179d6b0  
    

    В поле addr указано значение IP-адреса клиента, а в port — клиентский порт подключения к pgbouncer.

  5. Дополнительно можно включить расширенное логирование, чтобы видеть IP-адрес клиента и его порт в логах. Для этого в конфигурационный файл pangolin-pooler.ini добавьте параметр log_audit в значении 1:

    log_audit = 1