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.
Verbindungsprobleme
Haben Sie Probleme beim Herstellen einer Verbindung? Im Folgenden finden Sie einige gängige Szenarien und wie Sie sie lösen können.
Topics
Es kann keine Verbindung zu einem Amazon DocumentDB DocumentDB-Endpunkt hergestellt werden
Wenn Sie versuchen, eine Verbindung zu Amazon DocumentDB herzustellen, wird die folgende Fehlermeldung am häufigsten angezeigt.
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 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 aus, z. B. 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 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 Von außerhalb einer Amazon VPC eine Verbindung zu einem Amazon DocumentDB-Cluster 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.
Regionsübergreifende Verbindungen
Sie versuchen, eine Verbindung zu einem Amazon DocumentDB-Cluster in einer anderen Region herzustellen.
Wenn Sie versuchen, von einer EC2 Amazon-Instance in einer anderen Region als der Region des Clusters aus eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen, z. B. wenn Sie versuchen, von der Region USA West (Oregon) (us-west-2) aus eine Verbindung zu einem Cluster in der Region USA Ost (Nord-Virginia) (us-east-1) 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"
]
Führen Sie den folgenden Befehl aus, um die Region Ihrer EC2 Instance zu überprüfen.
aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'
Die Ausgabe dieser Operation sieht in etwa folgendermaßen aus.
[
[
"us-east-1
a"
]
]
Verbindung von einem anderen Amazon aus herstellen VPCs
Sie versuchen, von einer VPC aus eine Verbindung zu einem Amazon DocumentDB-Cluster herzustellen, die sich von der Amazon VPC unterscheidet, auf der Ihr Cluster bereitgestellt ist.
Wenn sich sowohl Ihr Amazon DocumentDB-Cluster als auch Ihre EC2 Amazon-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 aktiviert. VPCs
Führen Sie den folgenden Befehl aus, um die Amazon VPC Ihrer Amazon DocumentDB-Instance zu verifizieren.
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 EC2 Amazon-Instance zu verifizieren.
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 erlaubt keine eingehenden Verbindungen auf dem Port des Clusters (Standardport: 27017).
Angenommen, Ihr Amazon DocumentDB-Cluster und Ihre EC2 Amazon-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 das wahrscheinlich daran, 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 eingehende Nachrichten für Ihre Sicherheitsgruppe zu überprüfen, lesen Sie die folgenden Themen in der EC2 Amazon-Dokumentation:
Problem mit den Leseeinstellungen des Java-Mongo-Treibers
Die Leseeinstellungen der 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 MongoClientSettings
und insbesondere beim Verketten der Methode eine Verbindung zu Amazon DocumentDB herstellt. applyToClusterSettings
Die MongoClient Cluster-Einstellungen können mit verschiedenen Methoden definiert werden, z. B. mit, und. hosts()
requiredReplicaSetName()
mode()
Wenn der Client in der hosts()
Methode nur einen Host angibt, wird der Modus auf ClusterConnectionMode.SINGLE
statt auf gesetzt. ClusterConnectionMode.MULTIPLE
Dadurch ignoriert der Client die Lesepräferenz und stellt nur eine Verbindung zu dem Server her, der in hosts()
konfiguriert ist. Selbst wenn die Client-Einstellungen wie unten initialisiert würden, würden alle Lesevorgänge immer noch an den primären statt an den sekundären weitergeleitet.
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);
Failover-Fall
Bei Verwendung der oben genannten Client-Verbindungseinstellungen würde der Client bei einem Failover und einer verzögerten Aktualisierung des DNS-Eintrags für den Cluster-Writer-Endpunkt trotzdem versuchen, Schreibvorgänge auf den alten Writer (jetzt Reader nach dem Failover) auszuführen. Dies führt zu einem serverseitigen Fehler (nicht primär), der vom Java-Treiber nicht angemessen behandelt wird (dieser Fehler wird noch untersucht). Somit kann der Client in einem schlechten Zustand belassen werden, bis beispielsweise der Anwendungsserver neu gestartet wird.
Dafür gibt es zwei Abhilfemaßnahmen:
-
Bei Clients, die über eine Verbindungszeichenfolge eine Verbindung zu Amazon DocumentDB herstellen, tritt dieses Problem nicht auf, da
ClusterConnectionMode
esMULTIPLE
bei der Einstellung der Leseeinstellungen 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 Sie verwenden
MongoClientSettings
Builder mit derapplyConnectionString
Methode.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 gesetzt
ClusterConnectionMode
aufMULTIPLE
. Dies ist nur erforderlich, wennapplyToClusterSettings
und verwendet wirdhosts().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 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, müssen Sie den maxPoolSize
Konfigurationsparameter berücksichtigen. Die maxPoolSize
Einstellung bestimmt die maximale Anzahl von Verbindungen, die der Client-Treiber in seinem Verbindungspool unterhält.