Beheben von Problemen mit Verbindungen in Amazon Redshift - Amazon Redshift

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.

Beheben von Problemen mit Verbindungen in Amazon Redshift

Wenn Sie Probleme mit der Verbindung zu Ihrem Cluster von einem SQL Client-Tool aus haben, können Sie verschiedene Dinge überprüfen, um das Problem einzugrenzen. Wenn Sie Serverzertifikate verwendenSSL, entfernen Sie zunächst diese Komplexität, während Sie das Verbindungsproblem beheben. Fügen Sie diese Komponenten wieder hinzu, wenn Sie eine Lösung gefunden haben. Weitere Informationen finden Sie unter Konfigurieren von Sicherheitsoptionen für Verbindungen.

Wichtig

Amazon Redshift hat die Art und Weise geändert, wie SSL Zertifikate verwaltet werden. Wenn Sie Probleme mit der Verbindung habenSSL, müssen Sie möglicherweise Ihre aktuellen Trust-Root-CA-Zertifikate aktualisieren. Weitere Informationen finden Sie unter Umstellung auf ACM Zertifikate für Verbindungen SSL.

Im folgenden Abschnitt werden einige beispielhafte Fehlermeldungen und mögliche Lösungen für Verbindungsprobleme gezeigt. Da verschiedene SQL Client-Tools unterschiedliche Fehlermeldungen ausgeben, ist diese Liste nicht vollständig, sollte aber ein guter Ausgangspunkt für die Problembehandlung sein.

Eine Verbindung von außerhalb von Amazon wird hergestellt EC2 und es tritt ein Firewall-Timeout-Problem auf

Ihre Client-Verbindung zur Datenbank scheint hängen zu bleiben oder es kommt zu einem Timeout, wenn lange Abfragen ausgeführt werden, z. B. bei einem COPY Befehl. Wenn dies der Fall ist, sehen Sie möglicherweise in der Amazon-Redshift-Konsole, dass die Abfrage abgeschlossen ist, aber das Client-Tool scheint die Abfrage noch nicht abgeschlossen zu haben. Je nachdem, wann die Verbindung unterbrochen wurde, fehlen möglicherweise Abfrageergebnisse oder sind unvollständig.

Mögliche Lösungen

Dieses Problem tritt auf, wenn Sie von einem anderen Computer als einer EC2 Amazon-Instance aus eine Verbindung zu Amazon Redshift herstellen. In diesem Fall werden inaktive Verbindungen nach einer gewissen Zeit der Inaktivität durch eine zwischengeschaltete Netzwerkkomponente, z. B. eine Firewall, beendet. Dieses Verhalten ist typisch, wenn Sie sich von einem virtuellen privaten Netzwerk (VPN) oder Ihrem lokalen Netzwerk aus anmelden.

Um diese Zeitüberschreitungen zu vermeiden, werden folgende Änderungen empfohlen:

  • Erhöhen Sie die Clientsystemwerte, die mit TCP /IP-Timeouts umgehen. Sie sollten diese Änderungen auf dem Computer ausführen, den Sie für die Verbindung mit Ihrem Cluster verwenden. Der Zeitraum für die Zeitüberschreitung sollte an Ihren Client und Ihr Netzwerk angepasst sein. Weitere Informationen finden Sie unter Ändern Sie die TCP /IP-Timeout-Einstellungen.

  • Legen Sie optional das Keepalive-Verhalten auf der Ebene fest. DSN Weitere Informationen finden Sie unter Ändern Sie die DSN Timeout-Einstellungen.

Ändern Sie die TCP /IP-Timeout-Einstellungen

