Conexión desde fuera de Amazon EC2: problema con el tiempo de espera del firewall - Amazon Redshift

Conexión desde fuera de Amazon EC2: problema con el tiempo de espera del firewall

Problema de ejemplo

Su conexión cliente a la base de datos parece que dejó de funcionar o que superó el tiempo de espera mientras ejecutaba consultas largas, como un comando COPY. En este caso, es posible que observe que la consola de Amazon Redshift muestra que se ha completado la consulta, pero, aparentemente, la propia herramienta cliente sigue ejecutando la consulta. Los resultados de la consulta podrían ser que falta procesar o que está incompleta según cuándo se haya detenido la conexión.

Posibles soluciones:

Este problema ocurre cuando se conecta a Amazon Redshift desde una máquina que no sea una instancia de Amazon EC2. En este caso, las conexiones inactivas se terminan con un componente de red intermedio, como un firewall, tras un periodo de inactividad. Este comportamiento es normal cuando se accede desde una red privada virtual (VPN) o desde la red local.

Para evitar estos tiempos de espera, le recomendamos realizar los siguientes cambios:

Modificación de la configuración del tiempo de espera de TCP/IP

Para cambiar la configuración del tiempo de espera de TCP/IP, establezca las configuraciones de tiempo de espera conforme al sistema operativo que usa para conectarse a su clúster.

  • Linux: si su cliente se está ejecutando en Linux, ejecute el siguiente comando como usuario raíz para cambiar la configuración del tiempo de espera para la sesión actual:

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

    Para continuar con la configuración, cree o modifique el archivo /etc/sysctl.conf con los siguientes valores y, luego, reinicie su sistema.

    net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
  • Windows: si su cliente se ejecuta en Windows, edite los valores para las siguientes configuraciones de registro en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\:

    • KeepAliveTime: 30000

    • KeepAliveInterval: 1000

    • TcpMaxDataRetransmissions: 10

    Estas configuraciones usan tipos de datos DWORD. Si no existen en la ruta de registro, puede crear las configuraciones y especificar estos valores recomendados. Para obtener más información acerca de cómo editar el registro de Windows, consulte la documentación de Windows.

    Después de configurar estos valores, reinicie su equipo para que se apliquen los cambios.

  • Mac: si su cliente se está ejecutando en una Mac, ejecute los siguientes comandos para cambiar la configuración de tiempo de espera para la sesión actual:

    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

    Para continuar con la configuración, cree o modifique el archivo /etc/sysctl.conf con los siguientes valores:

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

    Reinicie su equipo y, luego, ejecute los siguientes comandos para controlar que los valores están configurados.

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

Modificación de la configuración del tiempo de espera del DSN

Puede configurar el comportamiento de keepalive en el nivel de DSN que elija. Puede hacerlo agregando o modificando los siguientes parámetros en el archivo odbc.ini:

KeepAlivesCount

La cantidad de paquetes keepalive de TCP que se pueden perder antes de que se considere que se interrumpió la conexión.

KeepAlivesIdle

La cantidad de segundos de inactividad antes de que el controlador envíe un paquete keepalive de TCP.

KeepAlivesInterval

La cantidad de segundos entre cada retransmisión de keepalive de TCP.

Si estos parámetros no existen o si tienen un valor 0, el sistema usará los parámetros keepalive especificados para TCP/IP con objeto de determinar el comportamiento keepalive del DSN. En Windows, puede encontrar los parámetros TCP/IP en el registro en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\. En Linux y Mac OS, puede encontrar los parámetros de TCP/IP en el archivo sysctl.conf.