Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Fehlerbehebung bei Verbindungsproblemen
Haben Sie Probleme beim Herstellen einer Verbindung? Im Folgenden finden Sie einige häufig auftretende Szenarien und wie Sie sie lösen können.
Topics
Es kann keine Verbindung zu einem Amazon DocumentDB-Endpunkt hergestellt werden
Wenn Sie versuchen, eine Verbindung zu Amazon DocumentDB herzustellen, ist die folgende eine der häufigsten Fehlermeldungen, die Sie möglicherweise erhalten.
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
Diese Fehlermeldung bedeutet in der Regel, dass Ihr Client (in diesem Beispiel die Mongo-Shell) nicht auf den Amazon DocumentDB-Endpunkt zugreifen kann. Dies kann aus verschiedenen Gründen der Fall sein:
Themen
Verbindung von öffentlichen Endpunkten aus herstellen
Sie versuchen, direkt von Ihrem Laptop oder Ihrem lokalen Entwicklungscomputer aus eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen.
Der Versuch, direkt von einem öffentlichen Endpunkt, wie Ihrem Laptop oder Ihrem lokalen Entwicklungscomputer, eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen, schlägt fehl. Amazon DocumentDB ist nur für Virtual Private Cloud (VPC) verfügbar und unterstützt derzeit keine öffentlichen Endpunkte. Daher können Sie von Ihrem Laptop oder Ihrer lokalen Entwicklungsumgebung außerhalb Ihrer VPC aus keine direkte Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen.
Um von außerhalb einer Amazon VPC eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen, können Sie einen SSH-Tunnel verwenden. Weitere Informationen finden Sie unter Verbindung zu einem Amazon DocumentDB-Cluster von außerhalb einer Amazon VPC herstellen. Wenn sich Ihre Entwicklungsumgebung in einer anderen Amazon VPC befindet, können Sie außerdem VPC Peering verwenden und von einer anderen Amazon VPC in derselben Region oder einer anderen Region aus eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen.
Cross-Region Verbindungen
Sie versuchen, eine Verbindung zu einem Amazon DocumentDB-Cluster in einer anderen Region herzustellen.
Wenn Sie versuchen, von einer Amazon EC2-Instance aus einer anderen Region als der Cluster-Region eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen — beispielsweise wenn Sie versuchen, eine Verbindung zu einem Cluster in der Region USA Ost (Nord-Virginia) (us-east-1) von der Region US West (Oregon) (us-west-2) herzustellen —, schlägt die Verbindung fehl.
Führen Sie den folgenden Befehl aus, um die Region Ihres Amazon DocumentDB-Clusters zu überprüfen. Die Region ist im Endpunkt.
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].Endpoint'
Die Ausgabe dieser Operation sieht in etwa folgendermaßen aus.
[
"sample-cluster.node.us-east-1.docdb.amazonaws.com"
]
Um die Region Ihrer EC2-Instance zu überprüfen, führen Sie den folgenden Befehl aus.
aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'
Die Ausgabe dieser Operation sieht in etwa folgendermaßen aus.
[
[
"us-east-1a"
]
]
Verbindung von verschiedenen Amazon VPCs aus herstellen
Sie versuchen, eine Verbindung zu einem Amazon DocumentDB-Cluster von einer VPC aus herzustellen, die sich von der Amazon VPC unterscheidet, auf der Ihr Cluster bereitgestellt wird.
Wenn sich sowohl Ihr Amazon DocumentDB-Cluster als auch Ihre Amazon EC2-Instance in derselben AWS-Region, aber nicht in derselben Amazon VPC befinden, können Sie keine direkte Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen, es sei denn, VPC Peering ist zwischen den beiden Amazon VPCs aktiviert.
Führen Sie den folgenden Befehl aus, um die Amazon VPC Ihrer Amazon DocumentDB-Instance zu überprüfen.
aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].DBSubnetGroup.VpcId'
Führen Sie den folgenden Befehl aus, um die Amazon VPC Ihrer Amazon EC2-Instance zu überprüfen.
aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].VpcId'
Die Sicherheitsgruppe blockiert eingehende Verbindungen
Sie versuchen, eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen, und die Sicherheitsgruppe des Clusters lässt keine eingehenden Verbindungen über den Port des Clusters zu (Standardport: 27017).
Angenommen, Ihr Amazon DocumentDB-Cluster und Ihre Amazon EC2-Instance befinden sich beide in derselben Region und Amazon VPC und verwenden dieselbe Amazon VPC-Sicherheitsgruppe. Wenn Sie keine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen können, liegt die wahrscheinliche Ursache darin, dass Ihre Sicherheitsgruppe (d. h. die Firewall) für Ihren Cluster keine eingehenden Verbindungen auf dem Port zulässt, den Sie für Ihren Amazon DocumentDB-Cluster ausgewählt haben (Standardport ist 27017).
Führen Sie den folgenden Befehl aus, um den Port für Ihren Amazon DocumentDB-Cluster zu überprüfen.
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[DBClusterIdentifier,Port]'
Führen Sie den folgenden Befehl aus, um Ihre Amazon DocumentDB-Sicherheitsgruppe für Ihren Cluster abzurufen.
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'
Um die Regeln für eingehenden Verkehr für Ihre Sicherheitsgruppe zu überprüfen, lesen Sie die folgenden Themen in der Amazon EC2-Dokumentation:
Problem mit den Leseeinstellungen für den Java Mongo-Treiber
Die Leseeinstellungen des Clients werden nicht berücksichtigt und einige Clients können nach einem Failover nicht in Amazon DocumentDB schreiben, es sei denn, sie starten neu.
Dieses Problem, das erstmals in Java Mongo Driver 3.7.x entdeckt wurde, tritt auf, wenn ein Client mithilfe der Methode MongoClientSettings und insbesondere beim Verketten der Methode eine Verbindung zu Amazon DocumentDB herstellt. applyToClusterSettings Die MongoClient Cluster-Einstellungen können mit verschiedenen Methoden wie, und definiert werden. hosts() requiredReplicaSetName() mode()
Wenn der Client in der hosts() Methode nur einen Host angibt, wird der Modus auf ClusterConnectionMode.SINGLE statt gesetzt. ClusterConnectionMode.MULTIPLE Dies führt dazu, dass der Client die Lesepräferenz ignoriert und nur eine Verbindung zu dem in hosts() konfigurierten Server herstellt. Selbst wenn die Client-Einstellungen wie unten beschrieben initialisiert werden, würden alle Lesevorgänge immer noch an die primäre statt an die sekundäre gesendet.
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);
Fall eines Failovers
Bei Verwendung der oben genannten Client-Verbindungseinstellungen würde der Client bei einem Failover und einer verzögerten DNS-Datensatzaktualisierung für den Cluster-Writer-Endpunkt trotzdem versuchen, Schreibvorgänge an den alten Writer (jetzt Reader nach Failover) auszugeben. Dies führt zu einem serverseitigen Fehler (nicht primär), der vom Java-Treiber nicht angemessen behandelt wird (dieser Fehler wird noch untersucht). So kann der Client beispielsweise so lange in einem schlechten Zustand bleiben, bis der Anwendungsserver neu gestartet wird.
Dafür gibt es zwei Workarounds:
-
Bei Clients, die über eine Verbindungszeichenfolge eine Verbindung zu Amazon DocumentDB herstellen, tritt dieses Problem nicht auf, da
ClusterConnectionModeesMULTIPLEbei der Einstellung der Lesepräferenz auf gesetzt wird.MongoClientURI mongoClientURI = new MongoClientURI("mongodb://usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred"); MongoClient mongoClient = MongoClients.create(mongoClientURI.getURI());Oder verwenden Sie den
MongoClientSettingsBuilder mit derapplyConnectionStringMethode.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); -
Explizit
ClusterConnectionModeauf gesetztMULTIPLE. Dies wird nur benötigt, wenn SieapplyToClusterSettingsund verwendenhosts().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);
Testen einer Verbindung zu einer Amazon DocumentDB-Instance
Sie können Ihre Verbindung zu einem Cluster mit gängigen Linux- oder Windows-Tools testen.
Testen Sie die Verbindung über einen Linux- oder Unix-Terminal, indem Sie folgendes eingeben (ersetzen Sie cluster-endpoint durch den Endpunkt und ersetzen Sie port durch den Port Ihrer Instance).
nc -zv cluster-endpoint port
Der folgende Code ist ein Beispiel für eine Beispieloperation und den Rückgabewert:
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!
Verbindung zu einem ungültigen Endpunkt herstellen
Wenn Sie eine Verbindung zu einem Amazon DocumentDB-Cluster herstellen und einen Cluster-Endpunkt verwenden, der nicht gültig ist, wird ein Fehler ähnlich dem folgenden angezeigt.
mongo --ssl \ --host sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 \ --sslCAFile global-bundle.pem \ --username <user-name> \ --password <password>
Das Ergebnis sieht folgendermaßen aus:
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
Um den gültigen Endpunkt für einen Cluster abzurufen, führen Sie den folgenden Befehl aus:
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[Endpoint,Port]'
Um den gültigen Endpunkt für eine Instance abzurufen, führen Sie den folgenden Befehl aus:
aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'
Weitere Informationen finden Sie unter Grundlegendes zu Amazon DocumentDB DocumentDB-Endpunkten.
Die Treiberkonfiguration wirkt sich auf die Anzahl der Verbindungen aus
Wenn Sie den Client-Treiber verwenden, um eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen, ist es wichtig, den maxPoolSize Konfigurationsparameter zu berücksichtigen. Die maxPoolSize Einstellung bestimmt die maximale Anzahl von Verbindungen, die der Client-Treiber in seinem Verbindungspool aufrechterhalten wird.