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.