Depura la conectividad
Configuraste la conectividad entre tus bases de datos de origen y de destino, pero ¿cómo sabes que están conectadas? Cuando las comunicaciones entre ellos fallan, ¿cómo puedes averiguar qué salió mal y dónde?
Las herramientas más básicas son ping y traceroute.
Ping
Ping realiza una prueba básica para determinar si el destino
("host remoto") está disponible desde el origen. Ping envía un paquete ICMP Echo Request a un host remoto y espera un ICMP Echo Reply a cambio. Si ping no funciona, significa que no hay una ruta del origen al destino. Sin embargo, el éxito
no significa que tus paquetes puedan pasar, solo que, en general, se puede
alcanzar el host remoto.
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.
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.
Ubica la dirección IP saliente
Si no conoces la dirección IP que usan las bases de datos de origen y de destino para comunicarse entre sí (la dirección IP saliente), completa los siguientes pasos:
- Ve a la página Clústeres en la consola de Google Cloud :
- Ubica el clúster de AlloyDB para PostgreSQL asociado con el trabajo de migración que estás depurando.
- Ambas direcciones IP públicas salientes aparecen en los detalles de la instancia principal del clúster.
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 de PostgreSQL en ejecución, el puerto 5432 debería 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 al host remoto con telnet
Para verificar que puedes conectarte al host remoto con TCP, ejecuta
el comando telnet. Telnet intenta conectarse a la dirección IP y al puerto que le proporcionas.
Por ejemplo, si tu host remoto ejecuta una base de datos de PostgreSQL,
deberías poder conectarte a él mediante telnet en el puerto 5432:
telnet 35.193.198.159 5432.
Si se ejecuta de forma correcta, verás lo siguiente:
Trying 35.193.198.159... Connected to 35.193.198.159.
Si se produce un error, verás que telnet deja de responder hasta que cierres
el intento de forma forzosa:
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 esté actualizada para aceptar conexiones del
rango de direcciones IP de la VPC de AlloyDB para PostgreSQL.
Cloud Logging
Database Migration Service y AlloyDB para PostgreSQL usan Cloud Logging. Consulta la documentación de Cloud Logging para obtener información completa.
Ver registros
Puedes ver los registros de las instancias de AlloyDB para PostgreSQL y otros proyectos de Google Cloud, como las instancias de Cloud VPN o Compute Engine. Para ver los registros de las entradas de registro de tu instancia de AlloyDB para PostgreSQL, sigue estos pasos:
Console
- Ir al Explorador de registros.
- Selecciona tu proyecto de AlloyDB para PostgreSQL en la parte superior de la página.
- En el compilador de consultas, agrega lo siguiente:
- Recurso: Selecciona Instancia de AlloyDB para PostgreSQL. En el cuadro de diálogo, selecciona tu instancia de AlloyDB para PostgreSQL.
- Nombres de registros: Desplázate a la sección de AlloyDB para PostgreSQL y selecciona
los archivos de registro apropiados para la instancia. Por ejemplo:
alloydb.googleapis.com/postgres.log
- Gravedad: Selecciona un nivel de registro.
- Período: Selecciona un ajuste predeterminado o crea un período personalizado.
gcloud
Usa el comando
gcloud logging
para ver las entradas de 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
devolverán.
gcloud logging read "projects/PROJECT_ID/logs/alloydb.googleapis.com%2Fpostgres.log" --limit=10
Direcciones IP privadas
Las conexiones a un clúster de AlloyDB para PostgreSQL con una dirección IP privada se autorizan para los
rangos de direcciones RFC 1918.
Si tu red usa rangos de direcciones que no son RFC 1918, debes actualizar el intercambio de tráfico entre redes para exportar cualquier ruta que no sea RFC 1918. Por ejemplo:
gcloud compute networks peerings update servicenetworking-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. Fallarán las conexiones de cualquier dirección IP dentro de ese rango a clústeres de AlloyDB para PostgreSQL que usen una dirección IP privada.
Solución de problemas de VPN
Consulta la página Google Cloud Solución de problemas de Cloud VPN.
Soluciona problemas de errores del proxy de TCP
La forma en que se configura el proxy TCP también puede generar errores. Para solucionar problemas de un proxy de TCP, consulta los siguientes ejemplos de problemas y cómo se pueden resolver:
No se pudo iniciar la máquina virtual (VM)
Cuando inicias la instancia de VM en Compute Engine, ves el siguiente mensaje:
You do not currently have an active account selected.
Qué puedes probar
Ejecuta uno de los siguientes comandos para configurar una cuenta activa:
Para obtener credenciales nuevas, ejecuta el siguiente comando:
gcloud auth loginPara seleccionar una cuenta que ya se autenticó, ejecuta el siguiente comando:
gcloud config set account <var>ACCOUNT</var>Reemplaza ACCOUNT por el nombre de la cuenta que deseas configurar.
No se pudo establecer conexión con la instancia de la base de datos de origen
Verás el siguiente mensaje de error cuando pruebes el trabajo de migración:
Failure connecting to the source database. Make sure the connectivity information on the connection profile is correct and the source database is reachable.
Qué puedes probar
Sigue estos pasos para comprender dónde podría estar el problema:
- Verifica si la VM que aloja el contenedor del proxy TCP se está ejecutando:
- En la consola de Google Cloud , ve a la página Instancias de VM de Compute Engine.
- Busca la VM que se creó como parte del proceso de configuración del proxy. Si no aparece o no se está ejecutando, configura tu proxy de TCP desde cero y actualiza la configuración del perfil de conexión de origen en el trabajo de migración con la dirección IP correcta.
- Si la VM se está ejecutando, verifica que no haya habido ningún error cuando se descargó la imagen de contenedor del proxy de TCP:
- Selecciona la VM que se creó como parte del proceso de configuración del proxy de TCP. En Registros, haz clic en Puerto en serie 1 (consola).
- Si no puedes ver la entrada
Launching user container 'gcr.io/dms-images/tcp-proxy'en los registros, es posible que el problema sea que tu instancia no pudo extraer la imagen de Container Registry. Para verificar si este es el caso, conéctate a la VM y, luego, intenta extraer la imagen de Container Registry de forma manual con el siguiente comando:docker pull gcr.io/dms-images/tcp-proxy
Si ves el siguiente error:
Error response from daemon: Get "https://gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), significa que tu VM no pudo conectarse a Container Registry. Si tu VM solo tiene una dirección IP privada, debes habilitar el Acceso privado a Google en la subred de la que forma parte la dirección IP. De lo contrario, la VM no tendrá acceso a las APIs de Google Enterprise, como Container Registry.
- Verifica que el contenedor pueda conectarse a la instancia de origen:
- Selecciona la VM que se creó como parte del proceso de configuración del proxy. En Registros, haz clic en Cloud Logging.
- Si ves el siguiente mensaje:
Connection refused, please verify that the machine you are using to run the script can connect to the source database at, significa que el contenedor del proxy de TCP no pudo conectarse a la instancia de la base de datos de origen. Esto puede deberse a varios motivos:- La dirección IP de la instancia de origen es incorrecta.
- Hay una política de firewall que rechaza las conexiones del proxy TCP a la instancia de origen.
- La instancia de origen se encuentra en una red de nube privada virtual (VPC) diferente de la VM que aloja el proxy TCP.
Puedes depurar el problema de conectividad con las pruebas de conectividad de Google Cloud para asegurarte de que haya conectividad entre la VM que aloja el proxy TCP y la base de datos de origen:
- En la consola de Google Cloud , ve a la página Pruebas de conectividad.
- Haz clic en Crear pruebas de conectividad.
- Ingresa un nombre para la prueba.
- Selecciona TCP como protocolo.
- Selecciona Dirección IP en la lista Extremo de origen. Ingresa la dirección IP pública del proxy TCP recién creado si se puede acceder a la base de datos de origen con una dirección IP pública; de lo contrario, ingresa la dirección IP privada del proxy TCP.
- Selecciona Dirección IP en la lista Extremo de destino y, luego, ingresa la dirección IP de la base de datos de origen.
- Ingresa el número de puerto que se usa para conectarse a la base de datos de origen en el campo Puerto de destino.
- Haz clic en Crear.
Ejecutar la prueba de conectividad y solucionar cualquier problema de conectividad que surja Después de solucionar el problema de conectividad, verifica que el proxy de TCP pueda conectarse a la instancia de origen:
- Ve a Instancias de VM en Compute Engine.
- Selecciona la VM que se creó como parte del proceso de configuración del proxy. En Registros, haz clic en Cloud Logging.
- Si ves la entrada de registro
Connection to source DB verified, significa que el proxy de TCP ahora puede conectarse a la instancia de origen.
- Verifica que la prueba de migración no falle con problemas de conexión.
No se pudo establecer conexión con el clúster de la base de datos de destino
Si el contenedor del proxy TCP puede conectarse a la instancia de origen, pero la prueba de migración sigue fallando debido a problemas de conexión, es posible que el problema sea la conectividad entre el clúster de AlloyDB para PostgreSQL de destino y la VM que aloja el contenedor del proxy TCP.
Depura el problema
Para depurar el problema, puedes usar las pruebas de conectividad de Google Cloud para asegurarte de que haya conectividad entre el clúster de AlloyDB para PostgreSQL de destino y la VM que aloja el proxy de TCP:
- En la consola de Google Cloud , ve a la página Pruebas de conectividad.
- Haz clic en Crear pruebas de conectividad.
- Establece los siguientes parámetros para tu prueba:
- Ingresa un nombre para la prueba.
- Selecciona TCP como protocolo.
- Selecciona Dirección IP en la lista Extremo de origen y, luego, ingresa la dirección IP del clúster de AlloyDB para PostgreSQL recién creado.
- Selecciona Dirección IP en la lista Extremo de destino y, luego, ingresa la dirección IP privada del proxy TCP.
- Ingresa
5432en el campo Puerto de destino.
- Haz clic en Crear.
- Ejecutar la prueba de conectividad y solucionar cualquier problema de conectividad que surja
Causas posibles
Hay una regla de firewall que rechaza la comunicación entre el clúster de destino y la VM de proxy TCP.
Qué puedes probar
Agrega una regla de firewall que permita que el clúster de destino se comunique con el proxy de TCP a través del puerto 5432.
Causas posibles
Hay una discrepancia de VPC entre el clúster de destino y la VM que ejecuta el contenedor de proxy de TCP.
Qué puedes probar
Selecciona la misma VPC para el clúster de destino.
Soluciona problemas de túneles SSH inversos
La tunelización SSH es un método para reenviar algunas comunicaciones sobre una conexión SSH. La tunelización SSH inversa permite configurar un túnel SSH y, al mismo tiempo, mantener que la red de destino sea la que inicie la conexión del túnel. Esto es útil cuando no quieres abrir un puerto en tu propia red por motivos de seguridad.
Lo que intentas lograr es configurar lo siguiente:
AlloyDB for PostgreSQL cluster ---> Compute Engine VM bastion ---> tunnel ---> source network bastion ---> source DB
Se supone lo siguiente:
La AlloyDB for PostgreSQL cluster puede acceder a la Compute Engine VM bastion (esto se logra intercambiando el tráfico de la red de AlloyDB para PostgreSQL con la red de la VM de Compute Engine).
El source network bastion puede acceder al source DB.
Luego, configura un túnel SSH desde el source network bastion hasta el Compute Engine VM bastion, que enruta las conexiones entrantes a un puerto en el Compute Engine VM bastion a través del túnel hasta el source DB.
Cada vínculo de la situación anterior se puede configurar de forma incorrecta y evitar que funcione todo el flujo. Soluciona los problemas de cada vínculo, uno por uno:
source network bastion ---> source DB
- Conéctate a la source network bastion con SSH o desde la terminal si es la máquina local.
- Prueba la conectividad a la base de datos de origen con uno de los siguientes métodos:
telnet [source_db_host_or_ip] [source_db_port]: Espera ver las cadenas de conexión de telnet, que terminan conConnected to x.x.x.x.psql -h [source_db_host_or_ip] -p [source_db_port] -U [username] -d [database_name]: Deberías ver un mensaje para ingresar la contraseña o un mensaje de acceso denegado.
Si esto falla, debes verificar que hayas habilitado el acceso desde este bastión a la base de datos de origen.
Compute Engine VM bastion ---> source DB
- Establece una conexión SSH con Compute Engine VM bastion (con
gcloud compute ssh VM_INSTANCE_NAME). - Prueba la conectividad a la base de datos de origen con uno de los siguientes métodos:
telnet 127.0.0.1 [tunnel_port]: Espera ver las cadenas de conexión de telnet, que terminan conConnected to x.x.x.x.psql -h 127.0.0.1 -p [tunnel_port] -U [username] -d [database_name]: Deberías ver un mensaje para ingresar una contraseña o un mensaje de acceso denegado.
Si esto falla, debes verificar que el túnel esté activo y funcionando correctamente.
Si ejecutas sudo netstat -tupln, se mostrarán todos los procesos de escucha en
esta VM, y deberías ver sshd listening on the tunnel_port.
AlloyDB for PostgreSQL cluster ---> source DB
La mejor manera de probar esto es con
testing the migration job
de Database Migration Service.
Si esto falla, significa que hay algún problema con el intercambio de tráfico o el enrutamiento de VPC
entre la red de AlloyDB para PostgreSQL y la red de
Compute Engine VM bastion.
El firewall del servidor de la base de datos de origen debe configurarse para permitir todo el rango de IP interna asignado a la conexión privada a servicios de la red de VPC que usa el clúster de destino de AlloyDB para PostgreSQL.
Para encontrar el rango de IP interna en la consola, sigue estos pasos:
- Ve a la página Redes de VPC en la consola de Google Cloud .
- Selecciona la red de VPC que deseas usar.
- Selecciona Acceso privado a servicios > Rangos de IP asignados para servicios.
- Busca el rango de IP interna asociado con la conexión que creó servicenetworking-googleapis-com.
También puedes ver el tráfico entre el clúster de AlloyDB para PostgreSQL y la instancia de VM de Compute Engine en
la
consola de
Cloud Logging
en el
proyecto Cloud VPN gateway. En los registros de la VM de Compute Engine,
busca el tráfico que proviene del clúster de AlloyDB para PostgreSQL. En los registros del clúster de AlloyDB para PostgreSQL, busca el tráfico de la VM de Compute Engine.