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 individuellement pour chaque serveur de base de données. 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 subit des contraintes de ressources quand le serveur fait l’objet de plus de quelques milliers de connexions. Le principal avantage de PgBouncer est d’améliorer 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 Azure Database pour PostgreSQL – Serveur flexible prend en charge l’authentification Microsoft Entra (Azure AD).

Activer et configurer un PgBouncer

Pour activer PgBouncer, accédez au volet Paramètres du serveur dans le portail Azure, recherchez PgBouncer et définissez le paramètre pgbouncer.enabled sur true. Il n’est pas nécessaire de redémarrer le serveur.

Vous pouvez configurer les valeurs pour PgBouncer en utilisant ces paramètres.

Remarque

La liste suivante des paramètres de serveur PgBouncer est visible dans le volet Paramètres du serveur seulement 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 Descriptif Par défaut
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 cette valeur de paramètre sur le nombre maximal de connexions clientes à PgBouncer que vous souhaitez prendre en charge. La valeur par défaut est 5000, avec une plage autorisée comprise entre 1 et 50 000 5 000
pgbouncer.max_prepared_statements Quand il est défini sur une valeur différente de zéro, PgBouncer effectue le suivi des commandes liées à des instructions 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 du serveur au pool si leur nombre est inférieur à ce nombre. 0
pgbouncer.pool_mode Définissez cette valeur de paramètre sur TRANSACTION pour le regroupement de transactions (qui est la valeur recommandée 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 Si une connexion de serveur a été inactive au-delà de ce nombre de secondes, elle sera supprimée. 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 de PgBouncer, consultez la documentation pgbouncer.ini.

Version de PgBouncer

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

Avantages

En utilisant la fonctionnalité PgBouncer intégrée avec Azure Database pour PostgreSQL – Serveur flexible, 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 la 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 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 vous connecter en externe, selon vos besoins spécifiques.

  • 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

Vous pouvez utiliser les métriques PgBouncer pour surveiller le niveau de performance du processus PgBouncer, notamment des détails sur les connexions actives, les connexions inactives, le nombre total de connexions groupées et le nombre de pools de connexions. Chaque métrique est émise à des intervalles de 1 minute, puis conservée jusqu’à 93 jours dans l’historique. Les clients peuvent configurer des alertes sur les métriques et accéder aux nouvelles dimensions de métriques pour fractionner, puis filtrer les données des métriques par nom de base de données.

Comment activer les métriques PgBouncer

  • Pour surveiller les métriques PgBouncer, vérifiez que la fonctionnalité pgbouncer est activée via le paramètre pgbouncer.enabled de serveur et le paramètre metrics.pgbouncer_diagnostics de métriques est activé.
  • Ces paramètres sont dynamiques et ne nécessitent pas de redémarrage de l’instance.
  • Les métriques PgBouncer sont désactivées par défaut.

Liste des métriques PgBouncer

Nom d’affichage ID de métrique Unité Descriptif Dimension Activée par défaut
Connexions clientes actives client_connections_active Nombre Connexions à partir des clients associés à une connexion Azure Database pour PostgreSQL : connexion du serveur flexible. Nom de la base de données Non
Connexions clientes en attente client_connections_waiting Nombre Connexions à partir de clients qui attendent qu’une connexion Azure Database pour PostgreSQL : Connexion du Serveur flexible à disposition. Nom de la base de données Non
Connexions serveur actives server_connections_active Nombre Connexions au serveur flexible Azure Database pour PostgreSQL qui sont utilisées par une connexion cliente. Nom de la base de données Non
Connexions de serveur inactives server_connections_idle Nombre Connexions au serveur flexible Azure Database pour PostgreSQL qui sont inactives et prêtes à traiter une nouvelle connexion cliente. Nom de la base de données Non
Nombre total des connexions mises en pool total_pooled_connections Nombre Nombre actuel de connexions groupées. Nom de la base de données Non
Nombre de pools de connexions num_pools Nombre Nombre total de pools de connexions. Nom de la base de données Non

Points à prendre en compte pour l’utilisation des métriques PgBouncer

  • Les métriques PgBouncer qui utilisent la dimension DatabaseName ont une limite de 30 bases de données.
  • Sur la référence SKU Burstable, la limite est de 10 bases de données qui ont la dimension DatabaseName.
  • La limite de dimension DatabaseName est appliquée à la colonne OID, qui correspond à l’ordre de création de la base de données.

Pour plus d’informations, consultez 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=<password> sslmode=require"
    

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

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

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

Basculement de votre application pour l’utilisation de 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=<password> 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. La chaîne de connexion de votre application reste donc 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 de PgBouncer configuré 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 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.

Limitations

  • La fonctionnalité PgBouncer n’est actuellement pas prise en charge avec le niveau de calcul 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 des 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 max_prepared_statements paramètre. La définition de ce paramètre sur une valeur supérieure à 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, au lieu d’émettre une commande SQL dynamique similaire à PREPARE PROC AS, qui envoie du texte que PgBouncer ne va pas interpréter correctement. Pour découvrir 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 potentiel. 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 pour la haute disponibilité sur des machines virtuelles Azure.

  • Restriction de taille de jeton avec l’authentification Azure AD : 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 à un seul thread. 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 multithreads 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éconseillé dans Azure Database pour PostgreSQL – Serveur flexible.

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 quand vous créez une instance Azure Database pour PostgreSQL – Serveur flexible et que vous activez la fonctionnalité PgBouncer intégrée. Pour plus d’informations, consultez Connectivité sécurisée avec TLS et SSL dans un serveur flexible Azure Database pour PostgreSQL.

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 courants, 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.