Problemas de conexión de depuración

Introducción

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

  • Conectando: ¿puede acceder a su instancia a través de la red?
  • Autorización: ¿está autorizado para conectarse a la instancia?
  • Autenticación: ¿La base de datos acepta sus credenciales de base de datos?

Cada uno de ellos puede desglosarse en diferentes vías de investigación. La siguiente sección incluye ejemplos de preguntas que puede plantearse para acotar aún más el problema:

Lista de verificación de problemas de conexión

Mensajes de error

Para conocer mensajes de error de API específicos, consulte la página de referencia de mensajes de error .

Solución de problemas de conectividad adicionales

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

Problemas de conexión comunes

Verifique que su aplicación esté cerrando las conexiones correctamente

Si ve errores que contienen " Aborted connection nnnn to db: ", generalmente indica que su aplicación no está deteniendo las conexiones correctamente. Los problemas de red también pueden causar este error. El error no significa que haya problemas con su instancia de Cloud SQL. También le recomendamos ejecutar tcpdump para inspeccionar los paquetes y localizar el origen del problema.

Para obtener ejemplos de prácticas recomendadas para la administración de conexiones, consulte Administrar conexiones de base de datos .

Verifique que sus certificados no hayan expirado

Si su instancia está configurada para usar SSL, vaya a la página Instancias de Cloud SQL en el Google Cloud Abra la consola y la instancia. Abra la página Conexiones , seleccione la pestaña Seguridad y asegúrese de que el certificado de su servidor sea válido. Si ha caducado, debe agregar un nuevo certificado y rotarlo.

Verifique que esté autorizado para conectarse

Si sus conexiones fallan, verifique que esté autorizado para conectarse:

  • Si tiene problemas para conectarse usando una dirección IP, por ejemplo, si se conecta desde su entorno local con el cliente psql, asegúrese de que la dirección IP desde la que se conecta 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 automáticamente para los rangos de direcciones RFC 1918. De esta forma, 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 cumplen con el RFC 1918 deben configurarse como redes autorizadas .

    De forma predeterminada, Cloud SQL no aprende rutas de subred no RFC 1918 de su VPC. Debe actualizar el emparejamiento de red con Cloud SQL para exportar cualquier ruta no RFC 1918. Por ejemplo:

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

  • Pruebe el comando gcloud sql connect para conectarse a su instancia. Este comando autoriza su dirección IP por un breve periodo. Puede ejecutarlo en un entorno con la CLI de gcloud y el cliente psql instalados. También puede ejecutarlo en Cloud Shell , disponible en [enlace faltante].Google Cloud Consola y tiene la CLI de gcloud y el cliente psql preinstalados. Cloud Shell proporciona una instancia de Compute Engine que puede usar para conectarse a Cloud SQL.
  • Permitir temporalmente que todas las direcciones IP se conecten a una instancia autorizando 0.0.0.0/0 .

Verifica cómo te conectas

Si recibe un mensaje de error como:

FATAL: database `user` does not exist.

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

Determinar cómo se inician las conexiones

Puede ver información sobre sus conexiones actuales conectándose a su base de datos y ejecutando el siguiente comando:

SELECT * from pg_stat_activity ;

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

Límites de conexión

No hay límites de QPS para las instancias de Cloud SQL. Sin embargo, existen límites específicos de conexión, tamaño y App Engine. Consulta "Cuotas y límites" .

Las conexiones a bases de datos consumen recursos del servidor y de la aplicación que se conecta. Utilice siempre buenas prácticas de gestión de conexiones para minimizar el impacto de su aplicación y reducir la probabilidad de superar los límites de conexión de Cloud SQL. Para obtener más información, consulte Administrar conexiones a bases de datos .

Mostrar conexiones e hilos

Para ver los procesos que se están ejecutando en su base de datos, utilice la tabla pg_stat_activity :

select * from pg_stat_activity;

Tiempo de espera de las conexiones (de Compute Engine)

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

Para mantener activas las conexiones no utilizadas de larga duración, puede configurar el valor de keepalive de TCP . Los siguientes comandos establecen el valor de keepalive de TCP en un minuto y hacen que la configuración sea permanente tras los reinicios de la instancia.

Muestra el valor actual de tcp_keepalive_time.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Establezca tcp_keepalive_time en 60 segundos y hágalo permanente en todos los reinicios.

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

Aplicar 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

volcado de tcp

tcpdump es una herramienta para capturar paquetes. Se recomienda encarecidamente ejecutar tcpdump para capturar e inspeccionar los paquetes entre el host y las instancias de Cloud SQL al depurar problemas de conectividad.

Localice su dirección IP local

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

