View a markdown version of this page

Verbindungsprobleme mit Amazon DocumentDB - Amazon DocumentDB

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 — Finde das Problem

Häufige Ursachen

Verbindungsprobleme sind in der Regel auf drei Hauptbereiche zurückzuführen:

Eine Erschöpfung des Verbindungspools tritt auf, wenn eine Anwendung ihre maximal zulässigen Verbindungen zu Amazon DocumentDB erreicht, entweder über die clientseitigen Verbindungs-Pool-Limits oder die serverseitigen Instance-Limits. Dieser Zustand führt zu verminderter Anwendungsleistung, Zeitüberschreitungen und potenziellen Ausfällen, da neue Verbindungsanfragen entweder in die Warteschlange gestellt oder abgelehnt werden.

Eine Authentifizierungsüberlastung 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 Authentifizierungswartung hält Amazon DocumentDB eine exklusive Sperre für die Sitzungsübersicht fest, sodass nachfolgende Authentifizierungsversuche in die Warteschlange gestellt werden, 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 beispielsweise falsche Sicherheitsgruppeneinstellungen, falsche VPC-Konfiguration oder SSL/TLS Zertifikatsprobleme. Das Verständnis der richtigen Konfiguration ist für die Aufrechterhaltung eines sicheren und zuverlässigen Datenbankzugriffs unerlässlich.

Diagnose — Finden Sie die Ursache

Verbindungspools

Der Verbindungspool wird initialisiert, wenn eine MongoClient Instanz erstellt wird. Jeder Pool verwaltet Verbindungen auf der Grundlage von zwei Schlüsselparametern:

minPoolSize - Mindestanzahl der unterhaltenen Verbindungen

maxPoolSize - Maximal zulässige Verbindungen

Wenn eine Anfrage eine Verbindung benötigt:

  1. Der Pool sucht nach verfügbaren inaktiven Verbindungen

  2. Wenn keine vorhanden sind und die Poolgröße < ist maxPoolSize, wird eine neue Verbindung erstellt

  3. Bei at maxPoolSize wird die Anfrage in eine Wartewarteschlange gestellt

  4. Wenn die Warteschlange voll ist oder das Timeout erreicht ist, wird sie ausgelöst MongoWaitQueueFullException

Das Verhalten der Warteschlange wird über diese Parameter gesteuert:

waitQueueTimeoutMS - Maximale Wartezeit für die Verbindung

waitQueueSize - Maximale Anzahl von Anfragen in der Warteschlange

Hier ist ein Beispiel für einen problematischen Ansatz für die Verbindung mit Amazon DocumentDB, bei dem jedes Mal ein neuer Pool erstellt wird:

for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }

Folgende wichtige CloudWatch Kennzahlen müssen überwacht werden:

  • DatabaseConnections- Die Anzahl der Verbindungen (aktiv und inaktiv), die auf einer Instance geöffnet sind, die im Abstand von 1 Minute hergestellt wurden.

  • 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 für eine Instance zu einem bestimmten Zeitpunkt zulässig sind.

  • LowMemNumOperationsThrottled— Die Anzahl der Anfragen, die aufgrund von zu wenig verfügbarem Speicherplatz in einem Zeitraum von 1 Minute gedrosselt wurden.

Limits pro Instance-Klasse finden Sie unter Kontingente und Limits.

Zu den häufigsten Warnsignalen für Probleme mit dem Verbindungspool auf Anwendungsebene gehören:

  • Erhöhung der Verbindungsaufnahmezeiten

  • Zunehmende Größe der Warteschlange

  • Steigende Anzahl von Timeout-Ausnahmen

Überlastung bei der Authentifizierung

Die Verbindung zu Amazon DocumentDB erfolgt wie folgt:

Verbindungsanfrage → SSL-Handshake → Authentifizierung → Sitzungserstellung → Verbindung bereit

Bei der Verarbeitung von mehr als 1.000 neuen Verbindungen werden nach Abschluss des SSL-Handshakes weitere Verbindungsanfragen in eine Warteschlange für die Authentifizierung aufgenommen. Bei diesen Überlastungsereignissen erhöhen sich die durchschnittlichen Verbindungszeiten Ihrer Anwendung.

Folgende CloudWatch Kennzahlen müssen unbedingt überwacht werden:

  • DatabaseConnections- Die Anzahl der Verbindungen (aktiv und inaktiv), die auf einer Instance geöffnet sind, die im Abstand von 1 Minute hergestellt wurden.

  • 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 für eine Instance zu einem bestimmten Zeitpunkt zulässig sind.

Probleme mit der Konfiguration

