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


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 и измените параметр trueна pgbouncer.enabled . Не нужно перезапустить сервер.

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

Примечание.

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

Наименование параметра Description По умолч.
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
pgbouncer.max_prepared_statements Если для параметра задано значение, отличное от нуля, PgBouncer отслеживает именованные инструкции, связанные с инструкциями, связанными с клиентом, в режиме пула транзакций и инструкций. 0
pgbouncer.min_pool_size Если количество подключений к серверу в пуле ниже этого значения, добавляются новые подключения. 0
pgbouncer.pool_mode Задайте для этого параметра значение TRANSACTION, чтобы использовать пул транзакций (рекомендуемый вариант для большинства рабочих нагрузок). transaction
pgbouncer.query_wait_timeout Максимальное время (в секундах), в течение которого запросы могут ожидать выполнения. Если запрос не назначен серверу в течение этого времени, клиент отсоединяется. 120
pgbouncer.server_idle_timeout Если подключение к серверу неактивно больше, чем это много секунд, оно будет удалено. Если значение 0, время ожидания отключено. 600
pgbouncer.stats_users Разделенный запятыми список пользователей базы данных, которым разрешено подключаться и выполнять запросы только для чтения в консоли pgBouncer.

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

Версия PgBouncer

В настоящее время версия PgBouncer, развернутая на всех поддерживаемых основных версиях подсистемы (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

Метрики

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

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

Дополнительные сведения см. в разделе метрики 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=myPassword 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=myPassword 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.

  • Ограничение размера токена с проверкой подлинности AAD. Пользователи с большим количеством членства в группах не смогут подключаться через 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. Дополнительные сведения см. в разделе "Сеть" для База данных Azure для PostgreSQL — гибкий сервер с частным доступом.

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

Следующие шаги