Problèmes de connexion - 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

Vous rencontrez des difficultés pour vous connecter ? Voici quelques scénarios courants et comment les résoudre.

Rubriques

Impossible de se connecter à un point de terminaison Amazon DocumentDB

Lorsque vous essayez de vous connecter à Amazon DocumentDB, voici l'un des messages d'erreur les plus courants que vous pouvez recevoir.

connecting to: mongodb://docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east- 1.docdb.amazonaws.com:27017/ 2018-11-14T14:33:46.451-0800 W NETWORK [thread1] Failed to connect to 172.31.91.193:27017 after 5000ms milliseconds, giving up. 2018-11-14T14:33:46.452-0800 E QUERY [thread1] Error: couldn't connect to server docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017, connection attempt failed : connect@src/mongo/shell/mongo.js:237:13 @(connect):1:6 exception: connect failed

Ce message d'erreur signifie généralement que votre client (le shell mongo dans cet exemple) ne peut pas accéder au point de terminaison Amazon DocumentDB. Cela peut être le cas pour plusieurs raisons :

Connexion à partir de points de terminaison publics

Vous essayez de vous connecter à un cluster Amazon DocumentDB directement depuis votre ordinateur portable ou votre machine de développement locale.

Toute tentative de connexion à un cluster Amazon DocumentDB directement depuis un point de terminaison public, tel que votre ordinateur portable ou votre machine de développement locale, échouera. Amazon DocumentDB est uniquement destiné au cloud privé virtuel (VPC) et ne prend actuellement pas en charge les points de terminaison publics. Ainsi, 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.

Pour vous connecter à un cluster Amazon DocumentDB depuis l'extérieur d'un Amazon VPC, vous pouvez utiliser un tunnel SSH. Pour plus d’informations, consultez Connexion à un cluster Amazon DocumentDB depuis l'extérieur d'un Amazon VPC. En outre, si votre environnement de développement se trouve dans un autre Amazon VPC, vous pouvez également utiliser VPC Peering et vous connecter à votre cluster Amazon DocumentDB depuis un autre Amazon VPC de la même région ou d'une région différente.

Connexions interrégionales

Vous essayez de vous connecter à un cluster Amazon DocumentDB dans une autre région.

Si vous essayez de vous connecter à un cluster Amazon DocumentDB depuis une instance Amazon EC2 située dans une région autre que celle du cluster, par exemple en essayant de vous connecter à un cluster situé dans la région USA Est (Virginie du Nord) (us-east-1) depuis la région USA Ouest (Oregon) (us-west-2), la connexion échouera.

Pour vérifier la région de votre cluster Amazon DocumentDB, exécutez la commande suivante. La région est dans le point de terminaison.

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].Endpoint'

Le résultat de cette opération ressemble à ceci.

[ "sample-cluster.node.us-east-1.docdb.amazonaws.com" ]

Pour vérifier la région de votre instance EC2, exécutez la commande suivante :

aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'

Le résultat de cette opération ressemble à ceci.

[ [ "us-east-1a" ] ]

Connexion depuis différents Amazon VPC

Vous essayez de vous connecter à un cluster Amazon DocumentDB à partir d'un VPC différent de celui sur lequel votre cluster est déployé.

Si votre cluster Amazon DocumentDB et votre instance Amazon EC2 se trouvent dans le Région AWS même environnement, mais pas dans le même Amazon VPC, vous ne pouvez pas vous connecter directement à votre cluster Amazon DocumentDB à moins que le peering VPC ne soit activé entre les deux Amazon VPC.

Pour vérifier le VPC Amazon de votre instance Amazon DocumentDB, exécutez la commande suivante.

aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].DBSubnetGroup.VpcId'

Pour vérifier le VPC Amazon de votre instance Amazon EC2, exécutez la commande suivante.

aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].VpcId'

Le groupe de sécurité bloque les connexions entrantes

Vous essayez de vous connecter à un cluster Amazon DocumentDB et le groupe de sécurité du cluster n'autorise pas les connexions entrantes sur le port du cluster (port par défaut : 27017).

Supposons que votre cluster Amazon DocumentDB et votre instance Amazon EC2 se trouvent tous deux dans la même région et dans le même Amazon VPC et qu'ils utilisent le même groupe de sécurité Amazon VPC. Si vous ne parvenez pas à vous connecter à votre cluster Amazon DocumentDB, cela est probablement dû au fait que le groupe de sécurité (c'est-à-dire le pare-feu) de votre cluster n'autorise pas les connexions entrantes sur le port que vous avez choisi pour votre cluster Amazon DocumentDB (le port par défaut est 27017).

Pour vérifier le port de votre cluster Amazon DocumentDB, exécutez la commande suivante.

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[DBClusterIdentifier,Port]'

Pour obtenir le groupe de sécurité Amazon DocumentDB pour votre cluster, exécutez la commande suivante.

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'

Pour vérifier les règles relatives au trafic entrant pour votre groupe de sécurité, consultez les rubriques suivantes de la documentation Amazon EC2 :

Problème de préférence de lecture du pilote Java Mongo

Les préférences de lecture des clients ne sont pas respectées et certains clients ne peuvent pas écrire sur Amazon DocumentDB après un basculement, sauf s'ils redémarrent.