Um die TCP /IP-Timeout-Einstellungen zu ändern, konfigurieren Sie die Timeout-Einstellungen entsprechend dem Betriebssystem, das Sie für die Verbindung mit Ihrem Cluster verwenden.

  • Linux – Wenn Ihr Client unter Linux ausgeführt wird, führen Sie den folgenden Befehl als Root-Benutzer aus, um die Timeout-Einstellungen für die aktuelle Sitzung zu ändern:

    /sbin/sysctl -w net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5

    Um die Einstellungen dauerhaft festzulegen, erstellen Sie die Datei /etc/sysctl.conf mit den folgenden Werten oder aktualisieren sie entsprechend und starten anschließend Ihr System neu.

    net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
  • Windows — Wenn Ihr Client unter Windows ausgeführt wird, bearbeiten Sie die Werte für die folgenden Registrierungseinstellungen unter HKEY _ LOCAL _MACHINE\\\ ServicesSYSTEM\ CurrentControlSet Tcpip\ Parameters\:

    • KeepAliveTime: 30000

    • KeepAliveInterval: 1000

    • TcpMaxDataRetransmissions: 10

    Diese Einstellungen verwenden den DWORD Datentyp. Wenn die am Registrierungspfad nicht vorhanden sind, können Sie die Einstellungen erstellen und diese empfohlenen Werte angeben. Weitere Informationen zum Bearbeiten der Windows-Registrierung finden Sie in der Windows-Dokumentation.

    Nachdem Sie diese Werte festgelegt haben, starten Sie Ihren Computer neu, damit die Änderungen wirksam werden.

  • Mac – Wenn Ihr Client auf einem Mac ausgeführt wird, führen Sie die folgenden Befehle aus, um die Timeout-Einstellungen für die aktuelle Sitzung zu ändern:

    sudo sysctl net.inet.tcp.keepintvl=200000 sudo sysctl net.inet.tcp.keepidle=200000 sudo sysctl net.inet.tcp.keepinit=200000 sudo sysctl net.inet.tcp.always_keepalive=1

    Um die Einstellungen dauerhaft festzulegen, erstellen Sie die Datei /etc/sysctl.conf mit den folgenden Werten:

    net.inet.tcp.keepidle=200000 net.inet.tcp.keepintvl=200000 net.inet.tcp.keepinit=200000 net.inet.tcp.always_keepalive=1

    Starten Sie Ihren Computer neu und führen Sie anschließend die folgenden Befehle aus, um zu überprüfen, ob die Werte festgelegt wurden.

    sysctl net.inet.tcp.keepidle sysctl net.inet.tcp.keepintvl sysctl net.inet.tcp.keepinit sysctl net.inet.tcp.always_keepalive

Ändern Sie die DSN Timeout-Einstellungen

Sie können das Keepalive-Verhalten auf der DSN Ebene festlegen, wenn Sie möchten. Sie tun dies, indem Sie die folgenden Parameter in der odbc.ini-Datei hinzufügen oder ändern:

KeepAlivesCount

Die Anzahl der TCP Keepalive-Pakete, die verloren gehen können, bevor die Verbindung als unterbrochen betrachtet wird.

KeepAlivesIdle

Die Anzahl der Sekunden der Inaktivität, bevor der Treiber ein TCP Keepalive-Paket sendet.

KeepAlivesInterval

Die Anzahl der Sekunden zwischen den einzelnen TCP Keepalive-Wiederholungen.

Wenn diese Parameter nicht existieren oder den Wert 0 haben, verwendet das System die für TCP /IP angegebenen Keepalive-Parameter, um das Keepalive-Verhalten zu bestimmen. DSN Unter Windows finden Sie die TCP /IP-Parameter in der Registrierung unter. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ Unter Linux und macOS finden Sie die TCP /IP-Parameter in der Datei sysctl.conf.

Verbindung wird zurückgewiesen oder schlägt fehl

Wenn Ihre Verbindung verweigert wird oder fehlschlägt, erhalten Sie möglicherweise eine Fehlermeldung, die einer der folgenden ähnelt.

  • „Es konnte keine Verbindung hergestellt werden zu <endpoint>."

  • „Keine Verbindung mit dem Server möglich: Zeitüberschreitung für die Verbindung. Läuft der Server auf dem Host '<endpoint>' und akzeptiert TCP /IP-Verbindungen am Port '<port>'?"

  • „Verbindung zurückgewiesen. Überprüfen Sie, ob der Hostname und der Port korrekt sind und ob der Postmaster TCP /IP-Verbindungen akzeptiert.“

Mögliche Lösungen

Wenn Sie eine Fehlermeldung erhalten, die besagt, dass keine Verbindung hergestellt werden kann, bedeutet dies im Allgemeinen, dass es ein Problem mit der Berechtigung für den Zugriff auf den Cluster gibt.

