Configurar Cloud SQL y el servidor externo para la replicación

En esta página, se describe cómo configurar tu servidor externo para la replicación a Cloud SQL, crear una instancia de representación de origen en Cloud SQL y replicar los datos en Cloud SQL. Debes seguir todos los pasos de esta página antes de continuar con los pasos de replicación.

Una alternativa a los pasos descritos en esta página es el Database Migration Service, que ofrece replicación continua o migración única de base de datos de un servidor externo a Cloud SQL.

Antes de comenzar

Terminología

  • Servidor externo. Es el servidor PostgreSQL externo a Cloud SQL desde el que deseas replicar los datos. También se conoce como la base de datos de origen o el servidor de la base de datos externa. Puede ser otra instancia de Cloud SQL o cualquier otro servidor de bases de datos, como uno local, Amazon Relational Database Service (RDS), etcétera.

  • Instancia de representación de origen. Una simulación de una instancia de Cloud SQL que representa al servidor externo para la réplica de Cloud SQL. Es visible en la consola de Google Cloud y aparece como una instancia normal de Cloud SQL, pero no contiene datos, no requiere configuración ni mantenimiento, ni afecta la facturación.

  • Réplica de Cloud SQL. La instancia de Cloud SQL que se replica desde el servidor externo. También se conoce como la réplica de lectura principal externa.

  • Cuenta de usuario de replicación. Es la cuenta de usuario de PostgreSQL en el servidor externo con permisos suficientes para permitir la replicación entre el servidor externo y la réplica de Cloud SQL.

  • Importación administrada. Es el proceso de importación de datos directamente desde el servidor externo a la réplica de Cloud SQL. En esta situación, Cloud SQL se conecta al servidor externo mediante la cuenta de usuario de replicación y ejecuta el volcado de datos directamente en el servidor externo para importar datos a la réplica de Cloud SQL.

Configura un proyecto de Google Cloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL Admin API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud SQL Admin API.

    Enable the API

  8. Asegúrate de tener las funciones de administrador de Cloud SQL, administrador de almacenamiento y visualizador de Compute en tu cuenta de usuario.

    Ir a la página IAM

Instala el SDK de Google Cloud

Si quieres configurar la replicación, instala el SDK de Google Cloud para tu servidor externo. Es posible que desees instalar el SDK en tu servidor externo, a menos que ya esté instalado en otro lugar.

Configura el servidor externo para la replicación

Cloud SQL admite migraciones continuas de bases de datos de origen a bases de datos de destino de Cloud SQL.

Entre las bases de datos de origen admitidas para PostgreSQL, se incluyen las siguientes:

  • Autoadministrada (local o en cualquier VM en la nube que controlas por completo) PostgreSQL 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16 y 17
  • Amazon RDS 9.6.10, 10.5, 11.1, 12, 13, 14, 15, 16 y 17
  • Amazon Aurora 10.11+, 11.6+, 12.4+, 13.3+, 14, 15, 16 y 17
  • Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16 y 17

Para configurar tu fuente, debes configurar la instancia de origen y las bases de datos de origen subyacentes.

Lista de tareas del servidor externo

Si la réplica de Cloud SQL está habilitada con una dirección IP privada porque la dirección IP privada saliente no es estática, configura el firewall del servidor externo para permitir el rango de IP interno asignado a la función privada Acceso a los servicios de la red de VPC que la réplica de Cloud SQL usa como red privada.

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 de servicio privada de la red de VPC a la que se dirige el destino de Cloud SQL Instancia como el campo privateNetwork de su configuración de ipConfiguration.

Para encontrar el rango de IP interna, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Redes de VPC.

    Ir a la página Redes de VPC

  2. Selecciona la red de VPC que deseas usar.

  3. Haz clic en la pestaña Conexión privada al servicio.

Configura tu instancia de origen

