Verbindung von außerhalb von Amazon herstellen EC2 — Firewall-Timeout-Problem - 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.

Verbindung von außerhalb von Amazon herstellen EC2 — Firewall-Timeout-Problem

Beispiel für ein Problem

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 DSNTimeout-Einstellungen ändern.

Ä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

DSNTimeout-Einstellungen ändern

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.