Partager via


PgBouncer dans Azure Database pour PostgreSQL - Serveur flexible

S’APPLIQUE À : Azure Database pour PostgreSQL : serveur flexible

Azure Database pour PostgreSQL – Serveur flexible offre PgBouncer comme solution de regroupement de connexions intégrée. PgBouncer est une fonctionnalité facultative que vous pouvez activer pour chaque serveur de base de données individuellement. Elle est prise en charge sur les niveaux de calcul Usage général et À mémoire optimisée dans les réseaux d’accès public et privé.

PgBouncer s’exécute sur la même machine virtuelle que le serveur de base de données pour le serveur flexible Azure Database pour PostgreSQL. Postgres utilise un modèle basé sur les processus pour les connexions, de sorte que la maintenance de nombreuses connexions inactives est coûteuse. Postgres s’exécute dans des contraintes de ressources lorsque le serveur exécute plus de mille connexions. Le principal avantage de PgBouncer est qu’il améliore les connexions inactives et les connexions à courte durée de vie sur le serveur de base de données.

PgBouncer utilise un modèle léger qui exploite des entrée/sorties asynchrones. Il utilise les connexions Postgres uniquement si nécessaire, c'est-à-dire lorsqu'une transaction est ouverte ou lorsqu'une requête est active. Ce modèle permet une mise à l’échelle jusqu’à 10 000 connexions avec une faible surcharge.

PgBouncer s’exécute sur le port 6432 de votre serveur de base de données. Vous pouvez modifier la configuration de la connexion de base de données de votre application pour qu’elle utilise le même nom d’hôte, mais modifiez le port sur 6432 pour commencer à utiliser PgBouncer et tirer parti de la mise à l’échelle améliorée des connexions inactives.

PgBouncer dans le serveur flexible Azure Database pour PostgreSQL prend en charge l’authentification Microsoft Entra (Azure AD).

Activation et configuration de PgBouncer

Pour activer PgBouncer, accédez au volet Paramètres du serveur dans le portail Azure, recherchez PgBouncer et remplacez le paramètre pgbouncer.enabled par true. Il est inutile de redémarrer le serveur.

Vous pouvez configurer les paramètres PgBouncer à l’aide de ces paramètres.

Remarque

La liste suivante des paramètres de serveur PgBouncer est visible dans le volet Paramètres du serveur uniquement si le paramètre du serveur pgbouncer.enabled est défini sur true. Sinon, ils sont délibérément cachés.

Nom du paramètre Description Default
pgbouncer.default_pool_size Définissez la valeur de ce paramètre sur le nombre de connexions par paire utilisateur/base de données. 50
pgbouncer.ignore_startup_parameters Entrez une liste de paramètres séparés par des virgules que PgBouncer peut ignorer. Par exemple, vous pouvez laisser PgBouncer ignorer le paramètre extra_float_digits. Certains paramètres sont autorisés, tous les autres occasionnent une erreur. Cela est nécessaire pour tolérer les connexions Java Database Connectivity (JDBC) excessivement enthousiastes voulant définir de manière inconditionnelle extra_float_digits=2 dans les paquets de démarrage. Utilisez cette option si la bibliothèque que vous utilisez signale des erreurs telles que pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Définissez la valeur de ce paramètre sur le plus grand nombre de connexions clientes à PgBouncer que vous souhaitez prendre en charge. 5 000
pgbouncer.max_prepared_statements Lorsqu’il est défini sur une valeur non nulle PgBouncer, le protocole effectue le suivi des commandes préparées nommées au niveau du protocole envoyées par le client en mode de regroupement des transactions et des instructions. 0
pgbouncer.min_pool_size Ajoutez plus de connexions au serveur pour le pool si le nombre actuel est inférieur à celui défini. 0
pgbouncer.pool_mode Définissez cette valeur de paramètre sur TRANSACTION pour le regroupement de transactions (ce qui est le paramètre recommandé pour la plupart des charges de travail). transaction
pgbouncer.query_wait_timeout Durée maximale (en secondes) que les requêtes sont autorisées à passer en attente d’exécution. Si la requête n’est pas affectée à un serveur pendant ce temps, le client est déconnecté. 120
pgbouncer.server_idle_timeout Une connexion de serveur ayant été inactive au-delà de ce nombre de secondes sera interrompue. Si la valeur est 0, le délai d’attente est désactivé. 600
pgbouncer.stats_users Liste séparée par des virgules des utilisateurs de base de données autorisés à se connecter et à exécuter des requêtes en lecture seule sur la console pgBouncer.

Pour plus d’informations sur les configurations PgBouncer, consultez la documentation pgbouncer.ini.

Version de PgBouncer

Actuellement, la version de PgBouncer déployée sur toutes les versions principales prises en charge du moteur (16, 15, 14, 13, 12, 11), dans le serveur flexible Azure Database pour PostgreSQL, est la version 1.22.1.

Avantages

