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 mit Amazon DocumentDB
Identifizierung — Ermitteln Sie das Problem
Häufige Ursachen
Verbindungsprobleme sind in der Regel auf drei Hauptbereiche zurückzuführen:
Der Verbindungspool ist erschöpft, wenn eine Anwendung ihre maximal zulässige Anzahl an Verbindungen zu Amazon DocumentDB erreicht, entweder über die clientseitigen Grenzwerte für den Verbindungspool oder über die serverseitigen Instance-Grenzwerte. Dieser Zustand führt zu einer verminderten Anwendungsleistung, Timeouts und potenziellen Ausfällen, da neue Verbindungsanfragen entweder in die Warteschlange gestellt oder abgelehnt werden.
Eine Überlastung der Authentifizierung tritt auf, wenn Amazon DocumentDB zu viele gleichzeitige Authentifizierungsanfragen erhält, insbesondere bei der Verarbeitung von mehr als 1.000 neuen Verbindungen in einem kurzen Zeitraum. Während der Wartung der Authentifizierung hält Amazon DocumentDB eine exklusive Sperre auf der Sitzungsübersicht fest, sodass nachfolgende Authentifizierungsversuche in die Warteschlange geraten, bis die Wartung abgeschlossen ist.
Konfigurationsprobleme in Amazon DocumentDB sind häufig auf Fehlkonfigurationen in den Netzwerk-, Sicherheits- und Client-Einstellungen zurückzuführen. Dazu gehören Elemente wie falsche Sicherheitsgruppeneinstellungen, falsche VPC-Konfiguration oder SSL/TLS Zertifikatsprobleme. Das Verständnis der richtigen Konfiguration ist für einen sicheren und zuverlässigen Datenbankzugriff unerlässlich.
Diagnose — Finden Sie die Grundursache
Verbindungspools
Der Verbindungspool wird beim Erstellen einer MongoClient Instanz initialisiert. Jeder Pool unterhält Verbindungen auf der Grundlage von zwei Schlüsselparametern:
min PoolSize — Mindestanzahl der verwalteten Verbindungen
max PoolSize — Maximal zulässige Verbindungen
Wenn eine Anfrage eine Verbindung benötigt:
-
Der Pool sucht nach verfügbaren Verbindungen im Leerlauf
-
Wenn keine vorhanden ist und die Poolgröße < maximal istPoolSize, wird eine neue Verbindung erstellt
-
Wenn der Maximalwert erreicht PoolSize ist, wird die Anfrage in eine Warteschlange gestellt
-
Wenn die Warteschlange voll ist oder das Timeout erreicht ist, wird Folgendes ausgelöst MongoWaitQueueFullException
Das Verhalten der Wartewarteschlange wird über diese Parameter gesteuert:
wait QueueTimeout MS — Maximale Wartezeit für die Verbindung
wait QueueSize — Maximale Anzahl von Anfragen in der Warteschlange
Hier ist ein Beispiel für einen problematischen Ansatz für die Verbindung zu Amazon DocumentDB, bei dem jedes Mal ein neuer Pool erstellt wird:
for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }
Zu den wichtigsten zu überwachenden CloudWatch Kennzahlen gehören:
-
DatabaseConnections— Die Anzahl der Verbindungen (aktiv und inaktiv), die auf einer Instance geöffnet werden, und zwar im Abstand von 1 Minute. -
DatabaseConnectionsMax— Die maximale Anzahl offener Datenbankverbindungen (aktiv und inaktiv) auf einer Instance in einem Zeitraum von 1 Minute. -
DatabaseConnectionsLimit— Die maximale Anzahl gleichzeitiger Datenbankverbindungen (aktiv und inaktiv), die auf einer Instance zu einem bestimmten Zeitpunkt zulässig sind. -
LowMemNumOperationsThrottled- Die Anzahl der Anfragen, die in einem Zeitraum von 1 Minute aufgrund von zu wenig verfügbarem Speicher gedrosselt werden.
Informationen zu Kontingenten pro Instance-Klasse finden Sie unter. Kontingente für Instanzen
Zu den häufigsten Warnsignalen für Probleme mit dem Connection Pool auf Anwendungsebene gehören:
-
Zunehmende Zeiten für den Verbindungsaufbau
-
Zunehmende Größe der Warteschlange
-
Steigende Anzahl von Timeout-Ausnahmen
Überlastung der Authentifizierung
Das Herstellen einer Verbindung zu Amazon DocumentDB folgt einem ähnlichen Ablauf wie im Folgenden:
Verbindungsanfrage → SSL-Handshake → Authentifizierung → Sitzungserstellung → Verbindung bereit
Wenn mehr als 1.000 neue Verbindungen verarbeitet werden, werden zusätzliche Verbindungsanfragen nach Abschluss des SSL-Handshakes in eine Warteschlange für die Authentifizierung gestellt. Während dieser Überlastungsereignisse erhöht sich die durchschnittliche Verbindungsdauer Ihrer Anwendung.
Zu den CloudWatch wichtigsten zu überwachenden Kennzahlen gehören:
-
DatabaseConnections— Die Anzahl der Verbindungen (aktiv und inaktiv), die auf einer Instance geöffnet werden, und zwar im Abstand von 1 Minute. -
DatabaseConnectionsMax— Die maximale Anzahl offener Datenbankverbindungen (aktiv und inaktiv) auf einer Instance in einem Zeitraum von 1 Minute. -
DatabaseConnectionsLimit— Die maximale Anzahl gleichzeitiger Datenbankverbindungen (aktiv und inaktiv), die auf einer Instance zu einem bestimmten Zeitpunkt zulässig sind.
- Probleme mit der Konfiguration
Das häufigste Konfigurationsproblem wird verursacht, wenn versucht wird, von einer Umgebung ohne Zugriff auf die private Netzwerkumgebung aus eine Verbindung zu einem privaten Amazon DocumentDB-Cluster-Endpunkt herzustellen. Amazon DocumentDB ist nur für Virtual Private Cloud (VPC) verfügbar und unterstützt derzeit keine öffentlichen Endpunkte. Sie können von Ihrem Laptop oder Ihrer lokalen Entwicklungsumgebung außerhalb Ihrer VPC aus keine direkte Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen.
Dies wird sich in Fehlern wie den folgenden äußern:
Error: couldn't connect to server... Failed to connect to... exception: connect failed connection attempt failed
Falsche Sicherheitsgruppenkonfigurationen können auch zu Verbindungsfehlern führen. Ein Amazon DocumentDB-Cluster wartet standardmäßig auf Verbindungen auf dem TCP-Port 27017. Ihre Anwendung schlägt fehl, wenn Sie versuchen, eine Verbindung zu einem anderen Port herzustellen als dem, mit dem der Cluster bereitgestellt wurde, oder wenn die Anwendung nicht in der Konfiguration der Ingress-Sicherheitsgruppe für den Cluster enthalten ist.
Eine falsche Zertifikatsverwaltung kann auch zu Verbindungsproblemen führen. Standardmäßig ist die Verschlüsselung bei der Übertragung für neu erstellte Amazon DocumentDB-Cluster aktiviert. Wenn die Verschlüsselung während der Übertragung aktiviert ist, sind sichere Verbindungen mit TLS erforderlich, um mithilfe des global-bundle.pem-Zertifikats eine Verbindung zum Cluster herzustellen. Wenn Sie versuchen, das falsche Zertifikat zu verwenden, erhalten Sie Fehler wie:
unable to get local issuer certificate
Wenn Sie versuchen, eine Verbindung zu einem Cluster mit aktiviertem TLS herzustellen, ohne die TLS-Parameter anzugeben, erhalten Sie Fehler wie:
Server selection timed out after 30000 ms
Gelöst — Beheben Sie das Problem
Verbindungspools: Überprüfen Sie das Verbindungspooling, indem Sie die Poolgrößen implementieren oder an die Workload-Anforderungen anpassen. Optimale Poolkonfigurationen hängen von Ihrer Arbeitslast und Ihren Anforderungen ab. Sie sollten ein Minimum PoolSize einhalten, damit die Kernverbindungen bereit und verfügbar sind, und ein Maximum, das WaitTime kurz genug ist, um schnell auszufallen, wenn der Pool erschöpft ist.
Hier ist ein Beispiel dafür, wie Sie einen einzelnen Pool wiederverwenden können, ohne jedes Mal einen neuen zu erstellen:
MongoClient client = MongoClients.create(settings); for(Request request : requests) { // Process request }
Überlastung durch Authentifizierung: Verwalten Sie die Authentifizierung, indem Sie einen schrittweisen Verbindungsaufbau implementieren und die Anzahl neuer Verbindungen auf jeweils 1.000 beschränken. Verwenden Sie Verbindungspooling, um authentifizierte Verbindungen effektiv wiederzuverwenden. Um zu vermeiden, dass der Amazon DocumentDB-Cluster mit Verbindungen überlastet wird, implementieren Sie eine Strategie zum Verbindungsaufbau.
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; } } }
Sie können Ihre Verbindungspool-Einstellungen auch so konfigurieren, dass die Gesamtzahl der zulässigen Verbindungen begrenzt wird.
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();
Konfigurationsprobleme: Stellen Sie sicher, dass Ihre Anwendung Zugriff auf die private VPC und das Subnetz hat, in denen sich Ihre Amazon DocumentDB-Ressourcen befinden. Wenn Sie VPC-Peering verwenden, finden Sie weitere Informationen im Entwicklerhandbuch Problembehandlung bei einer VPC-Peering-Verbindung. Sie können auch den Knowledge Center-Artikel Wie behebe ich Verbindungsprobleme zwischen dem Internet und Amazon EC2-Instances in meiner VPC?
Für die Konfiguration der Sicherheitsgruppe müssen Sie eine Eingangsregel in Ihre Amazon DocumentDB-Sicherheitsgruppe aufnehmen, um Verbindungen von Ihrer Anwendung aus zuzulassen.
{ "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" } ] }
Wenn der Cluster mit TLS-Verschlüsselung konfiguriert ist, laden Sie das TLS-Zertifikat für Amazon Amazon DocumentDB mit dem Namen global-bundle.pem herunter und verwenden Sie es, wenn Sie eine Verbindung zum Cluster herstellen.
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Long-term Lösungen
Eine Skalierung der Instance kann durch ein Upgrade auf eine größere Instance-Klasse oder das Hinzufügen von Read Replicas zur Verteilung der Verbindungslast erforderlich sein. Die korrekte Implementierung des Lastenausgleichs gewährleistet eine optimale Nutzung der Ressourcen im gesamten Cluster.
Anwendungsänderungen sollten sich auf die Implementierung einer robusten Verbindungsverwaltung, eine umfassende Überwachung und die Einhaltung der bewährten Methoden für das Verbindungspooling konzentrieren. Dazu gehören die richtige Fehlerbehandlung und das Management des Verbindungslebenszyklus.
Zu den Verbesserungen der Architektur gehören möglicherweise die Einführung von Amazon DocumentDB Serverless für variable Workloads, die Implementierung einer ausgeklügelten Wiederholungslogik und das Design im Hinblick auf Fehlertoleranz. Erwägen Sie, die Anwendungsarchitektur umzustrukturieren, um das Verbindungsmanagement besser zu handhaben.
Bewährte Methoden
Verbindungspools
Durch die richtige Verwaltung und Überwachung des Verbindungspools können Anwendungen eine stabile Datenbankkonnektivität aufrechterhalten und gleichzeitig Überlastungsszenarien verhindern, die sich auf die Zuverlässigkeit und Leistung des Systems auswirken könnten. Konfigurieren Sie angemessene Timeouts und passen Sie Ihren Pool entsprechend den Merkmalen Ihrer Arbeitslast an.
Beispiel für die Einstellung eines Verbindungspools
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(10)) .applyToConnectionPoolSettings(builder -> builder.maxWaitQueueSize(2)) .applyToConnectionPoolSettings(builder -> builder.maxConnectionIdleTime(10, TimeUnit.MINUTES)) .build();
Weitere Informationen finden Sie unter Erstellen robuster Anwendungen mit Amazon DocumentDB — Teil 1: Client-Konfiguration
Überlastung bei der Authentifizierung
Implementieren Sie das Verbindungspooling immer mit entsprechenden Werten für Parameter, die auf Ihrer Arbeitslast basieren. Verwenden Sie ein schrittweises Verfahren zum Verbindungsaufbau und pflegen Sie, wenn möglich, persistente Verbindungen. Implementieren Sie eine ordnungsgemäße Verbindungsbereinigung, um sicherzustellen, dass keine ungenutzten Ressourcen verschwendet werden.
Probleme mit der Konfiguration
Stellen Sie sicher, dass Sie das richtige Routing von Ihrer Anwendung zu den Amazon DocumentDB-Ressourcen konfiguriert haben. Verwenden Sie TLS für die Verschlüsselung während der Übertragung und implementieren Sie den Zugriff mit den geringsten Rechten. Überprüfen Sie Ihre Amazon DocumentDB-Anmeldeinformationen und überprüfen Sie die Werte der Verbindungszeichenfolge.