Поделиться через


PgBouncer в гибком сервере Базы данных Azure для PostgreSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

предложения гибкого сервера База данных Azure для PostgreSQLPgBouncer в качестве встроенного решения для пула подключений. PgBouncer — это необязательная функция, которую можно включить на каждом сервере базы данных. Она поддерживается на уровнях вычислений общего назначения и оптимизированных для памяти вычислительных ресурсов как в общедоступных, так и в частных сетях доступа.

PgBouncer выполняется на той же виртуальной машине, что и сервер базы данных для База данных Azure для PostgreSQL гибкого сервера. Postgres использует модель на основе процессов для подключений, поэтому поддержание большого количества бездействующих подключений является дорогостоящим. Postgres выполняется в ограничениях ресурсов, когда сервер выполняет более нескольких тысяч подключений. Расширение PgBouncer призвано повысить эффективность обработки бездействующих и кратковременных подключений на сервере базы данных.

PgBouncer использует упрощенную модель, которая использует асинхронный ввод-вывод. В нем используются подключения Postgres только в случае необходимости, то есть при открытии транзакции или при активном запросе. Эта модель позволяет масштабировать до 10 000 подключений с низкими затратами.

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

PgBouncer на гибком сервере База данных Azure для PostgreSQL поддерживает проверку подлинности Microsoft Entra (Azure AD).

Включение и настройка PgBouncer

Чтобы включить PgBouncer, перейдите в область параметров сервера в портал Azure, найдите PgBouncer и измените параметр pgbouncer.enabledна true . Не нужно перезапустить сервер.

Параметры PgBouncer можно настроить с помощью этих параметров.

Примечание.

Следующий список параметров сервера PgBouncer отображается на панели параметров сервера, только если pgbouncer.enabled для параметра сервера задано trueзначение . В противном случае они намеренно скрыты.

Наименование параметра Описание По умолч.
pgbouncer.default_pool_size Присвойте этому параметру значение количества подключений для каждой пары пользователей или базы данных. 50
pgbouncer.ignore_startup_parameters Введите разделенный запятыми список параметров, которые PgBouncer может игнорировать. Например, можно разрешить PgBouncer игнорировать extra_float_digits параметр. Некоторые параметры разрешены; все остальные вызывают ошибку. Эта возможность необходима, чтобы терпеть чрезмерное подключение к базе данных Java (JDBC), требующую безусловного задания extra_float_digits=2 в пакетах запуска. Используйте этот параметр, если библиотека, которая использует ошибки отчетов, pq: unsupported startup parameter: extra_float_digitsнапример.
pgbouncer.max_client_conn Задайте для этого параметра максимальное количество клиентских подключений к PgBouncer, которое требуется поддерживать. Значение по умолчанию — 5000, с допустимым диапазоном от 1 до 50 000 5 000
pgbouncer.max_prepared_statements Если для параметра задано значение, отличное от нуля, PgBouncer отслеживает именованные инструкции, связанные с инструкциями, связанными с клиентом, в режиме пула транзакций и инструкций. 0
pgbouncer.min_pool_size Если количество подключений к серверу в пуле ниже этого значения, добавляются новые подключения. 0
pgbouncer.pool_mode Задайте для этого параметра значение TRANSACTION, чтобы использовать пул транзакций (рекомендуемый вариант для большинства рабочих нагрузок). транзакция
pgbouncer.query_wait_timeout (тайм-аут ожидания запроса для pgbouncer) Максимальное время (в секундах), в течение которого запросы могут ожидать выполнения. Если запрос не назначен серверу в течение этого времени, клиент отсоединяется. 120
pgbouncer.server_idle_timeout Если подключение к серверу неактивно больше, чем это много секунд, оно будет удалено. Если значение 0, время ожидания отключено. 600
pgbouncer.stats_users Разделенный запятыми список пользователей базы данных, которым разрешено подключаться и выполнять запросы только для чтения в консоли pgBouncer.

Дополнительные сведения о конфигурациях PgBouncer см . в pgbouncer.ini документации.

Версия PgBouncer

В настоящее время версия PgBouncer развернута на всех поддерживаемых основных версиях подсистемы (17 (предварительная версия), 16, 15, 14, 13, 12, 11), в База данных Azure для PostgreSQL гибкий сервер, составляет 1.22.1.

Льготы

Используя встроенную функцию PgBouncer с База данных Azure для PostgreSQL гибким сервером, вы можете получить следующие преимущества:

  • Удобство упрощенной конфигурации. Так как PgBouncer интегрирован с База данных Azure для PostgreSQL гибким сервером, вам не требуется отдельная установка или сложная настройка. Его можно настроить непосредственно из параметров сервера.

  • Надежность управляемой службы: PgBouncer предлагает преимущества управляемых служб Azure. Например, Azure управляет обновлениями PgBouncer. Автоматическое обновление устраняет необходимость обслуживания вручную и гарантирует, что PgBouncer остается в курсе последних функций и исправлений безопасности.

  • Поддержка различных типов подключений: PgBouncer в База данных Azure для PostgreSQL гибкий сервер обеспечивает поддержку общедоступных и частных подключений. Его можно использовать для установления безопасных подключений через частные сети или внешнего подключения в зависимости от ваших требований.

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

Мониторинг PgBouncer

Метрики

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

Как включить метрики PgBouncer

  • Чтобы отслеживать метрики PgBouncer, убедитесь, что функция pgbouncer включена с помощью параметра pgbouncer.enabled сервера и параметра metrics.pgbouncer_diagnostics метрик.
  • Эти параметры являются динамическими и не требуют перезапуска экземпляра.
  • Метрики PgBouncer отключены по умолчанию.