Um sich von einem Client-Tool außerhalb des Netzwerks, in dem sich der Cluster befindet, mit dem Cluster zu verbinden, fügen Sie der Sicherheitsgruppe des Clusters eine Eingangsregel hinzu. Die Regelkonfiguration hängt davon ab, ob der Amazon Redshift Redshift-Cluster in einer virtuellen privaten Cloud (VPC) erstellt wurde:

  • Wenn Sie den Amazon Redshift Redshift-Cluster in einer auf Amazon basierenden Virtual Private Cloud (VPC) erstellt habenVPC, fügen Sie der VPC Sicherheitsgruppe, die die CIDR Client-/IP-Adresse spezifiziert, in Amazon eine Regel für eingehenden Datenverkehr hinzu. VPC Weitere Informationen zur Konfiguration der VPC Sicherheitsgruppen für Ihren Cluster und zu öffentlich zugänglichen Optionen finden Sie unter. Redshift-Ressourcen in einem VPC

  • Wenn Sie Ihren Amazon Redshift-Cluster außerhalb von erstellt habenVPC, fügen Sie Ihre CIDR Client-/IP-Adresse zur Cluster-Sicherheitsgruppe in Amazon Redshift hinzu. Weitere Informationen zum Konfigurieren von Cluster-Sicherheitsgruppen finden Sie unter Amazon Redshift Redshift-Sicherheitsgruppen.

Wenn Sie versuchen, von einem Client-Tool aus, das auf einer EC2 Amazon-Instance ausgeführt wird, eine Verbindung zum Cluster herzustellen, fügen Sie auch eine Regel für eingehenden Datenverkehr hinzu. Fügen Sie in diesem Fall der Cluster-Sicherheitsgruppe eine Regel hinzu. Die Regel muss die EC2 Amazon-Sicherheitsgruppe angeben, die der EC2 Amazon-Instance des Client-Tools zugeordnet ist.

In einigen Fällen haben Sie möglicherweise eine Ebene zwischen dem Client und dem Server, z. B. eine Firewall. Stellen Sie in diesen Fällen sicher, dass die Firewall eingehende Verbindungen über den Port akzeptiert, den Sie für Ihren Cluster konfiguriert haben.

Client und Treiber sind nicht kompatibel

Wenn Ihr Client und Ihr Treiber nicht kompatibel sind, erhalten Sie möglicherweise die folgende Fehlermeldung: „Die angegebene Datei DSN enthält ein Architekturproblem zwischen dem Treiber und der Anwendung.“

Mögliche Lösungen

Wenn Sie versuchen, eine Verbindung herzustellen, und einen Fehler bezüglich einer Architekturunstimmigkeit erhalten, bedeutet dies, dass das Client-Tool und der Treiber nicht kompatibel sind. Dies tritt auf, wenn ihre Systemarchitektur nicht übereinstimmt. Dies kann beispielsweise vorkommen, wenn Sie ein 32-Bit-Client-Tool verwenden, jedoch die 64-Bit-Version des Treibers installiert haben. Manchmal können 64-Bit-Client-Tools 32-Bit-Treiber verwenden. Sie können 32-Bit-Anwendungen jedoch nicht mit 64-Bit-Treibern verwenden. Stellen Sie sicher, dass Treiber und Client-Tool dieselbe Version der Systemarchitektur verwenden.

Abfragen scheinen zu hängen und erreichen manchmal den Cluster nicht

Beim Abschließen von Abfragen tritt ein Problem auf, bei dem die Abfragen anscheinend ausgeführt werden, aber im SQL Client-Tool hängen bleiben. Manchmal erreichen die Abfragen den Cluster anscheinend nicht, beispielsweise in Systemtabellen oder in der Amazon-Redshift-Konsole.

Mögliche Lösungen

Dieses Problem kann aufgrund von Paketverlusten auftreten. In diesem Fall besteht ein Unterschied in der maximalen Größe der Übertragungseinheit (MTU) im Netzwerkpfad zwischen zwei IP-Hosts (Internet Protocol). Die MTU Größe bestimmt die maximale Größe in Byte eines Pakets, das in einem Ethernet-Frame über eine Netzwerkverbindung übertragen werden kann. In AWS unterstützen einige EC2 Amazon-Instance-Typen einen MTU von 1500 (Ethernet v2-Frames) und andere Instance-Typen einen MTU von 9001 (TCP/IP-Jumbo-Frames).

