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

Uso de PgBouncer Connection Pooler para PostgreSQL con ClusterControl 1.8.2

Las aplicaciones modernas, como los microservicios, generalmente requieren muchas conexiones a la base de datos, también usan y liberan esas conexiones muy rápidamente. Cuando se desarrolló PostgreSQL hace casi 25 años, sus desarrolladores decidieron no usar subprocesos para nuevas solicitudes, sino crear un nuevo proceso para cada solicitud. Si bien esa decisión probablemente tenía sentido en ese entonces, muchas conexiones pueden ser un problema grave en la actualidad. Una de las soluciones para este problema es un grupo de conexiones. En esta publicación de blog, analizaremos el conjunto de conexiones de PgBouncer y cómo utilizarlo en ClusterControl 1.8.2.

Por qué usar el grupo de conexiones

Bueno, la respuesta corta a esta pregunta es que es una solución simple pero efectiva para mejorar el rendimiento de sus aplicaciones, al mismo tiempo que reduce la carga en el servidor PostgreSQL. Profundicemos un poco más en esto, ¿de acuerdo?

Un conjunto de conexiones se puede definir como un caché de conexiones de bases de datos abiertas que los clientes pueden reutilizar. En otras palabras, mitigará la carga en la base de datos al reducir las solicitudes en cada nueva conexión. Esas nuevas conexiones son básicamente generadas por el proceso de postmaster cada vez que se establece una conexión, lo que comúnmente requerirá alrededor de 2 a 3 MB de memoria por conexión.

Sin un conjunto de conexiones, esto generará un problema siempre que la cantidad de conexiones sea demasiado alta, ya que el administrador de correo necesita proporcionar mucha memoria. En PostgreSQL, el grupo de conexiones es administrado por PgBouncer.

¿Qué es PgBouncer

PgBouncer es un agrupador de conexiones ligero, binario único, de código abierto y probablemente el más popular para PostgreSQL. PgBouncer es una utilidad simple que hace exactamente una cosa, se ubica entre la base de datos y los clientes y habla el protocolo PostgreSQL, copiando un servidor PostgreSQL. En el momento de escribir este artículo, la última versión de PgBouncer es 1.15.0.

Veamos cuáles son algunas de las mejores características que ofrece, y probablemente la razón por la que es tan popular en el mundo de PostgreSQL:

  • Ligero:solo un proceso, todas las solicitudes del cliente y las respuestas del servidor pasan por PgBouncer sin ningún otro procesamiento

  • Configuración sencilla:no requiere cambios en el código del lado del cliente y es uno de los agrupadores de conexiones de PostgreSQL más simples de configurar

  • Escalabilidad y rendimiento:se adapta bien a una gran cantidad de clientes y al mismo tiempo aumenta significativamente las transacciones por segundo que el servidor PostgreSQL puede soportar

Pasos para configurar PgBouncer con ClusterControl

Hay algunos pasos para instalar y configurar PgBouncer con ClusterControl. En esta sección, seguiremos los pasos siempre que ya haya implementado el clúster de PostgreSQL. Si aún no tiene el clúster, puede seguir la guía en esta publicación de blog.

Desde su interfaz de usuario web> Seleccione Clúster de PostgreSQL> Administrar> Equilibrador de carga> Seleccione la pestaña PgBouncer y aparecerá la siguiente captura de pantalla. Aquí puede elegir si implementar o importar PgBouncer, en este ejemplo, elegiremos implementar.:

Puede seleccionar el nodo del menú desplegable, especificar el puerto, agregar ' Usuario administrador de PgBouncer', así como la contraseña y haga clic en 'Implementar PgBouncer'. El trabajo comenzará a ejecutarse y el estado comenzará a aparecer en esta pantalla, también puede monitorearlo en la pestaña 'Actividad'.

Después de que el nodo PgBouncer se implemente con éxito, el siguiente paso es crear el grupo de conexiones. Desde su Clúster> Nodos> Seleccione el nodo PgBouncer y aparecerá la siguiente captura de pantalla:

La pantalla de conexión aparecerá una vez que haga clic en 'Crear grupo de conexiones' botón. Puede completar toda la información y actualizar el valor según su configuración, para este ejemplo usaremos el valor predeterminado para 'Modo de grupo', 'Tamaño de grupo' y 'Conexión máxima de base de datos':

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 maestro de PostgreSQL o cree uno nuevo.

  • Modo de grupo:sesión (predeterminado), transacción o agrupación de extractos.

    • sesión (predeterminado):el servidor se libera nuevamente al grupo después de que el cliente se desconecta

    • transacción:el servidor se devuelve al grupo después de que finaliza la transacción

    • declaración:El servidor se devuelve al grupo después de que finaliza la consulta. Las transacciones que abarcan varios extractos no están permitidas en este modo

  • 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.

El grupo de conexiones aparecerá después de hacer clic en el botón 'Finalizar' como se muestra en la captura de pantalla a continuación y tanto PgBouncer como el grupo de conexiones ahora están listos:

Conclusión

Usar el grupo de conexiones y PgBouncer son algunos de los pasos para mejorar el rendimiento de su aplicación cuando se trata de alta disponibilidad. Con ClusterControl, puede implementar PgBouncer y crear un grupo de conexiones de manera fácil y rápida.

Para hacerlo aún mejor, también sugerimos implementar HAProxy además de PgBouncer. La función HAProxy está disponible en ClusterControl y, en el momento de escribir este artículo, la versión que estamos utilizando es la 1.8.23.