En utilisant la fonctionnalité PgBouncer intégrée avec un serveur flexible Azure Database pour PostgreSQL, vous pouvez bénéficier de ces avantages :

  • Commodité de la configuration simplifiée : étant donné que PgBouncer est intégré au serveur flexible Azure Database pour PostgreSQL, il n’est pas nécessaire d’effectuer une installation distincte ou une configuration complexe. Vous pouvez le configurer directement à partir des paramètres du serveur.

  • Fiabilité d’un service géré : PgBouncer offre les avantages des services gérés Azure. Par exemple, Azure gère les mises à jour de PgBouncer. Les mises à jour automatiques éliminent le besoin de maintenance manuelle et la garantissent que PgBouncer reste à jour avec les dernières fonctionnalités et les derniers correctifs de sécurité.

  • Prise en charge des différents types de connexions : PgBouncer dans le serveur flexible Azure Database pour PostgreSQL prend en charge les connexions publiques et privées. Vous pouvez l’utiliser pour établir des connexions sécurisées sur des réseaux privés ou de vous connecter en externe, en fonction de vos besoins précis.

  • Haute disponibilité dans les scénarios de basculement : si un serveur de secours est promu au rôle principal pendant un basculement, PgBouncer redémarre en toute transparence sur le serveur de secours nouvellement promu. Vous n’avez pas besoin de modifier la chaîne de connexion de l'application. Cette capacité permet de garantir une disponibilité continue et réduit les interruptions dans le pool de connexions de l’application.

Surveillance de PgBouncer

Métriques

Le serveur flexible Azure Database pour PostgreSQL fournit six métriques pour monitorer le regroupement de connexions PgBouncer :

Nom d’affichage ID de la métrique Unité description Dimension Par défaut permis
Connexions clients actives (préversion) client_connections_active Count Connexions à partir des clients associés à une connexion Azure Database pour PostgreSQL – Serveur flexible DatabaseName Non
Connexions clients en attente (préversion) client_connections_waiting Count Connexions à partir de clients qui attendent qu’une connexion Azure Database pour PostgreSQL – Serveur flexible soit à leur disposition DatabaseName Non
Connexions actives sur le serveur (préversion) server_connections_active Count Connexions au serveur flexible Azure Database pour PostgreSQL qu’une connexion client utilise DatabaseName Non
Connexions inactives sur le serveur (préversion) server_connections_idle Count Connexions au serveur flexible Azure Database pour PostgreSQL inactives et prêtes à servir une nouvelle connexion client DatabaseName Non
Nombre total de connexions groupées (préversion) total_pooled_connections Count Nombre actuel de connexions mises en pool DatabaseName Non
Nombre de pools de connexions (préversion) num_pools Count Nombre total de pools de connexions DatabaseName Non

Pour découvrir plus d’informations, reportez-vous aux métriques de PgBouncer.

Console d’administration

PgBouncer fournit également une base de données interne appelée pgbouncer. Lorsque vous vous connectez à cette base de données, vous pouvez exécuter des commandes SHOW qui fournissent des informations sur l’état actuel de PgBouncer.

Pour se connecter à la base de données pgbouncer :

  1. Définissez le paramètre pgBouncer.stats_users sur le nom d’un utilisateur existant (par exemple, myUser) et appliquez les modifications.

  2. Connectez-vous à la base de données pgbouncer en tant qu’utilisateur et définissez le port comme 6432 :

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

Une fois que vous êtes connecté à la base de données, utilisez les commandes SHOW pour afficher les statistiques PgBouncer :

  • SHOW HELP : répertorie toutes les commandes SHOW disponibles.
  • SHOW POOLS : affiche le nombre de connexions dans chaque état pour chaque pool.
  • SHOW DATABASES : affiche les limites de connexion appliquées actuellement pour chaque base de données.
  • SHOW STATS : affiche les statistiques sur les requêtes et le trafic pour chaque base de données.

Pour plus d’informations sur les commandes SHOW PgBouncer, consultez la Console d’administration.

Basculement de votre application pour utiliser PgBouncer

Pour commencer à utiliser PgBouncer, procédez comme suit :

  1. Connectez-vous à votre serveur de base de données, mais utilisez le port 6432 au lieu du port 5432 classique. Vérifiez que cette connexion fonctionne.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Testez votre application dans un environnement d’assurance qualité sur PgBouncer pour vous assurer que vous n’avez pas de problème de compatibilité. Le projet PgBouncer fournit une matrice de compatibilité, et nous recommandons le regroupement de transactions pour la plupart des utilisateurs.

  3. Modifiez votre application de production pour vous connecter au port 6432 au lieu de 5432. Surveillez les erreurs côté application susceptibles de pointer vers des problèmes de compatibilité.

PgBouncer en haute disponibilité redondant interzone

Dans les serveurs haute disponibilité redondant interzone, le serveur principal exécute PgBouncer. Vous pouvez vous connecter à PgBouncer sur le serveur principal sur le port 6432. Après un basculement, PgBouncer est redémarré sur le serveur de secours récemment promu, qui est maintenant le serveur principal. Par conséquent, la chaîne de connexion de votre application reste la même après le basculement.

Utilisation de PgBouncer avec d’autres pools de connexions