Alternativamente, puede ejecutar ipconfig o ifconfig para ver el estado de sus interfaces de red.

Prueba con prueba de conectividad

La Prueba de Conectividad es una herramienta de diagnóstico que permite comprobar la conectividad entre los puntos finales de la red. Analiza la configuración y, en algunos casos, realiza una verificación en tiempo de ejecución. Ahora es compatible con Cloud SQL . Siga estas instrucciones para ejecutar pruebas con sus instancias de Cloud SQL.

Pruebe su conexión

Puede usar el cliente psql para probar su capacidad de conexión desde su entorno local. Para obtener más información, consulte Conectar el cliente psql mediante direcciones IP y Conectar el cliente psql mediante el proxy de autenticación de Cloud SQL .

Determine la dirección IP de su aplicación

Para determinar la dirección IP de una computadora que ejecuta su aplicación para poder autorizar el acceso a su instancia de Cloud SQL desde esa dirección, utilice una de las siguientes opciones:

  • Si la computadora no está detrás de un proxy o firewall, inicie sesión en la computadora y utilice el sitio ¿Cuál es mi IP? para determinar su dirección IP.
  • Si la computadora está detrás de un proxy o firewall, inicie sesión en la computadora y use una herramienta o servicio como whatismyipaddress.com para determinar su verdadera dirección IP.

Abrir puertos locales

Para verificar que su host esté escuchando en los puertos que cree, ejecute el comando ss -tunlp4 . Esto le indicará qué puertos están abiertos y escuchando. Por ejemplo, si tiene una base de datos PostgreSQL en ejecución, el puerto 5432 debería estar activo y escuchando. Para SSH, debería ver el puerto 22.

Toda la actividad portuaria local

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

Conéctese a su instancia de Cloud SQL mediante telnet

Para verificar que puede conectarse a su instancia de Cloud SQL mediante TCP , ejecute el comando telnet . Telnet intenta conectarse a la dirección IP y el puerto que le proporcione.

Si su instancia de Cloud SQL ejecuta una base de datos PostgreSQL, por ejemplo, entonces debería poder conectarse a ella mediante telnet en el puerto 5432: telnet 35.193.198.159 5432 .

Si tiene éxito, verá lo siguiente: Intentando 35.193.198.159...

Conectado a 35.193.198.159. .

En caso de falla, verá que telnet se bloquea hasta que fuerce el cierre del intento: Intentando 35.193.198.159...

^C. .

Autenticación del cliente

La autenticación del cliente está controlada por un archivo de configuración, llamado pg_hba.conf (HBA significa autenticación basada en host).

Asegúrese de que la sección de conexiones de replicación del archivo pg_hba.conf en la base de datos de origen esté actualizada para aceptar conexiones desde el rango de direcciones IP de Cloud SQL VPC.

Registro en la nube

Cloud SQL y Cloud SQL utilizan Cloud Logging. Consulte la documentación de Cloud Logging para obtener información completa y revisar las consultas de ejemplo de Cloud SQL .

Ver registros

Puede ver los registros de las instancias de Cloud SQL y otros Google CloudProyectos como Cloud VPN o instancias de Compute Engine. Para ver los registros de las entradas de registro de su instancia de Cloud SQL:

Consola

  1. En el Google Cloud consola, vaya a la página de Registro en la nube .

    Ir al registro en la nube

  2. Seleccione un proyecto de Cloud SQL existente en la parte superior de la página.
  3. En el generador de consultas, agregue lo siguiente:
    • Recurso: Seleccione la base de datos de Cloud SQL . En el cuadro de diálogo, seleccione una instancia de Cloud SQL.
    • Nombres de registro: Desplácese hasta la sección Cloud SQL y seleccione los archivos de registro adecuados para su instancia. Por ejemplo:
      • cloudsql.googleapis.com/postgres.log
    • Gravedad: seleccione un nivel de registro.
    • Rango de tiempo: seleccione un ajuste preestablecido o cree un rango personalizado.

nube g

Use el comando gcloud logging para ver las entradas del registro. En el siguiente ejemplo, reemplace PROJECT_ID . El indicador limit es un parámetro opcional que indica el número máximo de entradas que se devolverá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 que usan una dirección IP privada se autorizan automáticamente para los rangos de direcciones RFC 1918. Los rangos de direcciones no RFC 1918 deben configurarse en Cloud SQL como redes autorizadas . También debe actualizar el emparejamiento de red con Cloud SQL para exportar cualquier ruta no RFC 1918. Por ejemplo:

gcloud compute networks peerings update cloudsql-postgres-googleapis-com 
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID

Solución de problemas de VPN

Consulte la página de solución de problemas de VPN en la nube .