pgpool-II

Тема дорожной карты · PostgreSQL

pgpool-II — продвинутый промежуточный сервер для PostgreSQL, предоставляющий пулинг соединений, балансировку нагрузки для запросов чтения по репликам, автоматическое переключение при сбое и кэширование запросов в едином компоненте. В отличие от PgBouncer, сосредоточенного исключительно на пулинге соединений, pgpool-II понимает топологию репликации PostgreSQL и может автоматически направлять операторы SELECT на резервные серверы, а записи — на основной, что делает его комплексным инструментом администрирования баз данных в высокодоступных конфигурациях. pgpool-II реализует собственный механизм проверки работоспособности для обнаружения сбоев основного или резервного серверов и может инициировать продвижение резервного в основной через настраиваемый скрипт переключения при сбое, сокращая целевое время восстановления в средах репликации PostgreSQL. Компромисс — повышенная операционная сложность: pgpool-II требует тщательной настройки файлов pgpool.conf, pcp.conf и pool_hba.conf для корректной работы. Для команд, которым помимо пулинга соединений необходимы маршрутизация запросов и автоматическое переключение при сбое, pgpool-II является зрелым инфраструктурным компонентом PostgreSQL, заслуживающим оценки наряду с более простыми альтернативами — PgBouncer и repmgr.

Как это работает

pgpool-II мультиплексирует много app-уровневых соединений на несколько реальных Postgres-backend. Каждое соединение Postgres ест ~10MB RAM + backend-процесс; тысячи idle app-соединений вычерпывают сервер. PgBouncer (transaction-level pooling — дефолт и самый полезный) и PgCat — стандартные инструменты. App-уровневые пулы (HikariCP, pg-pool) держат сторону приложения. Комбинируйте оба слоя в серьёзном production.

Когда применять

PgBouncer — когда app pod × размер пула > max_connections Postgres. transaction-режим по дефолту; session — если приложение использует prepared statements, advisory lock или session GUC, которые должны жить. App-side pool — ~10-20 на worker; PgBouncer гасит всплески. Тестируйте pgbench -c <ожидаемая конкурентность> до запуска.

Типичные ошибки

Ловушки pgpool-II: забыли, что transaction-режим ломает prepared statements (PG 14+ имеет server-side cache, но проверьте драйвер); PgBouncer один поток на гигантском боксе (не масштабирует 32 ядра — несколько процессов или PgCat); нет мониторинга pool wait time (клиенты тихо блокируются на полном пуле). Читайте SHOW STATS PgBouncer.

Связанные понятия

Полезные ресурсы