PgBouncer en Azure Database for PostgreSQL: servidor flexible

SE APLICA A: Azure Database for PostgreSQL: servidor flexible

El servidor flexible de Azure Database for PostgreSQL ofrece PgBouncer como una solución de agrupación de conexiones integrada. PgBouncer es una característica opcional que puede habilitar por servidor de base de datos. Es compatible con los niveles de computación de propósito general y optimizados para memoria, tanto en redes de acceso público como privado.

PgBouncer se ejecuta en la misma máquina virtual que el servidor de bases de datos para el servidor flexible de Azure Database for PostgreSQL. Postgres usa un modelo basado en procesos para las conexiones, por lo que mantener muchas conexiones inactivas es costosa. Postgres se ejecuta en restricciones de recursos cuando el servidor ejecuta más de mil conexiones. La principal ventaja de PgBouncer es que mejora las conexiones inactivas y las conexiones de corta duración en el servidor de bases de datos.

PgBouncer usa un modelo ligero que utiliza E/S asincrónica. Utiliza las conexiones Postgres solo cuando es necesario, es decir, cuando está dentro de una transacción abierta o cuando una consulta está activa. Este modelo permite escalar hasta 10 000 conexiones con una sobrecarga baja.

PgBouncer se ejecuta en el puerto 6432 en el servidor de bases de datos. Puede cambiar la configuración de la conexión a la base de datos de su aplicación para utilizar el mismo nombre de host, pero cambiar el puerto a 6432 para empezar a utilizar PgBouncer y beneficiarse de un escalado mejorado de las conexiones inactivas.

PgBouncer en el servidor flexible de Azure Database for PostgreSQL admite Autenticación de Microsoft Entra.

Habilitación y configuración de protocolos

Para habilitar PgBouncer, vaya al panel de parámetros del servidor en el Azure Portal, busque PgBouncer y cambie la configuración pgbouncer.enabled a true. No es necesario reiniciar el servidor.

Puede configurar los valores de PgBouncer mediante estos parámetros.

Nota:

La siguiente lista de parámetros de servidor PgBouncer está visible en el panel Parámetros del servidor solo si el parámetro pgbouncer.enabled está establecido en true. De lo contrario, están deliberadamente ocultos.

Nombre de parámetro Descripción Default
pgbouncer.default_pool_size Establezca este valor de parámetro en el número de conexiones por par de usuario/base de datos. 50
pgbouncer.ignore_startup_parameters Escriba una lista separada por comas de parámetros que PgBouncer puede omitir. Por ejemplo, puede permitir que PgBouncer ignore el parámetro extra_float_digits. Algunos parámetros están permitidos; todos los demás provocan un error. Esta capacidad es necesaria para tolerar el exceso de Java Database Connectivity (JDBC) querer establecer incondicionalmente extra_float_digits=2 en los paquetes de inicio. Use esta opción si la biblioteca que usa notifica errores como pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Establezca el valor de este parámetro en el mayor número de conexiones de cliente a PgBouncer que desea admitir. 5000
pgbouncer.max_prepared_statements Cuando se establece en un valor distinto de cero PgBouncer realiza un seguimiento de los comandos relacionados con el nivel de protocolo denominados instrucciones preparadas enviadas por el cliente en modo de agrupación de transacciones y instrucciones. 0
pgbouncer.min_pool_size Agregue más conexiones de servidor al grupo si está por debajo de este número. 0
pgbouncer.pool_mode Establezca este valor de parámetro en TRANSACTION para la agrupación de transacciones (que es la configuración recomendada para la mayoría de las cargas de trabajo). transacción
pgbouncer.query_wait_timeout Tiempo máximo (en segundos) que se permite que esperen las consultas para la ejecución. Si la consulta no se asigna a un servidor durante ese tiempo, el cliente se desconecta. 120
pgbouncer.server_idle_timeout Si una conexión de servidor lleva inactiva más de este número de segundos, se eliminará. Si el valor es 0, se deshabilita el tiempo de espera. 600
pgbouncer.stats_users Lista separada por comas de usuarios de base de datos que pueden conectarse y ejecutar consultas de solo lectura en la consola pgBouncer.

Para obtener más información sobre las configuraciones de PgBouncer, consulte la documentación de pgbouncer.ini.

En la tabla siguiente se muestran las versiones de PgBouncer implementadas actualmente junto con cada versión principal de PostgreSQL:

PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
1.22.1 1.22.1 1.22.1 1.22.1 1.22.1 1.22.1

Ventajas

