Depura problemas de conexión

Introducción

Por lo general, los problemas de conexión se clasifican en una de las siguientes tres áreas:

  • Conexión: ¿Puedes alcanzar tu instancia a través de la red?
  • Autorización: ¿Estás autorizado para conectarte a la instancia?
  • Autenticación: ¿La base de datos acepta las credenciales de tu base de datos?

Además, cada una de ellas puede desglosarse en diferentes rutas de investigación. En la siguiente sección, se incluyen ejemplos de preguntas que puedes formularte para ayudarnos a reducir el problema:

Lista de tareas para los problemas de conexión

Mensajes de error

Para ver mensajes de error de API específicos, consulta la página de referencia Mensajes de error.

Solución de problemas de conectividad adicionales

Para otros problemas, consulta la sección Conectividad de la página de solución de problemas.

Problemas comunes de conexión

Verifica que tu aplicación cierre las conexiones de forma adecuada

Si ves errores que contienen “Aborted connection nnnn to db:”, por lo general, eso indica que la aplicación no detiene las conexiones de forma adecuada. Los problemas de red también pueden causar este error. El error no significa que haya problemas con tu instancia de Cloud SQL. También se recomienda que ejecutes tcpdump para inspeccionar los paquetes a fin de encontrar el origen del problema.

Para obtener ejemplos sobre las prácticas recomendadas de administración de conexiones, consulta Cómo administrar conexiones.

Verifica que tus certificados no hayan vencido

Si tu instancia está configurada para usar SSL, ve a la página de instancias de Cloud SQL en Cloud Console y abre la instancia. Abre la página Conexiones y asegúrate de que tu certificado de servidor sea válido. Si caducó, debes agregar uno nuevo y rotarlo. Más información

Verifica que estés autorizado para conectarte

Si tus conexiones tienen errores, verifica que estés autorizado para conectarte:

  • Si tienes problemas para conectarte mediante una dirección IP, por ejemplo, si te conectas desde tu entorno local con el cliente psql, debes asegurarte de que la dirección IP desde la que deseas conectarte esté autorizada para conectarse a la instancia de Cloud SQL.

    Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan de forma automática para los rangos de direcciones RFC 1918. De esta manera, todos los clientes privados pueden acceder a la base de datos sin pasar por el proxy de autenticación de Cloud SQL. Los rangos de direcciones que no son RFC 1918 deben configurarse como redes autorizadas.

    De forma predeterminada, Cloud SQL no procesa rutas de subred de tu VPC que no son RFC 1918. Debes actualizar el intercambio de tráfico entre redes a Cloud SQL para exportar cualquier ruta que no sea RFC 1918. Por ejemplo:

    gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    
  • Aquí encontrarás tu dirección IP actual.

  • Prueba el comando gcloud sql connect para conectarte a la instancia. Este comando autoriza tu dirección IP por un período breve. Puedes ejecutar este comando en un entorno que tenga el SDK de Cloud y el cliente psql instalado. También puedes ejecutar este comando en Cloud Shell, que está disponible en Google Cloud Console y tiene el SDK de Cloud y el cliente psql preinstalado. Cloud Shell proporciona una instancia de Compute Engine que puedes usar para conectarte a Cloud SQL.
  • Permite que todas las direcciones IP se conecten de manera transitoria a una instancia mediante la autorización de 0.0.0.0/0.

Verifica cómo te conectas

Si ves un mensaje de error como el siguiente:

FATAL: database `user` does not exist.

El comando gcloud sql connect --user solo funciona con el usuario predeterminado (postgres). La solución consiste en conectarse con el usuario predeterminado y, luego, usar el comando psql de "\c" para volver a conectarse como el usuario diferente.

Determina cómo se inician las conexiones

Para ver información sobre tus conexiones actuales, conéctate a tu base de datos y ejecuta el siguiente comando:

SELECT * from pg_stat_activity ;

Las conexiones en las que se muestra una dirección IP, como 1.2.3.4, se conectan mediante una IP. Las conexiones con cloudsqlproxy~1.2.3.4 usan el proxy de autenticación de Cloud SQL, o se originaron en App Engine. Algunos procesos internos de Cloud SQL pueden usar conexiones de localhost.

Comprende los límites de conexión

No hay límites de QPS para las instancias de Cloud SQL. Sin embargo, en su lugar, existen conexiones, tamaños y límites específicos de App Engine. Consulta Cuotas y límites.