Para configurar tu instancia de origen, sigue estos pasos:

  1. Si tu instancia de origen no incluye la base de datos postgres, créala.
  2. Instala el paquete pglogical en la instancia de origen
  3. Configura los siguientes parámetros, según sea necesario.

    Si la instancia de PostgreSQL de origen es Amazon RDS, incluye estos parámetros en un grupo de parámetros nuevo y adjunta el grupo de parámetros a la instancia.

    • Si el origen es Cloud SQL, configura las marcas cloudsql.logical_decoding y cloudsql.enable_pglogical en on.

      Para habilitar las marcas en Cloud SQL, consulta Configura marcas de bases de datos.

    • Configura shared_preload_libraries para que incluya pglogical con el siguiente comando:

      ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
            
    • Configura wal_level como logical con el siguiente comando:

          ALTER SYSTEM SET wal_level = 'logical';
          

      Si la instancia de PostgreSQL de origen es Amazon RDS, para habilitar los registros WAL a nivel de logical, configura el parámetro rds.logical_replication como 1.

    • Configura wal_sender_timeout como 0 con el siguiente comando:

      ALTER SYSTEM SET wal_sender_timeout = 0;

      El valor 0 inhabilita el mecanismo de tiempo de espera que se usa para finalizar las conexiones de replicación inactivas.

    • Establece la max_replication_slots en la cantidad máxima de ranuras de replicación que puede admitir la instancia de origen. Usa el siguiente comando después de reemplazar # por el número:

      ALTER SYSTEM SET max_replication_slots = #;

      Cloud SQL requiere una ranura para cada base de datos que se migra. Especifica al menos la cantidad de suscripciones que se espera conectar, con algunas reservas para la sincronización de tablas.

      Por ejemplo, si la instancia de origen tiene 5 bases de datos y se crean 2 trabajos de migración para la fuente, la cantidad de ranuras de replicación debe ser al menos de 5 * 2 = 10, además de la cantidad de ranuras de replicación que ya usas.

    • Configura max_wal_bounces en, al menos, lo mismo que max_replication_slots, además de la cantidad de remitentes que ya se usaron en tu instancia. Usa el siguiente comando y reemplaza # por la cantidad total de procesos de remitente WAL que se ejecutan de manera simultánea:

      ALTER SYSTEM SET max_wal_senders = #;

      Por ejemplo, si el parámetro max_replication_slots se establece en 10 y ya usas 2 remitentes, la cantidad de procesos de remitente WAL que se ejecutan al mismo tiempo sería 10 + 2 = 12.

    • Configura max_worker_processes como mínimo en la cantidad de bases de datos de la instancia de origen, además de la cantidad de procesos de trabajadores que ya se usan en tu instancia. Usa el siguiente comando después de reemplazar # por el número total:

      ALTER SYSTEM SET max_worker_processes = #;
  4. Los parámetros que configuras en este paso se aplican a un servidor de base de datos de PostgreSQL que se ejecuta. También puedes hacer que estos cambios sean persistentes si los incluyes en el archivo postgresql.conf.

  5. Si la réplica de Cloud SQL usará una IP privada, configura el firewall del servidor externo a fin de permitir el rango de IP interna asignada para el acceso privado a servicios de la red de VPC de la réplica.
  6. Para aplicar los cambios de configuración, reinicia la instancia de origen.

Habilita la supervisión del retraso de replicaciones para las versiones de PostgreSQL anteriores a la 9.6