Con la característica PgBouncer integrada con el servidor flexible de Azure PostgreSQL Database, puede obtener estas ventajas:

  • Comodidad de la configuración simplificada: dado que PgBouncer está integrado con el servidor flexible de Azure DB for PostgreSQL, no es necesario realizar una instalación independiente ni una instalación compleja. Puede configurarlo directamente desde los parámetros del servidor.

  • Confiabilidad de un servicio administrado: PgBouncer ofrece las ventajas de los servicios administrados de Azure. Por ejemplo, Azure administra las actualizaciones de PgBouncer. Las actualizaciones automáticas eliminan la necesidad de mantenimiento manual y garantizan que PgBouncer se mantenga actualizado con las últimas características y parches de seguridad.

  • Compatibilidad con varios tipos de conexión: PgBouncer en el servidor flexible de Azure DB for PostgreSQL proporciona compatibilidad con conexiones públicas y privadas. Puede usarlo para establecer conexiones seguras a través de redes privadas o conectarse externamente, según sus requisitos específicos.

  • Alta disponibilidad en escenarios de conmutación por error: si se promueve un servidor en espera al rol principal durante una conmutación por error, PgBouncer se reinicia sin problemas en el modo de espera recién promocionado. No es necesario realizar ningún cambio en la cadena de conexión de la aplicación. Esta capacidad ayuda a garantizar la disponibilidad continua y minimiza la interrupción del grupo de conexiones de la aplicación.

Supervisión de las PgBouncer

Métricas

El servidor flexible Azure DB for PostgreSQL proporciona seis métricas para supervisar la agrupación de conexiones PgBouncer:

Nombre para mostrar Identificador de la métrica Unidad descripción Dimensión Valor predeterminado habilitado
Conexiones de cliente activas (versión preliminar) client_connections_active Count Conexiones de clientes asociados a una conexión de servidor flexible de Azure Database for PostgreSQL. DatabaseName No
Cliente en espera de conexiones (versión preliminar) client_connections_waiting Count Conexiones de clientes que están esperando una conexión de un servidor flexible de Azure Database for PostgreSQL que les dé servicio. DatabaseName No
Conexiones de servidor activo (versión preliminar) server_connections_active Count Conexiones con el servidor flexible de Azure Database for PostgreSQL que usa una conexión de cliente DatabaseName No
Conexiones de servidor inactivas (versión preliminar) server_connections_idle Count Conexiones con el servidor flexible de Azure Database for PostgreSQL que están inactivos y listos para atender una nueva conexión de cliente DatabaseName No
Total de conexiones agrupadas (versión preliminar) total_pooled_connections Count Número actual de conexiones agrupadas DatabaseName No
Número de grupos de conexiones (versión preliminar) num_pools Count Número total de grupos de conexiones DatabaseName No

Para obtener más información, consulte las métricas de PgBouncer.

Consola de administración

PgBouncer también proporciona una base de datos interna denominada pgbouncer. Al conectarse a esa base de datos, puede ejecutar comandos SHOW que proporcionan información sobre el estado actual de PgBouncer.

Para conectarse a la base de datos pgbouncer:

  1. Establezca el parámetro pgBouncer.stats_users en el nombre de un usuario existente (por ejemplo, myUser) y aplique los cambios.

  2. Conéctese a la base de datos pgbouncer como este usuario y establezca el puerto como 6432:

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

Después de conectarse a la base de datos, use SHOW comandos para ver las estadísticas de PgBouncer:

  • SHOW HELP: muestra todos los comandos disponibles SHOW.
  • SHOW POOLS: muestra el número de conexiones en cada estado de cada grupo.
  • SHOW DATABASES: muestra los límites de conexión aplicados actualmente para cada base de datos.
  • SHOW STATS: mostrar estadísticas sobre solicitudes y tráfico para cada base de datos.

Para obtener más información sobre los comandos SHOW de PgBouncer, consulte Consola de administrador.

Cambio de la aplicación para usar PgBouncer

Para empezar a usar PgBouncer, siga estos pasos:

  1. Conéctese al servidor de bases de datos, pero use el puerto 6432 en lugar del puerto 5432 normal. Compruebe que esta conexión funciona.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Pruebe la aplicación en un entorno de control de calidad con PgBouncer para asegurarse de que no tiene ningún problema de compatibilidad. El proyecto PgBouncer proporciona una matriz de compatibilidad y recomendamos la agrupación transacciones para la mayoría de los usuarios.

  3. Cambie la aplicación de producción para conectarse al puerto 6432 en lugar de 5432. Supervise los errores del lado de la aplicación que puedan apuntar a problemas de compatibilidad.

