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

En esta página se describe cómo configurar y usar una importación gestionada de datos al replicar desde un servidor externo a Cloud SQL.

Debes completar todos los pasos de esta página. Cuando termine, podrá administrar y monitorizar la instancia de representación de origen del mismo modo que lo haría con cualquier otra instancia de Cloud SQL.

Antes de empezar

Antes de empezar, sigue estos pasos:

  1. Configura el servidor externo.

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

  3. Configura la réplica de Cloud SQL.

Verificar la configuración de la replicación

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

Los siguientes ajustes de sincronización externa deben ser correctos.

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

Para verificar estos ajustes, abre un terminal de Cloud Shell e introduce 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",
         "selectedObjects": "SELECTED_OBJECTS"
       }' \
     -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",
         "selectedObjects":[{"database":"db1"}, {"database":"db2"}]
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings

Estas llamadas devuelven una lista de tipo sql#externalSyncSettingErrorList.

Si la lista está vacía, significa que no hay errores. Una respuesta sin errores tiene este aspecto:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Propiedad Descripción
SYNC_MODE Asegúrate de que la réplica de Cloud SQL y el servidor externo estén sincronizados después de configurar la replicación. Los modos de sincronización son EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE y OFFLINE.
SYNC_PARALLEL_LEVEL

Verifica el ajuste que controla la velocidad a la que se transfieren los datos de las tablas de una base de datos. Están disponibles los siguientes valores:

  • min: Consume la menor cantidad de recursos informáticos de la base de datos. Esta es la velocidad más lenta para transferir datos.
  • optimal: Ofrece un rendimiento equilibrado con una carga óptima en la base de datos.
  • max: Proporciona la mayor velocidad para transferir datos, pero puede aumentar la carga de la base de datos.

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

SELECTED_OBJECTS Lista de objetos separados por comas que especifica las bases de datos que vas a migrar de la instancia de representación de origen a la instancia de Cloud SQL de destino. Si no usa este parámetro o proporciona una lista vacía como valor del parámetro, todas las bases de datos se migrarán del origen al destino.
PROJECT_ID El ID de tu Google Cloud proyecto.
REPLICA_INSTANCE_ID ID de tu réplica de Cloud SQL.

Actualizar una instancia de representación de origen

Para actualizar las bases de datos que quieras migrar de la instancia de representación de origen a la instancia de Cloud SQL de destino, actualiza la lista de nombres de bases de datos asociados al parámetro selectedObjects. Si no usa este parámetro o proporciona una lista vacía como valor del parámetro, todas las bases de datos se migrarán del origen al destino.

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "selectedObjects": "SELECTED_OBJECTS",
        "username": "USERNAME",
        "password": "PASSWORD"
      }
    }

Ejemplo

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "selectedObjects":[{"database":"db1"}, {"database":"db3"}],
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}
Propiedad Descripción
SOURCE_NAME Nombre de la instancia de representación de origen.
REGION La región en la que se encuentra la instancia de representación de origen.
DATABASE_VERSION La versión de la base de datos que se ejecuta en tu servidor externo. Las opciones son POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 o POSTGRES_17.
SELECTED_OBJECTS Lista actualizada de objetos separados por comas que especifica las bases de datos que vas a migrar de la instancia de representación de origen a la instancia de Cloud SQL de destino.
USERNAME La cuenta de usuario de replicación del servidor externo.
PASSWORD La contraseña de la cuenta.

A continuación, para modificar la instancia de representación de origen en Cloud SQL, abre una terminal de Cloud Shell e introduce 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 @JSON_PATH \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_NAME

Ejemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Propiedad Descripción
JSON_PATH Ruta al archivo JSON que contiene los datos de la solicitud del servidor externo.
PROJECT_ID El ID de tu Google Cloud proyecto.
SOURCE_NAME Nombre de la instancia de representación de origen.

Iniciar la replicación en el servidor externo

Una vez que hayas verificado que puedes replicar desde el servidor externo, inicia la replicación. La velocidad de replicación del proceso de importación inicial es de hasta 500 GB por hora. Sin embargo, esta velocidad puede variar en función del nivel de la máquina, el tamaño del disco de datos, el rendimiento de la red y la naturaleza de la 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 puedes mantener sincronizadas la réplica de Cloud SQL y el servidor externo después de configurar la replicación.
SKIP_VERIFICATION Indica si se debe omitir el paso de verificación integrado antes de sincronizar los datos. Este parámetro solo se recomienda si ya ha verificado su configuración de replicación.
SYNC_PARALLEL_LEVEL

Proporciona un ajuste que controla la velocidad a la que se transfieren los datos de las tablas de una base de datos. Están disponibles los siguientes valores:

  • min: Consume la menor cantidad de recursos informáticos de la base de datos. Esta es la velocidad más lenta para transferir datos.
  • optimal: Ofrece un rendimiento equilibrado con una carga óptima en la base de datos.
  • max: Proporciona la mayor velocidad para transferir datos, pero puede aumentar la carga de la base de datos.

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

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

Controlar la migración