Si migras desde una versión de PostgreSQL anterior a la 9.6, la métrica de retraso de replicación no está disponible de forma predeterminada. Puedes usar una de las tres alternativas para hacer un seguimiento de esta métrica y garantizar un tiempo de inactividad mínimo cuando asciendas la base de datos:

  • Opción 1: Habilita el servidor externo de Cloud SQL para realizar un seguimiento del retraso de replicación mediante el acceso a una consulta específica. Realiza lo siguiente con un usuario con el privilegio SUPERUSER:

    1. Define la siguiente función para permitir que el servidor externo consulte la demora de replicación.

      CREATE OR REPLACE FUNCTION pg_stat_replication_user()
      RETURNS TABLE (
      pid               integer                  ,
      usesysid          oid                      ,
      username          name                    ,
      application_name  text                     ,
      client_addr       inet                     ,
      client_hostname   text                     ,
      client_port       integer                  ,
      backend_start     timestamp with time zone ,
      backend_xmin      xid                      ,
      state             text                     ,
      sent_location     pg_lsn                   ,
      write_location    pg_lsn                   ,
      flush_location    pg_lsn                   ,
      replay_location   pg_lsn                   ,
      sync_priority     integer                  ,
      sync_state        text
      )
      LANGUAGE SQL
      SECURITY DEFINER
      AS $$
       SELECT *
       FROM pg_catalog.pg_stat_replication;
      $$;
      
    2. Otorga el permiso EXECUTE al usuario mediante la ejecución de los siguientes comandos:

      1. REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
      2. GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
  • Opción 2: Otorga el privilegio SUPERUSER directamente al usuario que se usó para conectarse a la instancia de origen. Esto permite que el servidor externo lea la demora de replicación directamente.

  • Opción 3: realiza un seguimiento del retraso de replicación de forma independiente mediante la siguiente consulta:

        SELECT current_timestamp, application_name,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag
        FROM pg_stat_replication
        WHERE application_name like 'cloudsql%';
      

    En esta opción, Cloud SQL no refleja la métrica de retraso de replicación en los grafos o las respuestas de la API.

Configura tus bases de datos de origen

El servidor externo de Cloud SQL migra todas las bases de datos en tu instancia de origen, excepto las siguientes:

  • Para fuentes locales: bases de datos de plantillas template0 y template1
  • Para fuentes de Amazon RDS: template0, template1 y rdsadmin
  • Para fuentes de Cloud SQL: bases de datos de plantillas template0 y template1

Haz lo siguiente en cada base de datos de la instancia de origen que no esté incluida en la lista anterior:

  1. Para instalar la extensión pglogical, ejecuta el siguiente comando en cada base de datos de la instancia de origen:

    CREATE EXTENSION IF NOT EXISTS pglogical

    En el caso de las tablas que no tienen claves primarias, Cloud SQL admite la migración de la instantánea inicial y las declaraciones INSERT durante la fase de captura de datos modificados (CDC). Migra las declaraciones UPDATE y DELETE de forma manual.

  2. Conéctate a la instancia y ejecuta los siguientes comandos a fin de establecer privilegios para el usuario en cada una de las bases de datos migradas, así como la base de datos de postgres predeterminada.

    El usuario que usas para conectarte a la instancia de origen se configura como el usuario en la página Perfiles de conexión. Puedes crear un usuario nuevo o reutilizar uno existente.

    • Ejecuta el siguiente comando en todos los esquemas de cada base de datos que se migrará, excepto el esquema de información y los esquemas que comiencen con pg_:

      GRANT USAGE on SCHEMA schema to username;
      GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username;
      GRANT SELECT on ALL TABLES in SCHEMA schema to username;
    • En cada base de datos que se migrará, ejecuta el siguiente comando:

      GRANT USAGE on SCHEMA pglogical to PUBLIC;
    • Para obtener información de replicación de las bases de datos de origen, ejecuta el siguiente comando en todas las bases de datos:

      GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
    • Si tu fuente es Amazon RDS, ejecuta el siguiente comando:

      GRANT rds_replication to username;

      De lo contrario, ejecuta el siguiente comando:

      ALTER USER username with REPLICATION;

Configura una instancia de representación de origen

La instancia de representación de origen hace referencia al servidor externo. Solo contiene los datos de solicitud del servidor externo. Crea los datos de la solicitud y úsalos en un comando de curl que cree la instancia de representación de origen en Cloud SQL.

Crea los datos de la solicitud