Das häufigste Konfigurationsproblem tritt auf, wenn versucht wird, aus einer Umgebung ohne Zugriff auf die private Netzwerkumgebung 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 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 ebenfalls zu Verbindungsfehlern führen. Ein Amazon DocumentDB-Cluster wartet standardmäßig auf Verbindungen am TCP-Port 27017. Ihre Anwendung schlägt fehl, wenn versucht wird, eine Verbindung zu einem anderen Port herzustellen als dem, mit dem der Cluster bereitgestellt wurde, oder wenn die Anwendung nicht in der Konfiguration der Eingangssicherheitsgruppe 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 bei der Übertragung aktiviert ist, sind sichere Verbindungen mit TLS erforderlich, um mithilfe des Zertifikats global-bundle.pem eine Verbindung zum Cluster herzustellen. Wenn Sie versuchen, das falsche Zertifikat zu verwenden, erhalten Sie beispielsweise folgende Fehler:

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 folgende Fehler:

Server selection timed out after 30000 ms

Lösung — Beheben Sie das Problem

Verbindungspools: Überprüfen Sie das Verbindungspooling, indem Sie die Poolgröße implementieren oder an die Workload-Anforderungen anpassen. Optimale Poolkonfigurationen hängen von Ihrer Arbeitslast und Ihren Anforderungen ab. Sie sollten minPoolSize so vorgehen, dass die Kernverbindungen bereit und verfügbar sind, und maxWaitTime kurz genug sein, um schnell ausfallen zu können, 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 bei der Authentifizierung: Verwalten Sie die Authentifizierung, indem Sie einen schrittweisen Verbindungsaufbau implementieren und neue Verbindungen auf jeweils 1.000 beschränken. Verwenden Sie Verbindungspooling, um authentifizierte Verbindungen effektiv wiederzuverwenden. Um eine Überlastung des Amazon DocumentDB-Clusters mit Verbindungen zu vermeiden, implementieren Sie eine Strategie für den 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 DocumentDB-Ressourcen befinden. Wenn Sie VPC-Peering verwenden, finden Sie weitere Informationen im Entwicklerhandbuch zur Fehlerbehebung bei einer VPC-Peering-Verbindung. Sie können auch den Knowledge Center-Artikel Wie behebe ich Verbindungsprobleme zwischen dem Internet und Amazon EC2 EC2-Instances in meiner VPC? lesen? .

Für die Konfiguration von Sicherheitsgruppen 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

Langfristige Lösungen

Die Skalierung von Instanzen kann durch ein Upgrade auf eine größere Instanzklasse oder durch das Hinzufügen von Read Replicas zur Verteilung der Verbindungslast erforderlich sein. Eine ordnungsgemäße Implementierung des Lastenausgleichs gewährleistet eine optimale Ressourcennutzung im gesamten Cluster.

Bei Änderungen an Anwendungen sollte der Schwerpunkt auf der Implementierung einer robusten Verbindungsverwaltung, einer umfassenden Überwachung und der Einhaltung der bewährten Methoden für das Verbindungspooling liegen. Dazu gehören die richtige Fehlerbehandlung und das Management des Verbindungslebenszyklus.

Architekturverbesserungen könnten die Einführung von Amazon DocumentDB Serverless für variable Workloads, die Implementierung einer ausgeklügelten Wiederholungslogik und das Design für Fehlertoleranz beinhalten. Erwägen Sie eine Umstrukturierung der Anwendungsarchitektur, um das Verbindungsmanagement besser handhaben zu können.

Bewährte Methoden

Verbindungspools

Durch die richtige Verwaltung und Überwachung der Verbindungspools können Anwendungen eine stabile Datenbankkonnektivität aufrechterhalten und gleichzeitig Erschöpfungsszenarien verhindern, die sich auf die Zuverlässigkeit und Leistung des Systems auswirken könnten. Konfigurieren Sie geeignete Timeouts und dimensionieren Sie Ihren Pool auf der Grundlage der Eigenschaften Ihres Workloads.

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: https://aws.amazon.com/blogs/database/ - -compatibility-part-1-client-configuration/ building-resilient-applications-with amazon-documentdb-with-mongodb

Überlastung bei der Authentifizierung

Implementieren Sie Verbindungspooling immer mit geeigneten Werten für Parameter, die auf Ihrer Arbeitslast basieren. Verwenden Sie ein schrittweises Verfahren zum Verbindungsaufbau und halten Sie nach Möglichkeit persistente Verbindungen aufrecht. Führen Sie eine ordnungsgemäße Verbindungsbereinigung durch, 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 DocumentDB-Ressourcen konfiguriert haben. Verwenden Sie TLS für die Verschlüsselung bei der Übertragung und implementieren Sie den Zugriff mit den geringsten Rechten. Überprüfen Sie Ihre Amazon DocumentDB DocumentDB-Anmeldeinformationen und validieren Sie die Werte der Verbindungszeichenfolgen.