View a markdown version of this page

Problèmes de connexion avec Amazon DocumentDB - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Problèmes de connexion avec Amazon DocumentDB

Identification - Détectez le problème

Causes courantes

Les problèmes de connexion proviennent généralement de trois domaines principaux :

L'épuisement du pool de connexions se produit lorsqu'une application atteint le nombre maximal de connexions autorisées à Amazon DocumentDB, soit par le biais des limites du pool de connexions côté client, soit par le biais des limites des instances côté serveur. Cette situation entraîne une dégradation des performances des applications, des délais d'attente et des défaillances potentielles lorsque les nouvelles demandes de connexion sont mises en file d'attente ou rejetées.

La surcharge d'authentification se produit lorsqu'Amazon DocumentDB reçoit un nombre excessif de demandes d'authentification simultanées, en particulier lors du traitement de plus de 1 000 nouvelles connexions sur une courte période. Lors de la maintenance de l'authentification, Amazon DocumentDB détient un verrou exclusif sur la carte des sessions, ce qui entraîne la mise en attente des tentatives d'authentification suivantes jusqu'à la fin de la maintenance.

Les problèmes de configuration dans Amazon DocumentDB sont souvent dus à des erreurs de configuration liées au réseau, à la sécurité et aux paramètres client. Cela inclut des éléments tels que des paramètres de groupe de sécurité incorrects, une configuration VPC incorrecte ou des problèmes de SSL/TLS certificat. Comprendre la configuration appropriée est essentiel pour garantir un accès sécurisé et fiable aux bases de données.

Diagnostiquer - Trouver la cause première

Pools de connexion

Le pool de connexions s'initialise lors de la création d'une MongoClient instance. Chaque pool gère les connexions en fonction de deux paramètres clés :

min PoolSize - Nombre minimum de connexions maintenues

max PoolSize - Nombre maximum de connexions autorisées

Lorsqu'une demande nécessite une connexion :

  1. Le pool vérifie les connexions inactives disponibles

  2. S'il n'en existe aucune et que la taille du pool est inférieure à max.PoolSize, une nouvelle connexion est créée

  3. Si la valeur maximale est PoolSize atteinte, la demande entre dans une file d'attente

  4. Si la file d'attente est pleine ou si le délai d'expiration est atteint, elle est renvoyée MongoWaitQueueFullException

Le comportement de la file d'attente est géré via les paramètres suivants :

wait QueueTimeout MS - Temps d'attente maximal pour la connexion

wait QueueSize - Nombre maximum de demandes en file d'attente

Voici un exemple d'approche problématique pour la connexion à Amazon DocumentDB où un nouveau pool est créé à chaque fois :

for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }

CloudWatch Les indicateurs critiques à surveiller sont les suivants :

  • DatabaseConnections- Le nombre de connexions (actives et inactives) ouvertes sur une instance prise à une fréquence d'une minute.

  • DatabaseConnectionsMax- Le nombre maximum de connexions de base de données ouvertes (actives et inactives) sur une instance sur une période d'une minute.

  • DatabaseConnectionsLimit- Le nombre maximum de connexions simultanées à la base de données (actives et inactives) autorisées sur une instance à un moment donné.

  • LowMemNumOperationsThrottled- Le nombre de demandes limitées en raison d'un manque de mémoire disponible sur une période d'une minute.

Consultez la section Quotas et limites pour les limites par classe d'instance.

Les signes avant-coureurs courants de problèmes liés au pool de connexions au niveau de l'application sont les suivants :

  • Augmenter les délais d'acquisition des connexions

  • Augmentation de la taille des files d'attente

  • Nombre croissant d'exceptions au délai d'expiration

Surcharge d'authentification

La connexion à Amazon DocumentDB suit un flux similaire à celui ci-dessous :

Demande de connexion → Connexion SSL → Authentification → Création de session → Prêt pour la connexion