Um Probleme zu vermeiden, die aufgrund von MTU Größenunterschieden auftreten können, empfehlen wir, einen der folgenden Schritte durchzuführen:

  • Wenn Ihr Cluster die VPC Plattform EC2 - verwendet, konfigurieren Sie die VPC Amazon-Sicherheitsgruppe mit einer benutzerdefinierten Internet Control Message Protocol (ICMP) -Regel für eingehende Nachrichten, die zurückgegeben Destination Unreachable wird. Die Regel weist somit den ursprünglichen Host an, die niedrigste MTU Größe entlang des Netzwerkpfads zu verwenden. Details zu diesem Ansatz finden Sie unter Sicherheitsgruppen so konfigurieren, dass „Ziel nicht erreichbar“ zugelassen ICMP wird.

  • Wenn Ihr Cluster die EC2 -Classic-Plattform verwendet oder Sie die Regel für ICMP eingehenden Datenverkehr nicht zulassen können, deaktivieren Sie TCP /IP-Jumbo-Frames, sodass Ethernet v2-Frames verwendet werden. Details zu diesem Ansatz finden Sie unter Konfiguration MTU einer Instance.

Sicherheitsgruppen so konfigurieren, dass „Ziel nicht erreichbar“ zugelassen ICMP wird

Wenn es einen Unterschied in der MTU Netzwerkgröße zwischen zwei Hosts gibt, stellen Sie zunächst sicher, dass Ihre Netzwerkeinstellungen die MTU Pfaderkennung nicht blockieren (PMTUD). PMTUDermöglicht es dem empfangenden Host, dem ursprünglichen Host mit der folgenden ICMP Nachricht zu antworten:Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4). Diese Nachricht weist den ursprünglichen Host an, die niedrigste MTU Größe entlang des Netzwerkpfads zu verwenden, um die Anfrage erneut zu senden. Ohne diese Verhandlung können Paketverluste auftreten, da die Anforderung für den empfangenden Host zu groß ist, um sie akzeptieren zu können. Weitere Informationen zu dieser ICMP Nachricht finden Sie RFC792auf der Website der Internet Engineering Task Force (IETF).

Wenn Sie diese ICMP eingehende Regel nicht explizit für Ihre VPC Amazon-Sicherheitsgruppe konfigurieren, PMTUD ist blockiert. Bei AWS Sicherheitsgruppen handelt es sich um virtuelle Firewalls, die Regeln für eingehenden und ausgehenden Datenverkehr zu einer Instance festlegen. Informationen zu Amazon-Redshift-Cluster-Sicherheitsgruppen finden Sie unter Amazon Redshift Redshift-Sicherheitsgruppen. Für Cluster, die die VPC Plattform EC2 - verwenden, verwendet Amazon Redshift VPC Sicherheitsgruppen, um den Datenverkehr zum Cluster zuzulassen oder zu verweigern. Standardmäßig sind die Sicherheitsgruppen restriktiv und lehnen jeden eingehenden Datenverkehr ab. Informationen zum Einrichten von Regeln für eingehende und ausgehende Nachrichten für EC2 -Classic- oder EC2 VPC -Instances finden Sie unter Unterschiede zwischen Instances in EC2 -Classic und a VPC im Amazon-Benutzerhandbuch. EC2

Weitere Informationen zum Hinzufügen von Regeln zu VPC Sicherheitsgruppen finden Sie unter. VPCSicherheitsgruppen Weitere Informationen zu bestimmten PMTUD Einstellungen, die in dieser Regel erforderlich sind, finden Sie unter Path MTU Discovery im EC2Amazon-Benutzerhandbuch.

Konfiguration MTU einer Instance

