sql >> Base de Datos >  >> RDS >> PostgreSQL

Gestión de conexiones en PostgreSQL:una guía

El rendimiento siempre es importante en cualquier sistema. Deberá hacer un buen uso de los recursos disponibles para garantizar el mejor tiempo de respuesta posible y hay diferentes maneras de hacerlo. Cada conexión a una base de datos consume recursos, por lo que una de estas formas es tener un buen administrador de conexión entre su aplicación y la base de datos. En este blog, hablaremos sobre pgBouncer, un agrupador de conexiones para PostgreSQL, y mostraremos cómo implementarlo para mejorar el rendimiento de PostgreSQL.

Agrupadores de conexiones

Dependiendo del tráfico de sus sistemas, podría ser útil agregar una herramienta externa para reducir la carga en su base de datos, lo que mejorará el rendimiento. Tal vez no sea suficiente, pero es un buen punto de partida. Para ello, es una buena idea implementar un agrupador de conexiones 

Una agrupación de conexiones es un método para crear un conjunto de conexiones y reutilizarlas, evitando abrir nuevas conexiones a la base de datos todo el tiempo, lo que aumentará considerablemente el rendimiento de sus aplicaciones. PgBouncer es un agrupador de conexiones popular diseñado para PostgreSQL.

Cómo funciona PgBouncer

PgBouncer actúa como un servidor PostgreSQL, por lo que solo necesita acceder a su base de datos utilizando la información de PgBouncer (dirección IP/nombre de host y puerto), y PgBouncer creará una conexión con el servidor PostgreSQL, o reutilice uno si existe.

Cuando PgBouncer recibe una conexión, realiza la autenticación, que depende del método especificado en el archivo de configuración. PgBouncer admite todos los mecanismos de autenticación que admite el servidor PostgreSQL. Después de esto, PgBouncer busca una conexión en caché, con la misma combinación de nombre de usuario y base de datos. Si se encuentra una conexión en caché, devuelve la conexión al cliente, si no, crea una nueva conexión. Según la configuración de PgBouncer y la cantidad de conexiones activas, es posible que la nueva conexión se ponga en cola hasta que se pueda crear o incluso cancelar.

El comportamiento de PgBouncer depende del modo de agrupación configurado:

  • agrupación de sesiones (predeterminado):cuando un cliente se conecta, se le asigna una conexión de servidor para todo el tiempo que el cliente permanece conectado. Cuando el cliente se desconecte, la conexión del servidor se volverá a colocar en el grupo.

  • agrupación de transacciones:una conexión de servidor se asigna a un cliente solo durante una transacción. Cuando PgBouncer se dé cuenta de que la transacción ha terminado, la conexión del servidor se volverá a colocar en el grupo.

  • agrupación de sentencias:la conexión del servidor se volverá a colocar en la agrupación inmediatamente después de que se complete una consulta. Las transacciones de varios estados de cuenta no están permitidas en este modo porque se romperían.

Cómo implementar PgBouncer usando ClusterControl

Para esto, supondremos que tiene su clúster de PostgreSQL funcionando y está utilizando ClusterControl para administrarlo; de lo contrario, puede seguir esta publicación de blog para implementar fácilmente PostgreSQL para alta disponibilidad.

Vaya a ClusterControl -> Seleccione Clúster de PostgreSQL -> Acciones de clúster -> Agregar equilibrador de carga -> PgBouncer. Allí puede implementar un nuevo nodo PgBouncer que se implementará en el nodo de base de datos seleccionado, o incluso importar un nodo PgBouncer existente.

Deberá especificar la dirección IP o el nombre de host, el puerto de escucha y PgBouncer cartas credenciales. Cuando presiona Implementar PgBouncer, ClusterControl accederá al nodo, instalará y configurará todo sin ninguna intervención manual.

Puede monitorear el progreso en la Sección de Actividad de ClusterControl. Cuando termine, debe crear el nuevo grupo. Para esto, vaya a ClusterControl -> Seleccione el clúster de PostgreSQL -> Nodos -> Nodo PgBouncer.

Aquí deberá agregar la siguiente información:

  • Nombre de host de PgBouncer:seleccione los hosts del nodo para crear el grupo de conexiones.

  • Nombre del grupo:los nombres del grupo y de la base de datos deben ser iguales.

  • Nombre de usuario:seleccione un usuario del nodo principal de PostgreSQL o cree uno nuevo.

  • Modo Pool:Puede ser uno de los modos que mencionamos anteriormente:sesión (predeterminado), transacción, o agrupación de extractos.

  • Tamaño de la agrupación:tamaño máximo de las agrupaciones para esta base de datos. El valor predeterminado es 20.

  • Conexiones máximas de base de datos:configure un máximo para toda la base de datos. El valor predeterminado es 0, lo que significa ilimitado.

Ahora, debería poder ver el Grupo en la sección Nodo.

Esta es una topología básica. Puedes mejorarlo, por ejemplo, agregando nodos de balanceo de carga, más de uno para evitar un solo punto de falla, y usando alguna herramienta como “Keepalived”, para asegurar la disponibilidad. También se puede hacer usando ClusterControl.

Conclusión

Usar PgBouncer como un agrupador de conexiones es una buena manera de mejorar el rendimiento de la base de datos haciendo un buen uso de los recursos disponibles en el servidor.

También puede mejorar esta topología mediante el uso de una combinación de PgBouncer + HAProxy para lograr una alta disponibilidad para su clúster de PostgreSQL. Todas estas cosas se pueden hacer desde la misma interfaz de usuario de ClusterControl.