Lors du traitement de plus de 1 000 nouvelles connexions, des demandes de connexion supplémentaires entreront dans une file d'attente pour l'authentification une fois la poignée de contact SSL terminée. Le temps de connexion moyen à partir de votre application augmentera lors de ces surcharges.

CloudWatch Les indicateurs critiques à surveiller sont les suivants :

  • DatabaseConnections- Le nombre de connexions (actives et inactives) ouvertes sur une instance prise à une fréquence d'une minute.

  • DatabaseConnectionsMax- Le nombre maximum de connexions de base de données ouvertes (actives et inactives) sur une instance sur une période d'une minute.

  • DatabaseConnectionsLimit- Le nombre maximum de connexions simultanées à la base de données (actives et inactives) autorisées sur une instance à un moment donné.

Problèmes de configuration

Le problème de configuration le plus courant se produit lorsque vous essayez de vous connecter à un point de terminaison de cluster Amazon DocumentDB privé depuis un environnement sans accès à l'environnement réseau privé. Amazon DocumentDB est uniquement destiné au cloud privé virtuel (VPC) et ne prend actuellement pas en charge les points de terminaison publics. Vous ne pouvez pas vous connecter directement à votre cluster Amazon DocumentDB depuis votre ordinateur portable ou depuis un environnement de développement local en dehors de votre VPC.

Cela se traduira par des erreurs telles que ci-dessous :

Error: couldn't connect to server... Failed to connect to... exception: connect failed connection attempt failed

Des configurations de groupes de sécurité incorrectes peuvent également provoquer des échecs de connexion. Un cluster Amazon DocumentDB écoute les connexions sur le port TCP 27017 par défaut. Votre application échouera si elle tente de se connecter à un port différent de celui avec lequel le cluster a été déployé, ou si l'application n'est pas couverte par la configuration du groupe de sécurité d'entrée du cluster.

Une gestion incorrecte des certificats peut également entraîner des problèmes de connexion. Par défaut, le chiffrement en transit est activé pour les clusters Amazon DocumentDB nouvellement créés. Lorsque le chiffrement en transit est activé, des connexions sécurisées utilisant le protocole TLS sont nécessaires pour se connecter au cluster à l'aide du certificat global-bundle.pem. Si vous essayez d'utiliser le mauvais certificat, vous recevrez des erreurs telles que :

unable to get local issuer certificate

Si vous tentez de vous connecter à un cluster avec le protocole TLS activé sans spécifier les paramètres TLS, vous recevrez des erreurs telles que :

Server selection timed out after 30000 ms

Résoudre - Résoudre le problème

Pools de connexions : passez en revue le regroupement de connexions en implémentant ou en ajustant la taille des pools en fonction des exigences de charge de travail. Les configurations de pool optimales dépendent de votre charge de travail et de vos exigences. Vous devez respecter un minimum pour PoolSize que les connexions principales soient prêtes et disponibles, et un maximum suffisamment WaitTime court pour échouer rapidement si le pool est épuisé.

Voici un exemple de réutilisation d'un seul pool sans en créer un nouveau à chaque fois :