Los datos de la solicitud contienen información básica sobre tu servidor externo en formato JSON. Los datos de la solicitud se pueden configurar para una réplica de Cloud SQL en una red pública o privada y deben contener la siguiente información:

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "hostPort": "SOURCE_HOST",
        "username": "USERNAME",
        "password": "PASSWORD",
        "caCertificate": "SOURCE_CERT",
        "clientCertificate": "CLIENT_CERT",
        "clientKey": "CLIENT_KEY"
      }
    }

Ejemplo de importación administrada

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

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}
Propiedad Descripción
SOURCE_NAME Es el nombre de la instancia de representación de origen que se creará.
REGION Es la región en la que quieres que resida la instancia de representación de origen.
DATABASE_VERSION Es la versión de la base de datos que se ejecuta en el 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.
SOURCE HOST Es la dirección IPv4 y el puerto del servidor externo, o la dirección de DNS para el servidor externo. Si el servidor externo se aloja en Cloud SQL, el puerto es 5432.
USERNAME La cuenta de usuario de replicación en el servidor externo.
PASSWORD Es la contraseña de la cuenta de usuario de replicación.
BUCKET Es el nombre del bucket que contiene el archivo de volcado. Solo debes incluirlo si configuras la replicación con un archivo de volcado que existe en un bucket de Cloud Storage.
DUMP_FILE Es un archivo en el bucket que contiene los datos del servidor externo.
CLIENT_CA_CERT Es el certificado de CA en el servidor externo. Solo debes incluirlo si usas SSL/TLS en el servidor externo.
CLIENT_CERT Es el certificado de cliente en el servidor externo. Solo es obligatorio para la autenticación del servidor y del cliente. Solo debes incluirlo, si usas SSL/TLS en el servidor externo.
CLIENT_KEY El archivo de claves privadas para el certificado de cliente en el servidor externo. Solo es obligatorio para la autenticación del servidor y del cliente. Solo debes incluirlo, si usas SSL/TLS en el servidor externo.

Crea una instancia de representación de origen

Antes de comenzar con este paso, crea un archivo JSON que contenga los datos de tu solicitud de origen.

Luego, para crear la instancia de representación de origen en Cloud SQL, abre una terminal y ejecuta 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 POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
Propiedad Descripción
PROJECT_ID Es el ID de tu proyecto en Google Cloud.
JSON_PATH Es la ruta al archivo JSON que contiene los datos de solicitud del servidor externo.

Actualiza una instancia de representación de origen

Si actualizas los datos de la solicitud del servidor externo, puedes actualizar la instancia de representación de origen existente para que use los valores modificados.

Modifica los datos de la solicitud

Actualiza los datos de la solicitud para incluir los campos que cambiaron. Esto incluye los campos hostPort, username, password, caCertificate, clientCertificate y clientKey. Después de actualizar los datos de la solicitud, úsalos en un comando de curl para actualizar la instancia en Cloud SQL.

En el siguiente ejemplo, se muestra cómo actualizar los campos username y password con un nombre de usuario y una contraseña diferentes:

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "username": "NEW_USERNAME",
        "password": "NEW_PASSWORD"
      }
    }

Ejemplo de importación administrada

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

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}
Propiedad Descripción
SOURCE_NAME Es el nombre de la instancia de representación de origen.
REGION Es la región en la que reside la instancia de representación de origen.
DATABASE_VERSION Es la versión de la base de datos que se ejecuta en el 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.
NEW_USERNAME La cuenta de usuario de replicación nueva en el servidor externo.
NEW_PASSWORD La contraseña de la cuenta nueva.

Modifica una instancia de representación de origen

Antes de comenzar con este paso, crea un archivo JSON que contenga los datos de tu solicitud de réplica.

Luego, para crear la instancia de representación de origen en Cloud SQL, abre una terminal y ejecuta 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
PROJECT_ID Es el ID de tu proyecto en Google Cloud.
JSON_PATH Es la ruta al archivo JSON que contiene los datos de solicitud del servidor externo.
SOURCE_NAME Es el nombre de la instancia de representación de origen.

