Usar una importación administrada para configurar la replicación desde bases de datos externas

En esta página, se describe cómo configurar y usar una importación administrada para los datos cuando se replica desde un servidor externo a Cloud SQL.

Debes completar todos los pasos de esta página. Cuando termines, puedes administrar y supervisar la instancia de representación de origen de la misma manera que lo harías con cualquier otra instancia de Cloud SQL.

Antes de comenzar

Antes de comenzar, completa estos pasos:

  1. Configura el servidor externo.

  2. Crea la instancia de representación de origen.

  3. Configura la réplica de Cloud SQL.

Verifica la configuración de la replicación

Una vez que se complete la configuración, asegúrate de que la réplica de Cloud SQL pueda replicar desde el servidor externo.

La siguiente configuración de sincronización externa debe ser correcta.

  • Conectividad entre la réplica de Cloud SQL y el servidor externo
  • Privilegios del usuario de replicación
  • Compatibilidad de versiones
  • La réplica de Cloud SQL aún no se replica

Para verificar esta configuración, abre una terminal de Cloud Shell y, luego, ingresa los siguientes comandos:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings

Ejemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings

Estas llamadas muestran una lista de tipo sql#externalSyncSettingErrorList.

Si la lista está vacía, no hay errores. Aparecerá una respuesta sin errores como la siguiente:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Propiedad Descripción
SYNC_MODE Garantiza que puedas mantener la réplica de Cloud SQL y el servidor externo sincronizados después de que se configure la replicación. Los modos de sincronización incluyen EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE y OFFLINE.
SYNC_PARALLEL_LEVEL

Verifica la configuración que controla la velocidad a la que se transfieren los datos de las tablas de una base de datos. Los siguientes valores están disponibles:

  • min: Toma la menor cantidad de recursos de procesamiento en la base de datos. Esta es la velocidad más lenta para transferir datos.
  • optimal: Proporciona un rendimiento equilibrado con una carga óptima en la base de datos.
  • max: Proporciona la mayor velocidad para transferir datos, pero esto podría aumentar la carga en la base de datos.

Nota: El valor predeterminado de este parámetro es optimal, ya que esta configuración proporciona una buena velocidad para transferir los datos y tiene un impacto razonable en la base de datos. Te recomendamos usar este valor.

PROJECT_ID El ID del proyecto de Google Cloud
REPLICA_INSTANCE_ID Es el ID de tu réplica de Cloud SQL.

Inicia la replicación en el servidor externo

Después de verificar que puedes replicar desde el servidor externo, inicia la replicación. La velocidad para realizar la replicación del proceso de importación inicial es de hasta 500 GB por hora. Sin embargo, esta velocidad puede variar según el nivel de máquina, el tamaño del disco de datos, la capacidad de procesamiento de la red y la naturaleza de tu base de datos.

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync

Ejemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Propiedad Descripción
SYNC_MODE Verifica que puedas mantener la réplica de Cloud SQL y el servidor externo sincronizados después de que se configure la replicación.
SKIP_VERIFICATION Indica si se debe omitir el paso de verificación integrado antes de sincronizar tus datos. Este parámetro solo se recomienda si ya verificaste tu configuración de replicación.
SYNC_PARALLEL_LEVEL

Proporciona una configuración que controle la velocidad a la que se transfieren los datos de las tablas de una base de datos. Los siguientes valores están disponibles:

  • min: Toma la menor cantidad de recursos de procesamiento en la base de datos. Esta es la velocidad más lenta para transferir datos.
  • optimal: Proporciona un rendimiento equilibrado con una carga óptima en la base de datos.
  • max: Proporciona la mayor velocidad para transferir datos, pero esto podría aumentar la carga en la base de datos.

Nota: El valor predeterminado de este parámetro es optimal, ya que esta configuración proporciona una buena velocidad para transferir los datos y tiene un impacto razonable en la base de datos. Te recomendamos usar este valor.

PROJECT_ID El ID del proyecto de Google Cloud
REPLICA_INSTANCE_ID Es el ID de tu réplica de Cloud SQL.

Supervisa la migración

Una vez que inicies la replicación desde el servidor externo, deberás supervisar la replicación. Para obtener más información, consulta Supervisa la réplica. Luego, puedes completar tu migración.

Solucionar problemas

Considera las siguientes opciones de solución de problemas:

Problema Soluciona problemas
La réplica de lectura no comenzó a replicarse cuando se creó. Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real.
No se puede crear una réplica de lectura: error invalidFlagValue. Una de las marcas de la solicitud no es válida. Puede ser una marca que proporcionaste explícitamente o una que se configuró como un valor predeterminado.

Primero, comprueba que el valor de la marca max_connections sea mayor o igual que el valor en el principal.

Si la marca max_connections se configuró de forma correcta, inspecciona los registros en Cloud Logging para encontrar el error real.

No se puede crear una réplica de lectura: error desconocido. Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real.

Si el error es set Service Networking service account as servicenetworking.serviceAgent role on consumer project, inhabilita y vuelve a habilitar la Service Networking API. Esta acción crea la cuenta de servicio que se necesita para continuar con el proceso.