Dans certains cas, vous pouvez déjà disposer d’un pool de connexions côté application ou configurer PgBouncer côté application (par exemple, un sidecar Azure Kubernetes Service). Dans ce cas, la fonctionnalité PgBouncer intégrée peut toujours être utile, car elle offre les avantages de la mise à l’échelle des connexions inactives.

L’utilisation d’un pool côté application avec PgBouncer sur le serveur de base de données peut être bénéfique. Ici, le pool côté application offre l’avantage d’une latence de connexion initiale réduite (car l’aller-retour initial pour initialiser la connexion est beaucoup plus rapide), et le PgBouncer côté base de données fournit la mise à l’échelle des connexions inactives.

Limites

  • La fonctionnalité PgBouncer n’est actuellement pas prise en charge avec le niveau de calcul de serveur Burstable. Si vous modifiez le niveau de calcul d’Usage général ou Mémoire optimisée pour Burstable, vous perdez la capacité PgBouncer intégré.

  • Chaque fois que le serveur est redémarré pendant les opérations de mise à l’échelle, le basculement haute disponibilité ou un redémarrage, PgBouncer et la machine virtuelle sont également redémarrés. Vous devez ensuite rétablir les connexions existantes.

  • Le portail n’affiche pas tous les paramètres de PgBouncer. Après avoir activé PgBouncer et enregistré les paramètres, vous devez fermer le volet Paramètres du serveur (par exemple, sélectionnez Vue d’ensemble), puis revenir au volet Paramètres du serveur.

  • Vous ne pouvez pas utiliser les modes de pool d’instructions avec les instructions préparées. La version actuelle de PgBouncer a ajouté la prise en charge des instructions préparées dans le mode transactionnel. Cette prise en charge peut être activée et configurée via le paramètre max_prepared_statements. La définition de ce paramètre au-dessus de la valeur par défaut 0 active la prise en charge des instructions préparées. Cette prise en charge s’applique uniquement aux instructions préparées au niveau du protocole. Pour la plupart des langages de programmation, cela signifie que nous utilisons la fonction libpq PQprepare sur le client, en envoyant des commandes au niveau du protocole que PgBouncer peut intercepter, plutôt que d’émettre une commande SQL dynamique similaire à PREPARE PROC AS, qui envoie du texte que PgBouncer n’interprète pas correctement. Pour vérifier d’autres limitations du mode de pool choisi, reportez-vous à la documentation PgBouncer.

  • Si PgBouncer est déployé comme fonctionnalité, il devient un point de défaillance unique éventuel. En cas de panne de la fonctionnalité PgBouncer, l’ensemble du pool de connexions de base de données peut être perturbé et entraîner un temps d’arrêt de l’application. Pour atténuer le point de défaillance unique, vous pouvez configurer plusieurs instances PgBouncer derrière un équilibreur de charge à des fins de haute disponibilité sur des machines virtuelles Azure.

  • Restriction de taille de jeton avec l’authentification AAD : les utilisateurs disposant d’un grand nombre d’appartenances à un groupe ne pourront pas se connecter via PgBouncer en raison d’une restriction de taille de jeton. Les applications, services et utilisateurs avec un petit nombre de groupes fonctionnent.

  • PgBouncer est une application légère qui utilise une architecture à thread unique. Cette conception est idéale pour la plupart des charges de travail d’application. Toutefois, dans les applications qui créent un grand nombre de connexions de courte durée, cette conception peut affecter les performances de PgBouncer et limiter votre capacité à mettre à l’échelle votre application. Vous devrez peut-être essayer l’une des approches suivantes :

    • Repartissez la charge de connexion sur plusieurs instances PgBouncer sur des machines virtuelles Azure.
    • Envisagez d’autres solutions, y compris des solutions multithread telles que PgCat, sur des machines virtuelles Azure.

Important

Le paramètre pgbouncer.client_tls_sslmode pour la fonctionnalité PgBouncer intégrée a été dépréciée dans le serveur flexible Azure Database pour PostgreSQL.

Lorsqu’un protocole TLS/SSL pour des connexions à Azure Database pour PostgreSQL – Serveur flexible est appliqué en définissant le paramètre de serveur require_secure_transport sur ON, TLS/SSL est automatiquement appliqué pour les connexions à la fonctionnalité PgBouncer intégrée. Ce paramètre est activé par défaut lorsque vous créez une instance de serveur flexible Azure Database pour PostgreSQL et activez la fonctionnalité PgBouncer intégrée. Pour plus d’informations, consultez la vue d’ensemble de la mise en réseau pour le serveur flexible Azure Database pour PostgreSQL avec accès privé.

Pour les clients qui souhaitent une gestion simplifiée, une haute disponibilité intégrée, une connectivité facile avec des applications conteneurisées et la possibilité d’utiliser les paramètres de configuration les plus populaires, la fonctionnalité PgBouncer intégrée est un bon choix. Pour les clients qui souhaitent une scalabilité multithread, un contrôle total de tous les paramètres et une expérience de débogage, la configuration de PgBouncer sur des machines virtuelles Azure peut être une alternative.

Étapes suivantes