Список метрик PgBouncer

Показать имя Идентификатор метрики Единица измерения Описание Измерение Включена по умолчанию
Активные клиентские подключения client_connections_active Численность Подключения от клиентов, связанных с подключением к гибкому серверу Azure Database for PostgreSQL. ИмяБазыДанных нет
Ожидание клиентских подключений client_connections_waiting Численность Подключения от клиентов, ожидающих гибкого подключения к серверу Базы данных Azure для PostgreSQL. ИмяБазыДанных нет
Активные подключения к серверу server_connections_active Численность Подключения к гибкому серверу базы данных Azure для PostgreSQL, которые используются для клиентского соединения. ИмяБазыДанных нет
Неактивные подключения к серверу server_connections_idle Численность Подключения к гибкому серверу Базы данных Azure для PostgreSQL, которые неактивны и готовы к обслуживанию нового клиентского подключения. ИмяБазыДанных нет
Общее количество объединённых подключений total_pooled_connections Численность Текущее количество подключений в пуле. ИмяБазыДанных нет
Количество пулов подключений num_pools Численность Общее количество пулов подключений. ИмяБазыДанных нет

Рекомендации по использованию метрик PgBouncer

  • Метрики PgBouncer, использующие измерение DatabaseName, имеют ограничение в 30 баз данных .
  • В SKU Burstable ограничение составляет 10 баз данных с измерением DatabaseName.
  • Ограничение измерения DatabaseName применяется к столбцу OID, который отражает порядок создания базы данных.

Дополнительные сведения см. в разделе метрики PgBouncer.

Консоль администрирования

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

Чтобы подключиться к pgbouncer базе данных, выполните следующие действия.

  1. pgBouncer.stats_users Задайте параметру имя существующего пользователя (например, myUser) и примените изменения.

  2. Подключитесь к pgbouncer базе данных в качестве этого пользователя и задайте порт следующим образом 6432:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=<password> sslmode=require"
    

После подключения к базе данных используйте SHOW команды для просмотра статистики PgBouncer:

  • SHOW HELP: перечислить все доступные SHOW команды.
  • SHOW POOLS: отображение количества подключений в каждом состоянии для каждого пула.
  • SHOW DATABASES: отображение текущих примененных ограничений подключения для каждой базы данных.
  • SHOW STATS: отображение статистики по запросам и трафику для каждой базы данных.

Дополнительные сведения о командах PgBouncer SHOW см . в консоли администрирования.

Переключение приложения на использование PgBouncer

Чтобы начать работу с PgBouncer, выполните следующие действия:

  1. Подключитесь к серверу базы данных, но вместо обычного порта 5432 используйте порт 6432. Убедитесь, что это подключение работает.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=<password> sslmode=require"
    
  2. Протестируйте приложение в среде качества обслуживания с помощью PgBouncer, чтобы убедиться, что у вас нет проблем совместимости. Проект PgBouncer предоставляет матрицу совместимости и рекомендуется использовать пул транзакций для большинства пользователей.

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

PgBouncer в высокой доступности, избыточной в зонах

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

Использование PgBouncer с другими пулами подключений

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

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

Ограничения

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

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

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

  • Не удается использовать режимы пула инструкций вместе с подготовленными инструкциями. Текущая версия PgBouncer добавила поддержку подготовленных инструкций в режиме транзакции. Эту поддержку можно включить и настроить с помощью параметра max_prepared_statements. Установка этого параметра выше значения по умолчанию 0 включает поддержку подготовленных инструкций. Эта поддержка только для подготовленных выражений уровня протокола. Для большинства языков программирования это означает, что мы используем функцию libpq PQprepare на клиенте, отправляя команды уровня протокола, которые PgBouncer может перехватывать, а не выдавать динамическую команду SQL, аналогичную подготовке proc AS, которая отправляет текст, который PgBouncer не будет интерпретировать правильно. Чтобы проверить другие ограничения выбранного режима пула, ознакомьтесь с документацией по PgBouncer.

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

  • Ограничение размера токена при аутентификации через Azure AD. Пользователи с большим количеством членств в группах не смогут подключиться с помощью PgBouncer из-за ограничения размера токена. Приложения, службы и пользователи с небольшим количеством групп работают.

  • PgBouncer — это упрощенное приложение, использующее однопоточную архитектуру. Эта конструкция отлично подходит для большинства рабочих нагрузок приложений. Но в приложениях, создающих большое количество коротких подключений, эта конструкция может повлиять на производительность pgBouncer и ограничить возможность масштабирования приложения. Возможно, вам потребуется попробовать один из следующих подходов:

    • Распределение нагрузки подключения между несколькими экземплярами PgBouncer на виртуальных машинах Azure.
    • Рассмотрим альтернативные решения, включая многопоточные решения, такие как PgCat, на виртуальных машинах Azure.

Внимание

Параметр pgbouncer.client_tls_sslmode встроенной функции PgBouncer не рекомендуется использовать на гибком сервере База данных Azure для PostgreSQL.

Если протокол TLS/SSL для подключений к База данных Azure для PostgreSQL гибкий сервер применяется с помощью параметра require_secure_transport сервера ONв значение , протокол TLS/SSL автоматически применяется для подключений к встроенной функции PgBouncer. Этот параметр включен по умолчанию при создании нового База данных Azure для PostgreSQL гибкого экземпляра сервера и включения встроенной функции PgBouncer. Дополнительные сведения см. в статье "Безопасное подключение с помощью TLS и SSL" в гибком сервере Базы данных Azure для PostgreSQL.

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