El disco está lleno. El tamaño del disco de la instancia principal puede llenarse durante la creación de una réplica. Edita la instancia principal para actualizarla a un tamaño de disco más grande.
El espacio en el disco aumenta significativamente. Una ranura que no se usa de forma activa para realizar un seguimiento de los datos hace que PostgreSQL se conserve en los segmentos WAL de forma indefinida, lo que hace que el espacio en disco crezca de forma indefinida. Si usas las funciones de replicación y decodificación lógicas en Cloud SQL, las ranuras de replicación se crean y descartan de forma automática. Las ranuras de replicación sin usar se pueden detectar si consultas la vista del sistema pg_replication_slots y filtras en la columna active. Las ranuras sin usar se pueden descartar para quitar los segmentos de WAL mediante el comando pg_drop_replication_slot.
La instancia de réplica usa demasiada memoria. La réplica usa memoria temporal para almacenar en caché las operaciones de lectura solicitadas con frecuencia, lo que puede ocasionar que use más memoria que la instancia principal.

Reinicia la instancia de réplica para recuperar el espacio de memoria temporal.

Se detuvo la replicación. Se alcanzó el límite de almacenamiento máximo y el aumento de almacenamiento automático no está habilitado.

Edita la instancia para habilitar automatic storage increase.

El retraso de replicación se mantiene alto. La carga de escritura es demasiado alta para que la réplica la maneje. El retraso de la replicación se produce cuando el subproceso de SQL en una réplica no puede mantener el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden causar un gran retraso de la replicación de forma temporal o permanente en un esquema determinado. Algunas de las causas típicas del retraso de la replicación son las siguientes:
  • Consultas lentas en la réplica. Encuéntralas y corrígelas.
  • Todas las tablas deben tener una clave primaria o única. Cada actualización en una tabla sin una clave única o primaria genera análisis completos de la tabla en la réplica.
  • Las consultas como DELETE ... WHERE field < 50000000 provocan un retraso de la replicación basado en filas, ya que se acumula una gran cantidad de actualizaciones en la réplica.

Estas son algunas de las soluciones posibles:

  • Edita la instancia para aumentar el tamaño de la réplica.
  • Reduce la carga en la base de datos.
  • Envía tráfico de lectura a la réplica de lectura.
  • Indexa las tablas.
  • Identifica y corrige consultas de escritura lentas.
  • Vuelve a crear la réplica.
Errores cuando se vuelven a compilar índices en PostgreSQL 9.6 Recibirás un error de PostgreSQL que te informará que debes volver a compilar un índice en particular. Esto se puede hacer solo en la instancia principal. Si creas una instancia de réplica nueva, pronto recibirás el mismo error. Los índices hash no se propagan a las réplicas en las versiones de PostgreSQL inferiores a 10.

Si debes usar índices de hash, actualiza a PostgreSQL 10 o versiones posteriores. De lo contrario, si también quieres usar réplicas, no uses índices de hash en PostgreSQL 9.6.

La consulta en la instancia principal siempre se ejecuta. Después de crear una réplica, se espera que la consulta SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' se ejecute de forma continua en tu instancia principal.
La creación de la réplica falla con el tiempo de espera. Las transacciones no confirmadas de larga duración en la instancia principal pueden generar una falla en la creación de la réplica de lectura.

Vuelve a crear la réplica después de detener todas las consultas en ejecución.

Si la instancia principal y la réplica tienen diferentes tamaños de CPU virtuales, puede haber problemas de rendimiento de las consultas porque el optimizador de consultas tiene en cuenta los tamaños de las CPU virtuales.

Para resolver este problema, realiza los siguientes pasos:

  1. Activa la marca log_duration y establece el parámetro log_statement en ddl. Esto te proporciona las consultas y el tiempo de ejecución en la base de datos. Sin embargo, según tu carga de trabajo, esto podría causar problemas de rendimiento.
  2. En la instancia principal y en la réplica de lectura, ejecuta explain analyze para las consultas.
  3. Compara el plan de consultas y verifica si hay diferencias.

Si se trata de una consulta específica, modifícala. Por ejemplo, puedes cambiar el orden de las uniones para ver si obtienes un mejor rendimiento.

Revisa los registros de replicación

Cuando verificas la configuración de la replicación, se generan registros.

Puedes ver estos registros mediante los siguientes pasos:

  1. Ve al Visor de registros en la consola de Google Cloud.

    Ir al visor de registros

  2. Selecciona la réplica de Cloud SQL del menú desplegable Instancia.
  3. Selecciona el archivo de registro replication-setup.log.

Si la réplica de Cloud SQL no puede conectarse al servidor externo, confirma lo siguiente:

  • Cualquier firewall en el servidor externo se configura para permitir conexiones desde la dirección IP saliente de la réplica de Cloud SQL.
  • Tu configuración de SSL/TLS es correcta.
  • Tu usuario de repetición, host y contraseña son correctos.

¿Qué sigue?