Configura una réplica de Cloud SQL

Con el tiempo, la réplica de Cloud SQL contiene los datos del servidor externo. En este paso, debes crear los datos de la solicitud y usarlos en un comando curl que cree la réplica de Cloud SQL en Cloud SQL.

Crea los datos de la solicitud

Los datos de la solicitud contienen información básica sobre tu servidor de la base de datos de origen y la réplica de Cloud SQL en formato JSON. Los datos de la solicitud se pueden configurar para una réplica de Cloud SQL en una red pública o privada y deben contener la siguiente información:

replica.json

    {
        "settings": {
            "tier": "TIER",
            "dataDiskSizeGb": "DISK_SIZE",
            "ipConfiguration": {
                "ipv4Enabled": "PUBLIC_IP_STATUS",
                "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME"
             },
             "availabilityType": "AVAILABILITY_TYPE"
        },
        "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
        "region": "SOURCE_REGION",
        "databaseVersion": "DATABASE_VERSION",
        "name": "REPLICA_NAME"
    }

Ejemplo

    {
        "settings": {
            "tier": "db-custom-4-15360",
            "dataDiskSizeGb": "100"
        },
        "masterInstanceName": "source-instance",
        "region": "us-central1",
        "databaseVersion": "POSTGRES_16",
        "name": "replica-instance"
    }
Propiedad Descripción
TIER Es el tipo de máquina para alojar tu instancia de réplica. Si no sabes qué tipo de máquina usar, comienza con db-custom-2-7680. Puedes cambiar su tamaño y otros valores admitidos más adelante si es necesario.
DISK_SIZE Es el tamaño de almacenamiento de la réplica de Cloud SQL, en GB.
PUBLIC_IP_STATUS Determina si se asigna una dirección IP pública a la instancia. De forma predeterminada, el valor de esta propiedad es true. Para desactivar la asignación de una dirección IP pública para la réplica, configura el valor como false. Si tu proyecto tiene habilitada la política de la organización constraints/sql.restrictPublicIp, entonces, para crear la réplica de Cloud SQL, debes establecer el valor de la propiedad ipv4Enabled como false. Si deseas obtener más información para desactivar la asignación de direcciones IP públicas, consulta Inhabilita la IP pública.
PROJECT_ID Si la réplica de Cloud SQL está en una red privada, incluye la propiedad privateNetwork en el archivo replica.json. Para PROJECT_ID, especifica el ID de tu proyecto en Google Cloud.
NETWORK_NAME Es el nombre de la red privada que se usará con la réplica de Cloud SQL.
AVAILABILITY_TYPE Es el tipo de disponibilidad de la réplica de Cloud SQL. De forma predeterminada, el valor es ZONAL. Para hacer que la réplica tenga alta disponibilidad, establece el valor en REGIONAL. Para obtener información sobre los valores permitidos, consulta SqlAvailabilityType.
Después de crear una réplica con alta disponibilidad del servidor externo, no puedes cambiarla a una réplica sin alta disponibilidad. Esto también se aplica a la inversa. No puedes cambiar una réplica sin alta disponibilidad del servidor externo a una réplica con alta disponibilidad.
La conmutación por error manual puede provocar una migración irrecuperable si se intenta realizar cuando la instancia aún está cargando los datos iniciales, o un tiempo de inactividad temporal si la instancia ya se está replicando desde el origen. Comprueba el estado de replicación.
SOURCE_REPRESENTATION_INSTANCE_NAME Es el nombre de la instancia de representación de origen.
SOURCE_REGION Es la región asignada a la instancia de representación de origen.
DATABASE_VERSION Es la versión de la base de datos que se usará con la réplica de Cloud SQL. Las opciones para esta versión son POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 o POSTGRES_17. Haz coincidir la versión de la base de datos que se ejecuta en el servidor externo o establece el valor en no más de una versión más adelante.
REPLICA_NAME Es el nombre de la réplica de Cloud SQL que se creará.