In einigen Fällen verwendet Ihr Cluster möglicherweise die EC2 -Classic-Plattform, oder Sie können die benutzerdefinierte ICMP Regel für eingehenden Datenverkehr nicht zulassen. In diesen Fällen empfehlen wir, den Wert auf der Netzwerkschnittstelle (NIC) der MTU EC2 Instances, von denen aus Sie eine Verbindung zu Ihrem Amazon Redshift Redshift-Cluster herstellen, auf 1500 einzustellen. Durch diese Anpassung werden TCP /IP-Jumbo-Frames deaktiviert, um sicherzustellen, dass Verbindungen konsistent dieselbe Paketgröße verwenden. Diese Option reduziert den maximalen Netzwerkdurchsatz für die Instance insgesamt und nicht nur für Verbindungen mit Amazon Redshift. Weitere Informationen finden Sie in den folgenden Verfahren.

Zur Einstellung MTU auf einem Microsoft Windows-Betriebssystem

Wenn Ihr Client unter einem Microsoft Windows-Betriebssystem ausgeführt wird, können Sie den MTU Wert für den Ethernet-Adapter mithilfe des netsh Befehls überprüfen und festlegen.

  1. Führen Sie den folgenden Befehl aus, um den aktuellen MTU Wert zu ermitteln:

    netsh interface ipv4 show subinterfaces
  2. Überprüfen Sie den MTU-Wert für den Ethernet-Adapter in der Ausgabe.

  3. Wenn der Wert nicht 1500 ist, führen Sie den folgenden Befehl aus, um ihn festzulegen:

    netsh interface ipv4 set subinterface "Ethernet" mtu=1500 store=persistent

    Nachdem Sie diesen Wert festgelegt haben, starten Sie Ihren Computer neu, damit die Änderungen wirksam werden.

Zur Einstellung MTU auf einem Linux-Betriebssystem

Wenn Ihr Client unter einem Linux-Betriebssystem läuft, können Sie den MTU Wert mithilfe des ip Befehls überprüfen und festlegen.

  1. Führen Sie den folgenden Befehl aus, um den aktuellen MTU Wert zu ermitteln:

    $ ip link show eth0
  2. Überprüfen Sie den Wert nach mtu in der Ausgabe.

  3. Wenn der Wert nicht 1500 ist, führen Sie den folgenden Befehl aus, um ihn festzulegen:

    $ sudo ip link set dev eth0 mtu 1500
Zur Einstellung MTU auf einem Mac-Betriebssystem
  • Folgen Sie den Anweisungen auf der Supportwebsite von MacOS zu How to change the MTU for troubleshooting purposes. Weitere Informationen finden Sie auf der Supportwebsite.

Einstellung des Parameters für die JDBC Abrufgröße

Standardmäßig sammelt der JDBC Treiber alle Ergebnisse einer Abfrage gleichzeitig. Wenn Sie versuchen, eine große Ergebnismenge über eine JDBC Verbindung abzurufen, kann daher ein clientseitiger Fehler out-of-memory auftreten. Damit Ihr Client Ergebnismengen stapelweise statt in einem einzigen Abruf abrufen kann, legen Sie den Parameter für die all-or-nothing JDBC Abrufgröße in Ihrer Client-Anwendung fest.

Anmerkung

Die Abrufgröße wird nicht unterstützt für. ODBC

Legen Sie die Abrufgröße auf den höchsten Wert fest, der nicht zu Fehlern aufgrund von unzureichendem Arbeitsspeicher führt, um die Leistung zu optimieren. Wenn der Wert für die Abrufgröße kleiner gewählt wird, führt dies zu mehr Übertragungsvorgängen zwischen Server und Client, was die Ausführungszeit vergrößert. Der Server reserviert Ressourcen, einschließlich des WLM Abfrageslots und des zugehörigen Speichers, bis der Client die gesamte Ergebnismenge abruft oder die Abfrage abgebrochen wird. Wenn die Abrufgröße richtig eingestellt ist, werden diese Ressourcen schneller wieder freigegeben und sind für andere Abfragen verfügbar.

Anmerkung

Wenn Sie große Datensätze extrahieren müssen, empfehlen wir, für die Übertragung der Daten an Amazon S3 einen UNLOADKontoauszug zu verwenden. Wenn Sie verwendenUNLOAD, arbeiten die Rechenknoten parallel, um die Datenübertragung zu beschleunigen.

Weitere Informationen zur Einstellung des Parameters „JDBCAbrufgröße“ finden Sie in der Postgre-Dokumentation unter Ergebnisse anhand eines Cursors abrufen. SQL