Herstellen von Verbindungen von außerhalb von Amazon EC2 – Problem mit Firewall-Zeitüberschreitung - Amazon Redshift

Herstellen von Verbindungen von außerhalb von Amazon EC2 – Problem mit Firewall-Zeitüberschreitung

Beispiel für ein Problem

Ihre Client-Verbindung mit der Datenbank scheint zu hängen oder Zeitüberschreitungen zu unterliegen, wenn lange Abfragen wie COPY-Befehle ausgeführt werden. 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 eine Verbindung zu Amazon Redshift von einer anderen Maschine als einer Amazon-EC2-Instance herstellen. In diesem Fall werden Leerlaufverbindungen durch eine Zwischennetzwerkkomponente, z. B. eine Firewall, nach einem Inaktivitätszeitraum beendet. Dieses Verhalten ist typisch, wenn Sie sich über ein Virtual Private Network (VPN) oder Ihr lokales Netzwerk anmelden.

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

Ändern der TCP/IP-Einstellungen für Zeitüberschreitungen

Um die TCP/IP-Einstellungen für Zeitüberschreitungen zu ändern, konfigurieren Sie die Einstellungen für Zeitüberschreitungen entsprechend dem Betriebssystem, das Sie für 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\SYSTEM\CurrentControlSet\Services\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 der DSN-Einstellungen für Zeitüberschreitungen

Sie können das Keepalive-Verhalten auf DSN-Ebene festlegen, wenn Sie dies wünschen. 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 dürfen, bevor die Verbindung als abgebrochen betrachtet wird.

KeepAlivesIdle

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

KeepAlivesInterval

Die Anzahl der Sekunden zwischen den einzelnen TCP-Keepalive-Übertragungen.

In Windows ändern Sie diese Parameter in der Registrierung, indem Sie Schlüssel in HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\Ihr_DSN hinzufügen oder ändern. Unter Linux und macOS fügen Sie diese Parameter im DSN-Zieleintrag direkt in der odbc.ini-Datei ein oder ändern sie dort. Weitere Informationen zum Ändern der odbc.ini-Datei auf Linux- und macOs-Computern finden Sie unter Verwenden Sie einen ODBC-Treibermanager, um den Treiber unter Linux und macOS X zu konfigurieren.

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