Crea la réplica de Cloud SQL

Antes de comenzar con este paso, crea un archivo JSON que contenga los datos de tu solicitud de réplica. Luego, para crear una réplica de Cloud SQL, abre una terminal de Cloud Shell y ejecuta estos 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 POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

Ejemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./replica.json \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
Propiedad Descripción
PROJECT_ID Es el ID del proyecto en Google Cloud, que debe ser el mismo que el de la instancia de origen.
JSON_PATH Es la ruta al archivo JSON que contiene los datos de la solicitud de réplica de Cloud SQL.

Verifica la configuración

Para asegurarte de que las instancias se configuraron de forma correcta, ve a la página Instancias de Cloud SQL.

Deberías ver tu instancia de representación de origen y la réplica de Cloud SQL en una lista similar a la siguiente:

ID de instancia Tipo IP pública
(-) source-representation-instance Instancia principal externa de la base de datos 10.68.48.3:5432
replica-instance Réplica de lectura de la base de datos 34.66.48.59

También asegúrate de tener el permiso cloudsql.instances.migrate en la réplica de Cloud SQL. Este permiso se incluye en los roles de Cloud IAM cloudsql.admin o cloudsql.editor.

Agrega usuarios a la réplica de Cloud SQL

No puedes importar cuentas de usuario de base de datos desde el servidor externo, pero puedes crearlas en una réplica de Cloud SQL. Haz esto antes de replicar desde el servidor externo.

Obtén la dirección IP saliente de la réplica de Cloud SQL

Puedes usar la dirección IP saliente de la réplica de Cloud SQL para crear una conexión segura entre el servidor externo y la réplica de Cloud SQL. No se te cobrará por esta dirección IP.

Consola

Para obtener la dirección IP saliente de la réplica, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Junto a la dirección IP pública de la réplica de Cloud SQL, mantén el puntero sobre la información sobre la herramienta Más información y recupera la dirección IP saliente.

    Ten en cuenta que la dirección IP saliente no es la dirección IP que se muestra en la lista principal de la réplica en la consola de Google Cloud.

gcloud

Para obtener la dirección IP saliente de la réplica, ejecuta el siguiente comando:

gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
Propiedad Descripción
REPLICA_NAME Es el nombre de la réplica de Cloud SQL cuya dirección IP pública saliente deseas recuperar.

Permite conexiones entrantes en el servidor externo

La réplica de Cloud SQL debe conectarse al servidor externo para que la replicación sea exitosa. Debes configurar el firewall de la red para que tu servidor externo acepte conexiones de la dirección IP saliente de la réplica de Cloud SQL si se cumplen las siguientes condiciones:

  • El servidor externo está detrás de un firewall o alguna otra restricción de red.
  • Tu réplica de Cloud SQL usa una IP pública.

Para conectarte a la réplica de Cloud SQL, usa la dirección IP principal de la réplica. Esta dirección IP se muestra en la consola de Google Cloud.

Actualiza la instancia de representación de origen para permitir la replicación en la réplica de Cloud SQL

Después de configurar la instancia de representación de origen para la réplica de Cloud SQL, es posible que debas actualizar la instancia de representación de origen. Por ejemplo, estas situaciones hacen que debas actualizar tus opciones de configuración:

  • El host, el puerto o la IP del servidor externo cambia.
  • Deseas usar un usuario de replicación de PostgreSQL diferente.
  • Cambia la contraseña del usuario de replicación de PostgreSQL.
  • Los certificados SSL que usaste para conectarte de forma segura al servidor externo cambian.

Propaga la réplica de Cloud SQL

Para la carga inicial de datos del servidor externo a la réplica de Cloud SQL, usa una importación administrada. Usa un servicio que extrae datos del servidor externo y los importa directamente a la instancia de Cloud SQL. Si deseas obtener más información, consulta Usa una importación administrada para configurar la replicación desde bases de datos externas.