PgBouncer en alta disponibilidad con redundancia de zona

En los servidores de alta disponibilidad (HA) redundantes por zonas, el servidor principal ejecuta PgBouncer. Puede conectarse a PgBouncer en el servidor principal a través del puerto 6432. Después de una conmutación por error, PgBouncer se reinicia en el modo de espera recién promocionado, que ahora es el servidor principal. Por lo tanto, la cadena de conexión de la aplicación sigue siendo la misma después de la conmutación por error.

Uso de PgBouncer con otros grupos de conexiones

En algunos casos, es posible que ya disponga de un grupo de conexiones del lado de la aplicación o que tenga PgBouncer configurado en el lado de la aplicación (por ejemplo, un sidecar de Azure Kubernetes Service). En estos casos, la característica PgBouncer integrada puede ser útil porque proporciona las ventajas del escalado de conexiones inactivas.

El uso de un grupo del lado de la aplicación junto con PgBouncer en el servidor de bases de datos puede ser beneficioso. En este caso, el grupo del lado de la aplicación aporta la ventaja de reducir la latencia de conexión inicial (ya que el recorrido de ida y vuelta para inicializar la conexión es mucho más rápido) y PgBouncer del lado de la base de datos proporciona escalado de conexiones inactivas.

Limitaciones

  • La característica PgBouncer no está soportada actualmente con el nivel de proceso del servidor ampliable. Si cambia el nivel de proceso de uso general u optimizado para memoria a ampliable, perderá la funcionalidad PgBouncer integrada.

  • Siempre que el servidor se reinicie durante las operaciones de escalado, la conmutación por error de alta disponibilidad o un reinicio, PgBouncer y la máquina virtual también se reinician. A continuación, tendrá que volver a establecer las conexiones existentes.

  • El portal no muestra todos los parámetros PgBouncer. Después de habilitar PgBouncer y guardar los parámetros, debe cerrar el panel parámetros de servidor (por ejemplo, seleccione Información general) y luego vuelva al panel de parámetros de servidor.

  • No puede usar los modos de grupo de transacciones y instrucciones junto con instrucciones preparadas. Para comprobar otras limitaciones del modo de grupo elegido, consulte la documentación de PgBouncer.

  • Si PgBouncer se implementa como una característica, se convierte en un único punto de error potencial. Si la característica PgBouncer está inactiva, puede interrumpir todo el grupo de conexiones de base de datos y provocar tiempo de inactividad para la aplicación. Para mitigar el único punto de error, puede configurar varias instancias de PgBouncer detrás de un equilibrador de carga para lograr una alta disponibilidad en máquinas virtuales de Azure.

  • PgBouncer es una aplicación ligera que usa una arquitectura de un solo subproceso. Este diseño es excelente para la mayoría de las cargas de trabajo de aplicaciones. Sin embargo, en las aplicaciones que crean un gran número de conexiones de corta duración, este diseño podría afectar al rendimiento de pgBouncer y limitar la capacidad de escalar la aplicación. Es posible que tenga que probar uno de estos enfoques:

    • Distribuya la carga de conexión entre varias instancias de PgBouncer en máquinas virtuales de Azure.
    • Considere las soluciones alternativas, incluidas las soluciones multiproceso, como PgCat, en máquinas virtuales de Azure.

Importante

El parámetro pgbouncer.client_tls_sslmode de la característica PgBouncer integrada está en desuso en el servidor flexible de Azure Database for PostgreSQL.

Cuando se aplica TLS/SSL para las conexiones con el servidor flexible de Azure DB for PostgreSQL mediante el establecimiento del parámetro de servidor require_secure_transport en ON, TLS/SSL se aplica automáticamente para las conexiones a la característica PgBouncer integrada. Esta configuración está activada de forma predeterminada al crear una nueva instancia de servidor flexible de Azure Database for PostgreSQL y habilitar la característica PgBouncer integrada. Para más información, consulte Introducción a las redes para Azure DB for PostgreSQL: servidor flexible con acceso privado.

Para los clientes que desean una administración simplificada, alta disponibilidad integrada, fácil conectividad con aplicaciones en contenedores y la posibilidad de utilizar los parámetros de configuración más populares, la característica PgBouncer integrada es una buena elección. Para los clientes que quieran escalabilidad multiproceso, el control total de todos los parámetros y una experiencia de depuración, la configuración de PgBouncer en máquinas virtuales de Azure podría ser una alternativa.

Pasos siguientes