Les applications modernes telles que les microservices nécessitent généralement de nombreuses connexions à la base de données, elles utilisent et libèrent également ces connexions très rapidement. Lorsque PostgreSQL a été développé il y a près de 25 ans, ses développeurs ont décidé de ne pas utiliser de threads pour les nouvelles requêtes, mais plutôt de créer un nouveau processus pour chaque requête. Bien que cette décision ait probablement du sens à l'époque, de nombreuses connexions peuvent être un problème sérieux aujourd'hui. L'une des solutions à ce problème est un pool de connexions. Dans cet article de blog, nous discuterons du pool de connexions PgBouncer et de la manière de l'utiliser dans ClusterControl 1.8.2.
Pourquoi utiliser le pool de connexions
Eh bien, la réponse courte à cette question est que c'est une solution simple mais efficace pour améliorer les performances de vos applications, tout en réduisant la charge sur le serveur PostgreSQL. Allons un peu plus loin là-dessus, d'accord ?
Un pool de connexions peut être défini comme un cache de connexions de base de données ouvertes réutilisables par les clients. En d'autres termes, cela atténuera la charge sur la base de données en réduisant les requêtes à chaque nouvelle connexion. Ces nouvelles connexions sont essentiellement générées par le processus postmaster chaque fois qu'une connexion est établie, ce qui prend généralement environ 2 à 3 Mo de mémoire par connexion.
Sans un pool de connexion, cela conduira à un problème chaque fois que le nombre de connexions est trop élevé car le postmaster doit fournir beaucoup de mémoire. Dans PostgreSQL, le pool de connexion est géré par PgBouncer.
Qu'est-ce que PgBouncer
PgBouncer est un pooler de connexions léger, à un seul binaire, open-source et probablement le plus populaire pour PostgreSQL. PgBouncer est un utilitaire simple qui fait exactement une chose, il se situe entre la base de données et les clients et parle du protocole PostgreSQL, copiant un serveur PostgreSQL. Au moment de la rédaction, la dernière version de PgBouncer est la 1.15.0.
Voyons quelles sont certaines des meilleures fonctionnalités qu'il offre, et probablement la raison pour laquelle il est si populaire dans le monde PostgreSQL :
-
Léger - un seul processus, toutes les requêtes du client et les réponses du serveur passent par PgBouncer sans aucune autre traitement
-
Configuration facile - ne nécessite aucune modification du code côté client et l'un des pooleurs de connexions PostgreSQL les plus simples à configurer
-
Évolutivité et performances - il s'adapte bien à un grand nombre de clients et en même temps augmente considérablement les transactions par seconde que le serveur PostgreSQL peut prendre en charge
Étapes pour configurer PgBouncer avec ClusterControl
Il y a quelques étapes pour installer et configurer PgBouncer avec ClusterControl. Dans cette section, nous passerons en revue les étapes à condition que le cluster PostgreSQL soit déjà déployé. Si vous n'avez pas encore le cluster, vous pouvez suivre le guide de cet article de blog.
Depuis votre interface utilisateur Web > Sélectionnez PostgreSQL Cluster > Gérer > Équilibreur de charge > Sélectionnez l'onglet PgBouncer et la capture d'écran suivante apparaîtra. Ici, vous pouvez choisir de déployer ou d'importer PgBouncer, dans cet exemple, nous choisirons Deploy. :
Vous pouvez sélectionner le nœud dans la liste déroulante, spécifier le port, ajouter ' PgBouncer Admin User' ainsi que le mot de passe et cliquez sur 'Deploy PgBouncer'. Le travail commencera à s'exécuter et le statut commencera à apparaître sur cet écran, vous pouvez également le surveiller dans l'onglet "Activité".
Une fois le nœud PgBouncer déployé avec succès, l'étape suivante consiste à créer le pool de connexions. Depuis votre Cluster> Nœuds> Sélectionnez le nœud PgBouncer et la capture d'écran suivante apparaît :
L'écran de connexion apparaîtra une fois que vous aurez cliqué sur "Créer un pool de connexions" bouton. Vous pouvez remplir toutes les informations et mettre à jour la valeur en fonction de votre configuration, pour cet exemple, nous utiliserons la valeur par défaut pour "Pool Mode", "Pool Size" et "Max Database Connection":
Ici, vous devrez ajouter les informations suivantes :
-
Nom d'hôte PgBouncer :sélectionnez les hôtes de nœud pour créer le pool de connexion.
-
Nom du pool :les noms du pool et de la base de données doivent être identiques.
-
Nom d'utilisateur : Sélectionnez un utilisateur dans le nœud maître PostgreSQL ou créez-en un nouveau.
-
Mode pool :session (par défaut), transaction ou regroupement d'instructions.
-
session (par défaut) :le serveur est libéré dans le pool après la déconnexion du client
-
transaction :le serveur est renvoyé au pool une fois la transaction terminée
-
instruction :le serveur est renvoyé au pool une fois la requête terminée. Les transactions couvrant plusieurs relevés ne sont pas autorisées dans ce mode
-
-
Taille du pool :taille maximale des pools pour cette base de données. La valeur par défaut est 20.
-
Nombre maximal de connexions à la base de données :configurez un maximum à l'échelle de la base de données. La valeur par défaut est 0, ce qui signifie illimité.
Le pool de connexion apparaîtra après avoir cliqué sur le bouton "Terminer" comme indiqué sur la capture d'écran ci-dessous et PgBouncer et le pool de connexion sont maintenant prêts :
Conclusion
L'utilisation du pool de connexions et de PgBouncer fait partie des étapes permettant d'améliorer les performances de votre application en matière de haute disponibilité. Avec ClusterControl, vous pouvez déployer PgBouncer ainsi que créer un pool de connexion facilement et rapidement.
Pour le rendre encore meilleur, nous suggérons également de déployer HAProxy en plus de PgBouncer. La fonctionnalité HAProxy est disponible dans ClusterControl et au moment de la rédaction, la version que nous utilisons est 1.8.23.