MongoClient client = MongoClients.create(settings); for(Request request : requests) { // Process request }

Surcharge d'authentification : gérez l'authentification en mettant en œuvre une augmentation progressive des connexions et en limitant le nombre de nouvelles connexions à 1 000 à la fois. Utilisez le regroupement de connexions pour réutiliser efficacement les connexions authentifiées. Pour éviter de surcharger le cluster Amazon DocumentDB de connexions, implémentez une stratégie d'accélération des connexions.

public class ConnectionManager { private static final int BATCH_SIZE = 100; private static final int DELAY_MS = 1000; public void establishConnections(int totalRequired) { int established = 0; while (established < totalRequired) { int batch = Math.min(BATCH_SIZE, totalRequired - established); createConnections(batch); Thread.sleep(DELAY_MS); established += batch; } } }

Vous pouvez également configurer les paramètres de votre pool de connexions pour limiter le nombre total de connexions autorisées.

MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> { builder.maxSize(500) // Limit total connections .minSize(10) // Maintain base connections .maxConnectionLifeTime(3600000) // Rotate connections hourly }) .applyToServerSettings(builder -> { builder.heartbeatFrequency(10000) // Regular server checks }) .build();

Problèmes de configuration : assurez-vous que votre application a accès au VPC privé et au sous-réseau où se trouvent vos ressources Amazon DocumentDB. Si vous utilisez l'appairage VPC, consultez le guide du développeur Résoudre les problèmes liés à une connexion d'appairage VPC pour plus d'informations. Vous pouvez également consulter l'article du centre de connaissances Comment résoudre les problèmes de connectivité entre Internet et les instances Amazon EC2 au sein de mon VPC ? .

Pour la configuration du groupe de sécurité, vous devez inclure une règle d'entrée dans votre groupe de sécurité Amazon DocumentDB afin d'autoriser les connexions depuis votre application.

{ "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 27017, "ToPort": 27017, "SourceSecurityGroupId": "<application-security-group>", "Description": "DocumentDB access from application tier" } ], "SecurityGroupEgress": [ { "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIp": "0.0.0.0/0" } ] }

Si le cluster est configuré avec le chiffrement TLS, téléchargez le certificat TLS pour Amazon DocumentDB nommé global-bundle.pem et utilisez-le lors de la connexion au cluster.

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Long-term Des solutions

Le dimensionnement de l'instance peut être nécessaire en passant à une classe d'instance plus importante ou en ajoutant des répliques de lecture pour répartir la charge de connexion. La mise en œuvre d'un équilibrage de charge approprié garantit une utilisation optimale des ressources dans l'ensemble du cluster.

Les modifications apportées aux applications doivent se concentrer sur la mise en œuvre d'une gestion robuste des connexions, d'une surveillance complète et du respect des meilleures pratiques de mise en commun des connexions. Cela inclut la gestion appropriée des erreurs et la gestion du cycle de vie des connexions.

Les améliorations de l'architecture peuvent impliquer l'adoption d'Amazon DocumentDB Serverless pour les charges de travail variables, la mise en œuvre d'une logique de nouvelle tentative sophistiquée et la conception en fonction de la tolérance aux pannes. Envisagez de restructurer l'architecture des applications pour mieux gérer la gestion des connexions.

Bonnes pratiques

Pools de connexion

Grâce à une gestion et à une surveillance appropriées du pool de connexions, les applications peuvent maintenir une connectivité stable aux bases de données tout en évitant les scénarios d'épuisement susceptibles d'affecter la fiabilité et les performances du système. Configurez les délais d'expiration appropriés et dimensionnez votre pool en fonction des caractéristiques de votre charge de travail.

Exemple de configuration d'un pool de connexions

MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(10)) .applyToConnectionPoolSettings(builder -> builder.maxWaitQueueSize(2)) .applyToConnectionPoolSettings(builder -> builder.maxConnectionIdleTime(10, TimeUnit.MINUTES)) .build();

Pour plus d'informations, voir : https://aws.amazon.com/blogs/database/building-resilient-applications-with-amazon-documentdb-with-mongodb-compatibility-part-1-client-configuration/

Surcharge d'authentification

Implémentez toujours le regroupement des connexions avec des valeurs appropriées pour les paramètres en fonction de votre charge de travail. Utilisez une technique d'établissement de connexion progressif et maintenez des connexions persistantes, dans la mesure du possible. Mettez en œuvre un nettoyage de connexion approprié pour garantir qu'aucune ressource inutilisée n'est gaspillée.

Problèmes de configuration

Assurez-vous d'avoir configuré le routage approprié entre votre application et les ressources Amazon DocumentDB. Utilisez le protocole TLS pour le chiffrement en transit et implémentez l'accès avec le moindre privilège. Vérifiez vos informations d'identification Amazon DocumentDB et validez les valeurs des chaînes de connexion.