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:
-
Aumentar los valores del sistema cliente que administran los tiempos de espera de TCP/IP. Realice estos cambios en el equipo que está usando para conectarse a su clúster. El periodo de tiempo de espera debe adaptarse a su cliente y su red. Para obtener más información, consulte Modificación de la configuración del tiempo de espera de TCP/IP.
-
Si lo prefiere, configure el comportamiento de keepalive en el nivel de DSN. Para obtener más información, consulte Modificación de la configuración del tiempo de espera del DSN.
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.