Las conexiones de bases de datos consumen recursos en el servidor y en la aplicación de conexión. Usa siempre prácticas adecuadas de administración de conexión para minimizar el espacio de tu aplicación y reducir la posibilidad de superar los límites de conexión de Cloud SQL. Para obtener más información, consulta la página sobre cómo administrar conexiones de bases de datos.

Muestra hilos y conexiones

Para consultar los procesos en ejecución en tu base de datos, usa la tabla pg_stat_activity:

select * from pg_stat_activity;

Tiempo de espera de las conexiones (desde Compute Engine)

Las conexiones con una instancia de Compute Engine agotan el tiempo de espera después de 10 minutos de inactividad, lo que puede afectar las conexiones de larga duración sin usar entre la instancia de Compute Engine y la instancia de Cloud SQL. Para obtener más información, consulta Herramientas de redes y firewalls en la documentación de Compute Engine.

Para mantener las conexiones sin usar de larga duración en funcionamiento, puedes establecer TCP keepalive. Los siguientes comandos establecen el valor de TCP keepalive en un minuto y hacen que la configuración sea permanente en los reinicios de las instancias.

Muestra el valor tcp_keepalive_time actual.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Establece tcp_keepalive_time en 60 segundos y haz que sea permanente en todos los reinicios.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

Aplica el cambio.

sudo /sbin/sysctl --load=/etc/sysctl.conf

Muestra el valor tcp_keepalive_time para verificar que se aplicó el cambio.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Herramientas para depurar la conectividad

Las herramientas más básicas son ping y traceroute.

Ping

Ping realiza una prueba básica para determinar si el destino ("instancia de Cloud SQL") está disponible en el origen. Ping envía un paquete ICMP Echo Request a una instancia de Cloud SQL y espera un ICMP Echo Reply a cambio. Si ping no funciona, significa que no hay una ruta del origen al destino. Sin embargo, tener éxito no significa que tus paquetes puedan pasar, solo que, en general, se puede acceder a la instancia de Cloud SQL.

Si bien ping puede saber si un host está activo y responde, no se garantiza que sea confiable. Algunos proveedores de red bloquean ICMP como una precaución de seguridad, lo que puede dificultar la depuración de la conectividad.

Traceroute

Traceroute prueba la ruta completa que los paquetes de red toman de un host a otro. Muestra todos los pasos ("saltos") que el paquete realiza en el camino y cuánto tiempo lleva cada paso. Si el paquete no realiza el recorrido completo al destino, traceroute no se completa, pero termina con una serie de asteriscos. En este caso, busca la última dirección IP a la que se llegó con éxito durante el proceso. Aquí es donde se interrumpió la conectividad.

Traceroute puede agotar el tiempo de espera. También puede no completarse si una puerta de enlace en el camino no está configurada correctamente para pasar el paquete al siguiente salto.

Cuando traceroute no se completa, puedes saber dónde se detuvo. Busca la última dirección IP que aparece en el resultado traceroute y busca who owns [IP_ADDRESS] en el navegador. Los resultados pueden mostrar o no al propietario de la dirección, pero vale la pena intentarlo.

mtr

La herramienta mtr es una forma de traceroute que permanece activa y se actualiza continuamente, de forma similar a cómo funciona el comando top para los procesos locales.

tcpdump

tcpdump es una herramienta que se usa para capturar paquetes. Te recomendamos que ejecutes tcpdump para capturar e inspeccionar los paquetes entre tu host y las instancias de Cloud SQL cuando depures los problemas de conectividad.

Ubica tu dirección IP local

Si no conoces la dirección local del host, ejecuta el comando ip -br address show. En Linux, este muestra la interfaz de red, el estado de la interfaz, la IP local y las direcciones MAC. Por ejemplo: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64

Como alternativa, puedes ejecutar ipconfig o ifconfig para ver el estado de tus interfaces de red.

Prueba la prueba de conectividad

Las pruebas de conectividad son una herramienta de diagnóstico que te permite verificar la conectividad entre extremos de tu red. Analiza la configuración y, en algunos casos, la verificación del entorno de ejecución. Admite Cloud SQL como una función de vista previa. Sigue estas instrucciones para ejecutar pruebas con las instancias de Cloud SQL.

Prueba la conexión

Puedes usar el cliente psql a fin de probar tu capacidad para conectarte desde tu entorno local. Si quieres obtener más información, consulta Conecta un cliente MySQL mediante una dirección IP y la página para conectar el cliente MySQL con el proxy de autenticación de Cloud SQL.

