Pool de conexiones PgBouncer
PostgreSQLNivel: IntermedioDuración: 30–45 minInstalación de PgBouncer desde el repositorio PGDG: modo de pool transaction o session, autenticación scram-sha-256 mediante auth_query (función SECURITY DEFINER) o userlist.txt, tamaños de pool calculados según max_connections y el número de CPU de la base de datos, systemd y, opcionalmente, varios procesos con so_reuseport. Al final: consola de administración (SHOW POOLS/STATS), cadena de conexión de la aplicación y lista de comprobación de compatibilidad con el modo transaction.
Cuándo usarlo: las aplicaciones abren cientos o miles de conexiones, aparece sorry, too many clients already o abrir conexiones resulta costoso. PgBouncer no es una solución de HA ni de backup: para failover se necesita streaming replication o Patroni, y para el backup pgBackRest.
Topología: PgBouncer en el servidor de base de datos o en un servidor aparte; con Patroni, delante de HAProxy/VIP
Antes de empezar
- PostgreSQL está instalado con la guía pg-install y en funcionamiento; existen la base de datos … y el usuario … (con contraseña scram-sha-256).
- …El cluster Patroni de PostgreSQL (pg-patroni) está en funcionamiento; … es ahora el Leader…El primary de PostgreSQL (pg-streaming) está en funcionamiento…PostgreSQL está instalado con la guía pg-install y en funcionamiento…; existen la base de datos … y el usuario … (con contraseña scram-sha-256).
- El cluster Patroni … está sano: un Leader, réplicas en streaming; el puerto de escritura de HAProxy (…:…) solo va al leader.
- La contraseña del usuario de la aplicación se guarda en formato SCRAM-SHA-256 (los usuarios con hashes md5 antiguos deben volver a recibir la contraseña con password_encryption = scram-sha-256).
- Los valores max_connections (…) y CPU (…) del formulario coinciden con los valores reales del servidor de base de datos (los tamaños de pool se calculan a partir de ellos).
- El servidor PgBouncer puede acceder a la base de datos (…HAProxy/VIP ……:…); los servidores de aplicación pueden acceder a PgBouncer (…:…).
- El puerto … está libre.
- El modo de pool se ha acordado con el equipo de aplicación: en modo transaction no se usan funcionalidades que dependan del estado de la sesión (lista de comprobación más abajo).
- Hay acceso scp (root o un usuario con sudo) para copiar los hashes de contraseña del servidor de base de datos al servidor PgBouncer, o el archivo se trasladará por otra vía segura.
Fases de la guía
- Instalación de PgBouncer — Añadir el repositorio PGDG · Añadir el repositorio PGDG · Instalar PgBouncer
- Lado de la base de datos — Verificar el rol: ¿es este servidor el …Leader…primary…? · Crear los usuarios de administración y de autenticación · Crear los usuarios de administración y de autenticación · Asignar las contraseñas · Asignar las contraseñas · Añadir el servidor PgBouncer a pg_hba.conf …
- Configuración de PgBouncer — Añadir la contraseña de auth_user · Escribir pgbouncer.ini · Ajustar el límite de descriptores de archivo · Iniciar PgBouncer
- Varios procesos (so_reuseport) — Archivos de configuración por proceso · Servicio plantilla de systemd · Parar el servicio de un solo proceso e iniciar los procesos
- Verificación — Conectarse con el usuario de la aplicación · Verificar que las conexiones llegan al leader · Comprobar la consola de administración · Abrir el puerto de PgBouncer en el firewall
- Lado de la aplicación y después de la instalación — Cadena de conexión de la aplicación · Lista de comprobación de compatibilidad con el modo transaction · Monitorizar el pool · Cambio de parámetros y recarga