Una vez que hayas iniciado la replicación desde el servidor externo, tendrás que monitorizarla. Para obtener más información, consulta Monitorizar la replicación. A continuación, puedes completar la migración.

Solucionar problemas

Prueba las siguientes opciones para solucionar el problema:

Problema Solución de problemas
La réplica de lectura no ha empezado a replicarse al crearse. Probablemente 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 hayas proporcionado explícitamente o una que se haya definido con un valor predeterminado.

En primer lugar, comprueba que el valor de la marca max_connections sea mayor o igual que el del elemento principal.

Si la marca max_connections está configurada correctamente, inspecciona los registros en Cloud Logging para encontrar el error real.

No se ha podido crear la réplica de lectura debido a un error desconocido. Probablemente 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 Service Networking API. Esta acción crea la cuenta de servicio necesaria para continuar con el proceso.

El disco está lleno. El disco de la instancia principal puede llenarse durante la creación de la réplica. Edita la instancia principal para actualizarla a un tamaño de disco mayor.
El espacio en disco aumenta considerablemente. Si una ranura no se usa de forma activa para monitorizar datos, PostgreSQL conservará los segmentos WAL indefinidamente, lo que provocará que el espacio en disco aumente indefinidamente. Si usas las funciones de replicación lógica y decodificación en Cloud SQL, las ranuras de replicación se crean y se eliminan automáticamente. Puedes detectar las ranuras de replicación no utilizadas consultando la vista del sistema pg_replication_slots y filtrando por la columna active. Los espacios sin usar se pueden eliminar para quitar segmentos WAL con el comando pg_drop_replication_slot.
La instancia de réplica está usando demasiada memoria. La réplica usa memoria temporal para almacenar en caché las operaciones de lectura solicitadas con frecuencia, lo que puede hacer que use más memoria que la instancia principal.

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

Replicación detenida. Se ha alcanzado el límite máximo de almacenamiento y el aumento automático del almacenamiento no está habilitado.

Edita la instancia para habilitar automatic storage increase.

La latencia de replicación es constantemente alta. La carga de escritura es demasiado alta para que la réplica pueda gestionarla. El retraso de la réplica se produce cuando el subproceso SQL de una réplica no puede seguir el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden provocar una latencia de replicación alta temporal o permanente en un esquema determinado. Estas son algunas de las causas habituales del retraso de la réplica:
  • Consultas lentas en la réplica. Identifícalos y corrígelos.
  • Todas las tablas deben tener una clave principal o única. Cada actualización de una tabla de este tipo sin una clave única o principal provoca análisis completos de la tabla en la réplica.
  • Las consultas como DELETE ... WHERE field < 50000000 provocan un retraso en la replicación basada en filas, ya que se acumula un gran número de actualizaciones en la réplica.

Estas son algunas posibles soluciones:

  • Edita la instancia para aumentar el tamaño de la réplica.
  • Reducir la carga de la base de datos.
  • Envía el tráfico de lectura a la réplica de lectura.
  • Indexa las tablas.
  • Identifica y corrige las consultas de escritura lentas.
  • Vuelve a crear la réplica.
Errores al reconstruir índices en PostgreSQL 9.6. PostgreSQL te informa de que debes volver a generar un índice concreto. Esto solo se puede hacer en la instancia principal. Si creas una nueva instancia de réplica, pronto volverá a aparecer el mismo error. Los índices hash no se propagan a las réplicas en las versiones de PostgreSQL anteriores a la 10.

Si debes usar índices hash, actualiza a PostgreSQL 10 o una versión posterior. De lo contrario, si también quieres usar réplicas, no uses índices hash en PostgreSQL 9.6.

La consulta en la instancia principal siempre está en ejecución. 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 continuamente en tu instancia principal.
La creación de réplicas falla por tiempo de espera agotado. Las transacciones sin confirmar de larga duración en la instancia principal pueden provocar que falle la creación de réplicas 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 tamaños de vCPU diferentes, puede haber problemas de rendimiento de las consultas porque el optimizador de consultas tiene en cuenta los tamaños de las vCPU.

Para solucionar este problema, siga estos pasos:

  1. Activa la marca log_duration y asigna el valor ddl al parámetro log_statement. De esta forma, obtendrás tanto las consultas como el tiempo de ejecución en la base de datos. Sin embargo, en función de tu carga de trabajo, esto podría provocar problemas de rendimiento.
  2. Ejecuta explain analyze en la instancia principal y en la réplica de lectura para las consultas.
  3. Compara el plan de consulta y comprueba si hay diferencias.

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

Revisar los registros de replicación

Cuando verifiques la configuración de la réplica, se generarán registros.

Para ver estos registros, sigue estos pasos:

  1. Ve al visualizador de registros de la Google Cloud consola.

    Ir al visualizador de registros

  2. Selecciona la réplica de Cloud SQL en el 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, comprueba lo siguiente:

  • Cualquier cortafuegos del servidor externo está configurado para permitir conexiones desde la dirección IP de salida de la réplica de Cloud SQL.
  • La configuración de SSL/TLS es correcta.
  • El usuario, el host y la contraseña de la réplica son correctos.

Siguientes pasos