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 - Identifiez 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 maximum de connexions autorisées à Amazon DocumentDB, soit par le biais des limites du pool de connexions côté client, soit des limites d'instance côté serveur. Cette condition entraîne une dégradation des performances des applications, des délais d'attente et des défaillances potentielles, car les nouvelles demandes de connexion sont mises en file d'attente ou rejetées.

Une 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. Pendant la maintenance de l'authentification, Amazon DocumentDB détient un verrou exclusif sur la carte des sessions, ce qui entraîne la mise en file d'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 au niveau du réseau, de la sécurité et des paramètres du 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. Il est essentiel de comprendre la configuration appropriée pour maintenir un accès sécurisé et fiable à la base de données.

Diagnostiquer - Trouver la cause première

Pools de connexions

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 pas et que la taille du pool est < maxPoolSize, une nouvelle connexion est créée

  3. Si elle est au maximumPoolSize, la demande entre dans une file d'attente

  4. Si la file d'attente est pleine ou si le délai est dépassé, elle lance MongoWaitQueueFullException

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

wait QueueTimeout MS - Temps d'attente maximum 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, dans le cadre de laquelle 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 à la 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 qui sont limitées en raison d'une faible quantité de mémoire disponible sur une période d'une minute.

Pour les quotas par classe d'instance, consultezQuotas d'instances.

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

  • Augmenter les temps d'acquisition des connexions

  • Taille croissante de la file d'attente

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

Surcharge d'authentification

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

Demande de connexion → Poignée de main SSL → Authentification → Création de session → Prêt pour la connexion

Lors du traitement de plus de 1 000 nouvelles connexions, les demandes de connexion supplémentaires entreront dans une file d'attente pour l'authentification une fois l'établissement de liaison SSL terminé. Les temps de connexion moyens à partir de votre application augmenteront lors de ces événements de surcharge.

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 à la 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 un cloud privé virtuel (VPC) uniquement 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 votre 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 groupe de sécurité incorrectes peuvent également entraîner 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 pour le 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 via TLS sont requises pour se connecter au cluster à l'aide du certificat global-bundle.pem. Si vous tentez 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 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 pool de connexions en implémentant ou en ajustant la taille des pools en fonction des exigences de charge de travail. Les configurations optimales du pool dépendent de votre charge de travail et de vos exigences. Vous devez garder 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 montrant comment réutiliser 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 montée en puissance 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 de montée en puissance 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 le peering VPC, consultez le guide du développeur Résoudre les problèmes d'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 configurer un 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 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

La mise à l'échelle des instances peut être nécessaire en passant à une classe d'instances plus importante ou en ajoutant des répliques de lecture pour répartir la charge de connexion. Une mise en œuvre correcte de l'équilibrage de charge garantit une utilisation optimale des ressources sur 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 regroupement de 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 d'une tolérance aux pannes. Envisagez de restructurer l'architecture des applications afin de mieux gérer la gestion des connexions.

Bonnes pratiques

Pools de connexions

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'attente 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, consultez Création d'applications résilientes avec Amazon DocumentDB — Partie 1 : Configuration du client.

Surcharge d'authentification

Implémentez toujours le regroupement de connexions avec des valeurs appropriées pour les paramètres en fonction de votre charge de travail. Utilisez une technique d'établissement de connexion progressive et maintenez des connexions persistantes, dans la mesure du possible. Mettez en œuvre un nettoyage de connexion approprié pour vous assurer qu'aucune ressource inactive 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.