Ce problème, découvert pour la première fois dans Java Mongo Driver 3.7.x, se produit lorsqu'un client établit une connexion à Amazon DocumentDB à l'aide de la méthode MongoClientSettings et, en particulier, lors du chaînage. applyToClusterSettings Les paramètres du MongoClient cluster peuvent être définis à l'aide de différentes méthodes, telles que hosts()requiredReplicaSetName(), etmode().

Lorsque le client ne spécifie qu'un seul hôte dans la hosts() méthode, le mode est défini sur au ClusterConnectionMode.SINGLE lieu de ClusterConnectionMode.MULTIPLE Cela amène le client à ignorer la préférence de lecture et à se connecter uniquement au serveur configuré danshosts(). Ainsi, même si les paramètres du client sont initialisés comme ci-dessous, toutes les lectures seront toujours dirigées vers le primaire plutôt que vers le secondaire.

final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317)); final MongoCredential credential = MongoCredential.createCredential("xxx", "admin", "xxxx".toCharArray()); final MongoClientSettings settings = MongoClientSettings.builder() .credential(credential) .readPreference(ReadPreference.secondaryPreferred()) .retryWrites(false) .applyToSslSettings(builder -> builder .enabled(false)) .applyToClusterSettings(builder -> builder.hosts( Arrays.asList(serverAddress0 )) .requiredReplicaSetName("rs0")) .build(); MongoClient mongoClient = MongoClients.create(settings);

Étui Failover

En utilisant les paramètres de connexion client ci-dessus, en cas de basculement et de mise à jour différée de l'enregistrement DNS pour le point de terminaison du rédacteur du cluster, le client essaiera toujours d'envoyer des écritures à l'ancien enregistreur (devenu lecteur après le basculement). Cela entraîne une erreur côté serveur (et non principale) qui n'est pas gérée correctement par le pilote Java (cela fait toujours l'objet d'une enquête). Ainsi, le client peut être laissé dans un mauvais état jusqu'au redémarrage du serveur d'applications, par exemple.

Il existe deux solutions pour contourner ce problème :

  • Les clients qui se connectent à Amazon DocumentDB via une chaîne de connexion ne rencontreront pas ce problème, car cette valeur ClusterConnectionMode sera définie MULTIPLE lors de la définition des préférences de lecture.

    MongoClientURI mongoClientURI = new MongoClientURI("mongodb://usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred"); MongoClient mongoClient = MongoClients.create(mongoClientURI.getURI());

    Ou en utilisant MongoClientSettings Builder avec la applyConnectionString méthode.

    final MongoClientSettings settings = MongoClientSettings.builder() .credential(credential) .applyConnectionString(new ConnectionString("usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred")) .retryWrites(false) .applyToSslSettings(builder → builder .enabled(false)) .build(); MongoClient mongoClient = MongoClients.create(settings);
  • Paramétré explicitement ClusterConnectionMode surMULTIPLE. Cela n'est nécessaire que lors de l'utilisation applyToClusterSettings de ethosts().size() == 1.

    final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317)); final MongoCredential credential = MongoCredential.createCredential("xxx","admin", "xxxx".toCharArray()); final MongoClientSettings settings = MongoClientSettings.builder() .credential(credential) .readPreference(ReadPreference.secondaryPreferred()) .retryWrites(false) .applyToSslSettings(builder → builder .enabled(false)) .applyToClusterSettings(builder → builder .hosts(Arrays.asList(serverAddress0)) .requiredReplicaSetName("rs0")) .mode(ClusterConnectionMode.MULTIPLE)) .build(); MongoClient mongoClient = MongoClients.create(settings);

Test d'une connexion à une instance Amazon DocumentDB

Vous pouvez tester votre connexion à un cluster à l'aide des outils courants Linux ou Windows.

Depuis un terminal Linux ou Unix, testez la connexion en saisissant les informations suivantes (remplacez cluster-endpoint par le point de terminaison et port par le port de votre instance) :

nc -zv cluster-endpoint port

Voici un exemple d'opération et la valeur de retour :

nc -zv docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 Connection to docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 port [tcp/*] succeeded!

Connexion à un point de terminaison non valide

Lorsque vous vous connectez à un cluster Amazon DocumentDB et que vous utilisez un point de terminaison de cluster non valide, une erreur similaire à la suivante apparaît.

mongo --ssl \ --host sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 \ --sslCAFile global-bundle.pem \ --username <user-name> \ --password <password>

Le résultat se présente comme suit :

MongoDB shell version v3.6 connecting to: mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/ 2018-11-14T17:21:18.516-0800 I NETWORK [thread1] getaddrinfo("sample-cluster.node.us-east-1.docdb.amazonaws.com") failed: nodename nor servname provided, or not known 2018-11-14T17:21:18.537-0800 E QUERY [thread1] Error: couldn't initialize connection to host sample-cluster.node.us-east-1.docdb.amazonaws.com, address is invalid : connect@src/mongo/shell/mongo.js:237:13@(connect):1:6 exception: connect failed

Pour connaître le point de terminaison valide pour un cluster, exécutez la commande suivante :

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[Endpoint,Port]'

Pour connaître le point de terminaison valide pour une instance, exécutez la commande suivante :

aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'

Pour plus d’informations, consultez Comprendre les points de terminaison Amazon DocumentDB.

La configuration du pilote a un impact sur le nombre de connexions

Lorsque vous utilisez le pilote client pour vous connecter à un cluster Amazon DocumentDB, il est important de prendre en compte le paramètre de maxPoolSize configuration. Le maxPoolSize paramètre détermine le nombre maximal de connexions que le pilote client conservera dans son pool de connexions.