Solución de problemas de conexión en Amazon Redshift - Amazon Redshift

Solución de problemas de conexión en Amazon Redshift

Si tiene problemas para conectarse a su clúster desde una herramienta de cliente SQL, hay distintos puntos que puede controlar para acotar la solución del problema. Si está usando certificados SSL o de servidor, primero elimine esta complejidad mientras solucione el problema de conexión. Una vez que haya encontrado una solución, vuelva a agregarla. Para obtener más información, consulte Configuración de las opciones de seguridad para las conexiones.

importante

Amazon Redshift ha cambiado la forma en que se administran los certificados SSL. Si tiene problemas para conectarse mediante SSL, es posible que tenga que actualizar sus certificados de CA raíz de confianza actuales. Para obtener más información, consulte Migración a certificados de ACM para las conexiones SSL.

En la siguiente sección, se muestran algunos ejemplos de mensajes de error y posibles soluciones para los problemas de conexión. Como las diferentes herramientas de cliente SQL proporcionan diferentes mensajes de error, esta no es un lista completa, pero debe ser un buen punto de partida para la solución de problemas.

Conexión desde fuera de Amazon EC2 y encontrarse con un problema con el tiempo de espera del firewall

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.

La conexión devuelve un error o se rechaza

Si la conexión se rechaza o produce un error, es posible que reciba un error similar a uno de los siguientes.

  • "No se pudo establecer conexión con <endpoint>".

  • "No se pudo conectar al servidor: se ha agotado el tiempo de espera. ¿El servidor se está ejecutando en el host '<endpoint>' y acepta conexiones TCP/IP en el puerto '<port>'?"

  • "Conexión rechazada. Compruebe que el nombre de host y el puerto sean los correctos y que el administrador de correo acepte conexiones TCP/IP".

Posibles soluciones:

Generalmente, cuando recibe un mensaje de error indicando que hay un error al establecer una conexión, se trata de un problema con el permiso para acceder al clúster o con el tráfico de red que llega al clúster.

Para conectarse al clúster desde una herramienta cliente fuera de la red en la que se encuentra el clúster, debe agregar una regla de entrada al grupo de seguridad del clúster. La configuración de las reglas depende de si el clúster de Amazon Redshift se ha creado en una nube privada virtual (VPC):

  • Si ha creado el clúster de Amazon Redshift en una nube privada virtual (VPC) basada en Amazon VPC, agregue una regla de entrada al grupo de seguridad de VPC que especifique la dirección CIDR/IP del cliente, en Amazon VPC. Para obtener más información sobre la configuración de los grupos de seguridad de la VPC para su clúster y las opciones de acceso público, consulte Recursos de Redshift en una VPC.

  • Si creó su clúster de Amazon Redshift fuera de una VPC, agregue su dirección CIDR/IP de cliente al grupo de seguridad del clúster en Amazon Redshift. Para obtener más información acerca de cómo configurar los grupos de seguridad del clúster, consulte Grupos de seguridad de Amazon Redshift.

Si intenta conectarse al clúster desde una herramienta cliente que se ejecuta en una instancia de Amazon EC2, agregue también una regla de entrada. En este caso, agregue una regla al grupo de seguridad del clúster. La regla debe especificar el grupo de seguridad de Amazon EC2 asociado a la instancia de Amazon EC2 de la herramienta cliente.

En algunos casos, es posible que tenga una capa entre el cliente y el servidor, como un firewall. En estos casos, asegúrese de que el firewall acepte conexiones entrantes a través del puerto que configuró para el clúster.

El cliente y el controlador son incompatibles

Si el cliente y el controlador son incompatibles, es posible que reciba un mensaje de error que diga: "El DSN especificado contiene una arquitectura que no coincide entre el controlador y la aplicación".

Posibles soluciones:

Cuando intenta conectarse y obtiene un error sobre una discordancia de arquitectura, esto significa que la herramienta cliente y el controlador no son compatibles. Esto ocurre porque su arquitectura del sistema no coincide. Por ejemplo, esto puede ocurrir si tiene una herramienta de cliente de 32 bits, pero tiene instalada la versión de 64 bits del controlador. Algunas veces, las herramientas de cliente de 64 bits pueden usar controladores de 32 bits, pero no puede usar aplicaciones de 32 bits con controladores de 64 bits. Asegúrese de que el controlador y la herramienta de cliente estén usando la misma versión de arquitectura de sistema.

Falta de respuesta de las consultas y pérdidas de consultas antes de llegar al clúster

Tiene un problema con la finalización de las consultas. Aparentemente, las consultas se están ejecutan pero dejan de responder en la herramienta de cliente SQL. Algunas veces, las consultas no aparecen en el clúster, como en las tablas de sistema o en la consola de Amazon Redshift.

Posibles soluciones:

Este problema puede ocurrir debido a la pérdida de paquetes. En este caso, hay una diferencia en el tamaño máximo de la unidad de transmisión (MTU) en la ruta de red entre dos hosts de Internet Protocol (IP). El tamaño de la MTU determina el tamaño máximo, en bytes, de un paquete que puede ser transferido en una trama Ethernet desde una conexión de red. En AWS, algunos tipos de instancia de Amazon EC2 admiten una MTU de 1500 (tramas Ethernet v2) y otros tipos de instancia admiten una MTU de 9001 (tramas gigantes TCP/IP).

Para evitar problemas relacionados con las diferencias en tamaños de la MTU, recomendamos realizar alguna de las siguientes operaciones:

  • Si el clúster utiliza la plataforma EC2-VPC, configure el grupo de seguridad de Amazon VPC con una regla de entrada personalizada del protocolo de mensajes de control de Internet (ICMP, Internet Control Message Protocol) que devuelva Destination Unreachable. Por lo tanto, la regla indica al host de origen que utilice el tamaño mínimo de MTU a lo largo de la ruta de red. Para obtener más información acerca de este método, consulte Configuración de los grupos de seguridad para permitir el ICMP "Destination Unreachable".

  • Si el clúster usa la plataforma EC2-Classic o si no puede permitir la regla entrante de ICMP, deshabilite las tramas gigantes TCP/IP para que se usen las tramas Ethernet v2. Para obtener más información acerca de este método, consulte Configuración de la MTU de una instancia.

Configuración de los grupos de seguridad para permitir el ICMP "Destination Unreachable"

Cuando haya una diferencia en el tamaño de la MTU en la red entre los dos hosts, primero asegúrese de que su configuración de red no bloque la detección de la MTU de la ruta (PMTUD). La PMTUD permite que el host receptor responda al host origen con el siguiente mensaje de ICMP: Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4). Este mensaje le indica al host origen que use el mínimo tamaño de la MTU en la ruta de la red para volver a enviar la solicitud. Sin esta negociación, puede perderse el paquete porque la solicitud es muy grande para que la acepte el host receptor. Para obtener más información acerca de este mensaje de ICMP, consulte RFC792 en el sitio web Internet Engineering Task Force (IETF).

Si no configura de forma explícita esta regla de entrada de ICMP para su grupo de seguridad de Amazon VPC, se bloquea la PMTUD. En AWS, los grupos de seguridad son como un firewall virtual que especifican reglas para controlar el tráfico entrante y saliente de una instancia. Para obtener información acerca del grupo de seguridad del clúster de Amazon Redshift, consulte Grupos de seguridad de Amazon Redshift. Para los clústeres que usan la plataforma EC2-VPC, Amazon Redshift utiliza grupos de seguridad de VPC para permitir o rechazar el tráfico al clúster. De manera predeterminada, los grupos de seguridad están bloqueados y rechazan el tráfico entrante. Para obtener información acerca de cómo configurar reglas de entrada y salida para instancias EC2-Classic o EC2-VPC, consulte Diferencias entre instancias en EC2-Classic y una VPC en la Guía del usuario de Amazon EC2.