Define la dirección IP de la aplicación

Para definir la dirección IP de una computadora que ejecuta tu aplicación a fin de que puedas autorizar el acceso a la instancia de Cloud SQL desde esa dirección, debes usar una de las siguientes opciones:

  • Si la computadora no se encuentra detrás de un proxy o firewall, accede a esta y usa este vínculo para determinar su dirección IP.
  • Si la computadora se encuentra detrás de un proxy o firewall, accede a esta y usa una herramienta o servicio como whatismyipaddress.com para definir su dirección IP verdadera.

Abre puertos locales

Para verificar que tu host esté escuchando en los puertos que crees que está, ejecuta el comando ss -tunlp4. Este te indica qué puertos están abiertos y escuchando. Por ejemplo, si tienes una base de datos PostgreSQL en ejecución, el puerto 5432 debe estar activo y escuchando. Para SSH, deberías ver el puerto 22.

Toda la actividad del puerto local

Usa el comando netstat para ver toda la actividad del puerto local. Por ejemplo, netstat -lt muestra todos los puertos activos en el momento.

Conéctate a tu instancia de Cloud SQL con telnet

Para verificar que puedes conectarte a tu instancia de Cloud SQL con TCP, ejecuta el comando telnet. Telnet intenta conectarse a la dirección IP y al puerto que le proporcionas.

Por ejemplo, si tu instancia de Cloud SQL ejecuta una base de datos PostgreSQL, deberías poder ejecutar telnet en ella en el puerto 5432: telnet 35.193.198.159 5432.

Si el proceso se completa correctamente, verás lo siguiente:

Trying 35.193.198.159...

Connected to 35.193.198.159. .

Si se produce un error, verás interrupciones de telnet hasta que fuerces el cierre del intento:

Trying 35.193.198.159...

^C. .

Autenticación de clientes

La autenticación del cliente se controla mediante un archivo de configuración, que se denomina pg_hba.conf (HBA significa autenticación basada en host).

Asegúrate de que la sección de conexiones de replicación del archivo pg_hba.conf en la base de datos de origen se actualice para aceptar conexiones del rango de direcciones IP de la VPC de Cloud SQL.

Cloud Logging

Cloud SQL usa Cloud Logging. Consulta la documentación de Cloud Logging para obtener información completa y revisa las consultas de muestra de Cloud SQL.

Ver registros

Puedes ver los registros de las instancias de Cloud SQL y otros proyectos de Google Cloud, como instancias de Cloud VPN o de Compute Engine. Sigue estos pasos para ver los registros de las entradas de registro de una instancia de Cloud SQL:

Console

  1. Ir al visor de registros
  2. Selecciona un proyecto existente de Cloud SQL en la parte superior de la página.
  3. En el compilador de consultas, agrega lo siguiente:
    • Recurso: Selecciona Base de datos de Cloud SQL. En el cuadro de diálogo, selecciona una instancia de Cloud SQL.
    • Nombres de registros: Desplázate a la sección de Cloud SQL y selecciona los archivos de registro apropiados para la instancia. Ejemplos:
      • cloudsql.googleapis.com/postgres.log
    • Gravedad: Selecciona un nivel de registro.
    • Intervalo de tiempo: Selecciona un ajuste predeterminado o crea un intervalo personalizado.

gcloud

Usa el comando gcloud logging para ver las entradas del registro. En el siguiente ejemplo, reemplaza PROJECT_ID. La marca limit es un parámetro opcional que indica la cantidad máxima de entradas que se mostrarán.

gcloud logging read "projects/[PROJECT_ID]/logs/cloudsql.googleapis.com/postgres.log" --limit=10

Direcciones IP privadas

Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan de forma automática para los rangos de direcciones RFC 1918. Los rangos de direcciones que no son RFC 1918 se deben configurar en Cloud SQL como redes autorizadas. También debes actualizar el intercambio de tráfico entre redes a Cloud SQL para exportar cualquier ruta que no sea RFC 1918. Por ejemplo: gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT

El rango de IP 172.17.0.0/16 está reservado para la red de puente Docker. No se podrá acceder a las instancias de Cloud SQL que se crearon con una dirección IP de ese rango. Fallarán las conexiones desde cualquier dirección IP dentro de ese rango a instancias de Cloud SQL que usen una dirección IP privada.

Solución de problemas de VPN

Consulta la página de solución de problemas de Cloud VPN.