Supervisar replicación

Cuando la réplica de Cloud SQL finaliza la carga de datos inicial, se conecta al servidor externo y aplica todas las actualizaciones que se realizaron después de la operación de exportación. Confirma el estado de replicación.

Es importante verificar el estado de replicación antes de ascender la réplica a una instancia independiente. Si el proceso de replicación no se completa correctamente, una réplica ascendida no tiene todos los cambios de tu servidor externo.

Si el retraso de replicación no se muestra igual o cercano a 0, toma medidas para solucionarlo. Te recomendamos verificar estas métricas: /postgresql/external_sync/initial_sync_complete, postgresql/external_sync/max_replica_byte_lag y database/replication/state. Consulta la lista de métricas de Cloud SQL.

Una vez que la réplica de Cloud SQL alcance el servidor externo y no exista demora de replicación en la réplica de Cloud SQL, conéctate a la base de datos. Ejecuta los comandos de base de datos adecuados para asegurarte de que el contenido sea el esperado en comparación con el servidor externo. Conserva tu servidor externo hasta que se realicen las validaciones necesarias.

Configura una réplica en cascada

Después de la migración, puedes crear réplicas de lectura en cascada en tu réplica de Cloud SQL antes de ascender la réplica de Cloud SQL.

Para crear una réplica en cascada, ejecuta los siguientes comandos:

Consola

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Haz clic en la pestaña Réplicas de la réplica que funcionará como superior de la réplica que deseas crear.
  3. Haz clic en Crear réplica.
  4. En la página Crea réplicas de lectura, actualiza el ID de la instancia y cualquier otra opción de configuración, incluidos el nombre, la región y la zona.
  5. Haz clic en Crear.

    Cloud SQL crea una réplica. Volverás a la página de la instancia de la réplica superior.

  6. Sigue los pasos 4 a 6 para cada réplica en cascada nueva que desees crear.

gcloud

  1. Para crear la réplica nueva, especifica tu réplica de Cloud SQL como la instancia principal mediante la marca --master-instance-name:
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    Reemplaza lo siguiente:
    • REPLICA_NAME: el ID único de la réplica que estás creando
    • PARENT_REPLICA_NAME por el nombre de la réplica de Cloud SQL
  3. Después de crear la réplica, puedes ver que los cambios realizados en la instancia principal se replican en todas las réplicas de la cadena de réplicas en cascada.

curl

  1. Para crear una réplica en la réplica superior, edita la siguiente muestra de código JSON y guárdala en un archivo llamado request.json:

    {
      "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. Ejecuta el siguiente comando:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

Asciende la réplica

Para ascender la réplica, sigue estos pasos:

  1. Asciende la réplica a una instancia principal.
  2. Agrega réplicas de lectura a tu instancia.
  3. Opcional: Configura tu instancia para que tenga alta disponibilidad (HA). Para evitar el tiempo de inactividad adicional, puedes habilitar la alta disponibilidad mientras configuras una réplica si estableces AVAILABILITY_TYPE como REGIONAL.

Limitaciones

  • Si instalas extensiones en tus bases de datos de origen externas que Cloud SQL no admite, cuando migres las bases de datos a una instancia de destino, Cloud SQL no migrará estas extensiones. Para garantizar una migración sin problemas, verifica que ningún objeto o aplicación haga referencia a las extensiones. Antes de continuar con la migración, te recomendamos que quites las extensiones junto con las referencias de las bases de datos de origen.

    Para obtener más información sobre las extensiones que admite Cloud SQL, consulta Configura extensiones de PostgreSQL.

  • Si instalas la extensión pg_cron en tus bases de datos de origen externas, cuando migres las bases de datos a una instancia de destino, Cloud SQL no migrará la extensión ni la configuración de cron asociada con ella. Después de migrar las bases de datos y ascender la réplica, Google recomienda que vuelvas a habilitar la extensión pg_cron en cada base de datos migrada.

¿Qué sigue?