Para obtener más información acerca de cómo agregar reglas a los grupos de seguridad de VPC, consulte Grupos de seguridad de la VPC. Para obtener más información acerca de la configuración específica de PMTUD que se requiere en esta regla, consulte Detección de la MTU de la ruta en la Guía del usuario de Amazon EC2.

Configuración de la MTU de una instancia

En algunos casos, el clúster puede usar la plataforma EC2-Classic o no puede permitir la regla ICMP personalizada para el tráfico entrante. En estos casos, se recomienda ajustar la MTU a 1500 en la interfaz de red (NIC) de las instancias EC2 desde las que se conecta al clúster de Amazon Redshift. Este ajuste deshabilita las tramas gigantes TCP/IP para garantizar que las conexiones usen siempre el mismo tamaño de paquete. No obstante, esta opción reduce el rendimiento máximo de su red para toda la instancia, no solo para las conexiones a Amazon Redshift. Para obtener más información, consulte los siguientes procedimientos.

Pasos para configurar la MTU en un sistema operativo Microsoft Windows

Si su cliente se ejecuta en un sistema operativo Microsoft Windows, puede revisar y configurar el valor de la MTU para el adaptador Ethernet usando el comando netsh.

  1. Ejecute el siguiente comando para determinar el valor actual de la MTU:

    netsh interface ipv4 show subinterfaces
  2. Revise el valor de MTU para el adaptador Ethernet en la salida.

  3. Si el valor no es 1500, ejecute el siguiente comando para verlo:

    netsh interface ipv4 set subinterface "Ethernet" mtu=1500 store=persistent

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

Pasos para configurar la MTU en un sistema operativo Linux

Si su cliente se ejecuta en un sistema operativo Linux, puede revisar y configurar el valor de la MTU usando el comando ip.

  1. Ejecute el siguiente comando para determinar el valor actual de la MTU:

    $ ip link show eth0
  2. Revise el valor posterior a mtu en la salida.

  3. Si el valor no es 1500, ejecute el siguiente comando para verlo:

    $ sudo ip link set dev eth0 mtu 1500
Pasos para configurar la MTU en un sistema operativo Mac
  • Siga las instrucciones del sitio de soporte de macOS sobre How to change the MTU for troubleshooting purposes. Para obtener más información, consulte el sitio web de soporte.

Configuración del parámetro de tamaño de búsqueda de la JDBC

De manera predeterminada, el controlador Java Database Connectivity (JDBC, Conectividad de base de datos java) recopila todos los resultados de una consulta a la vez. Por este motivo, cuando intenta recuperar un conjunto grande de resultados con una conexión JDBC, es posible que se produzca un error de memoria insuficiente del cliente. Para habilitar su cliente y recuperar conjuntos de resultados en lotes, en lugar de hacerlo en una única búsqueda del tipo "todo o nada", configure el parámetro de tamaño de búsqueda de la JDBC en su aplicación cliente.

nota

El tamaño de búsqueda no es compatible con la Open Database Connectivity (ODBC, Conectividad de base de datos abierta).

Para conseguir el mejor rendimiento, configure el tamaño de búsqueda con el valor máximo que no genere errores de memoria insuficiente. Un valor de tamaño de búsqueda inferior genera más vueltas en el servidor, lo que prolonga los tiempos de ejecución. El servidor reserva recursos, incluido el slot de consultas de Workload Management (WLM, Administración de cargas de trabajo) y la memoria asociada hasta que el cliente recupera todo el conjunto de resultados o hasta que se cancela la consulta. Cuando ajusta el tamaño de búsqueda como corresponde, esos recursos se liberan con mayor rapidez, lo que hace que queden disponibles para otras consultas.

nota

Si necesita extraer grandes conjuntos de datos, le recomendamos que utilice una instrucción UNLOAD para transferir los datos a Amazon S3. Cuando usa UNLOAD, los nodos de computación trabajan en paralelo para acelerar la transferencia de datos.

Para obtener más información acerca de la configuración de los parámetros de tamaño de búsqueda de JDBC, visite Getting results based on a cursor en la documentación de PostgreSQL.