Connessione al di fuori di Amazon EC2: problema di timeout del firewall - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessione al di fuori di Amazon EC2: problema di timeout del firewall

Esempio di problema

Al momento dell'esecuzione di query lunghe, come il comando COPY, la connessione del tuo client al database sembra scadere o interrompersi. In questo caso, è possibile che la console Amazon Redshift mostri che la query è stata completata, ma lo strumento del client stesso sembra che la stia ancora eseguendo. I risultati della query potrebbero essere mancanti o incompleti, a seconda del momento in cui la connessione si è interrotta.

Possibili soluzioni

Questo problema si verifica quando ci si connette ad Amazon Redshift da un computer diverso da un'istanza Amazon EC2. In questo caso, le connessioni inattive vengono terminate da un componente di rete intermedio, ad esempio un firewall, dopo un periodo di inattività. Questo comportamento è tipico quando ci si connette da una rete privata virtuale (VPN) o dalla rete locale.

Per evitare questi timeout, ti consigliamo di apportare le seguenti modifiche:

  • Aumenta i valori del sistema client che gestiscono i timeout TCP/IP. Esegui queste modifiche sul computer che stai utilizzando per connetterti al cluster. Il periodo di timeout deve essere regolato per il tuo client e la tua rete. Per ulteriori informazioni, consulta Modifica delle impostazioni del timeout TCP/IP.

  • A scelta, puoi configurare il comportamento keepalive a livello DSN. Per ulteriori informazioni, consulta Modifica delle impostazioni del timeout DSN.

Modifica delle impostazioni del timeout TCP/IP

Per modificare le impostazioni del timeout TCP/IP, configurale in base al sistema operativo che utilizzi per connetterti al cluster.

  • Linux: se il client è in esecuzione su Linux, emettere il comando seguente come utente root per cambiare le impostazioni di timeout per la sessione corrente:

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

    Per mantenere le impostazioni, crea o modifica il file /etc/sysctl.conf con i seguenti valori, quindi riavvia il sistema.

    net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
  • Windows: se il tuo client funziona su Windows, modifica i valori per le seguenti impostazioni di registro in HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControl Set\ Services\ Tcpip\ Parameters\:

    • KeepAliveTempo: 30000

    • KeepAliveIntervallo: 1000

    • TcpMaxDataRetransmissions: 10

    Queste impostazioni utilizzano il tipo di dati DWORD. Se non esistono nel percorso di registro, è possibile creare le impostazioni e specificare questi valori raccomandati. Per ulteriori informazioni sulla modifica del registro di Windows, consultare la documentazione di Windows.

    Dopo aver impostato questi valori, riavvia il computer per rendere effettive le modifiche.

  • Mac: se il client è in esecuzione su un Mac, emettere i comandi seguenti per cambiare le impostazioni di timeout per la sessione corrente:

    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

    Per mantenere le impostazioni, crea o modifica il file /etc/sysctl.conf con i seguenti valori:

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

    Riavvia il computer, quindi esegui i comandi seguenti per verificare che i valori siano stati impostati.

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

Modifica delle impostazioni del timeout DSN

A scelta, è possibile configurare il comportamento keepalive a livello DSN. Puoi farlo aggiungendo o modificando i parametri seguenti nel file odbc.ini:

KeepAlivesConta

Il numero di pacchetti keepalive TCP che possono essere persi prima che la connessione sia considerata interrotta.

KeepAlivesInattivo

Il numero di secondi di inattività prima che il driver invii un pacchetto keepalive TCP.

KeepAlivesIntervallo

Il numero di secondi tra ciascuna ritrasmissione di keepalive TCP.

In Windows, si modificano questi parametri nel registro aggiungendo o cambiando le chiavi in HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\your_DSN. In Linux e macOS, aggiungi o modifichi questi parametri nella voce DSN di destinazione direttamente nel file odbc.ini. Per ulteriori informazioni sulla modifica del file odbc.ini su computer Linux e macOS, consultare Utilizzo di una gestione del driver ODBC per configurare il driver su sistemi operativi Linux e macOS X.

Se questi parametri non esistono o se hanno un valore pari a 0, il sistema utilizza i parametri keepalive specificati per TCP/IP per determinare il comportamento keepalive DSN. In Windows, puoi trovare i parametri TCP/IP nel Registro di sistema in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\. In Linux e macOS, i parametri TCP/IP sono disponibili nel file sysctl.conf.