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

En esta página se describe cómo configurar el servidor externo para la replicación en 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 Database Migration Service, que ofrece replicación continua o migración de bases de datos única desde un servidor externo a Cloud SQL.

Antes de empezar

Terminología

  • Servidor externo. El servidor de PostgreSQL externo a Cloud SQL del que quieres replicar datos. También se conoce como base de datos de origen o servidor de base de datos externo. Puede ser otra instancia de Cloud SQL o cualquier otro servidor de bases de datos, como un servidor local, Amazon Relational Database Service (RDS), etc.

  • Instancia de representación de origen. Una simulación de una instancia de Cloud SQL que representa el servidor externo de la réplica de Cloud SQL. Se puede ver en la consola y parece una instancia de Cloud SQL normal, pero no contiene datos, no requiere configuración ni mantenimiento, y no afecta a la facturación. Google Cloud

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

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

  • Importación gestionada. 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.

Configurar un Google Cloud proyecto

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL Admin API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Cloud SQL Admin API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Asegúrate de tener los roles Administrador de Cloud SQL, Administrador de Storage y Lector de Compute en tu cuenta de usuario.

    Ir a la página de gestión de identidades y accesos

  9. Instala el Google Cloud SDK

    Para configurar la replicación, instala Google Cloud el SDK en tu servidor externo. Puede que quieras instalar el SDK en tu servidor externo, a menos que ya esté instalado en otro lugar.

    Configurar 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 compatibles con PostgreSQL se incluyen las siguientes:

    • PostgreSQL autogestionado (en las instalaciones o en cualquier VM en la nube que controles por completo) 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.6+, 15.2+, 16 y 17
    • Servidor flexible de Microsoft Azure Database for PostgreSQL 11 y versiones posteriores
    • Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16 y 17

    Para configurar la fuente, debe configurar tanto la instancia de origen como las bases de datos de origen subyacentes.

    Lista de comprobación de servidores externos

    Si la réplica de Cloud SQL tiene habilitada 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 intervalo de IPs internas asignado al acceso a servicios privados de la red de VPC que la réplica de Cloud SQL usa como red privada.

    El cortafuegos del servidor de la base de datos de origen debe configurarse para permitir todo el intervalo de IPs internas asignado a la conexión de servicio privada de la red de VPC que la instancia de destino de Cloud SQL usa como campo privateNetwork de sus ajustes ipConfiguration.

    Para encontrar el intervalo de IP internas, sigue estos pasos:

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

      Ir a la página Redes de VPC

    2. Selecciona la red de VPC que quieras usar.

    3. Haga clic en la pestaña Conexión de servicio privada.

    Configurar la instancia de origen

    Para configurar la 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. Define los siguientes parámetros según sea necesario.

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

        • Si el origen es Cloud SQL, asigna el valor on a las marcas cloudsql.logical_decoding y cloudsql.enable_pglogical.

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

        • Define shared_preload_libraries para incluir pglogical con el siguiente comando:

          ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
                
        • Asigna el valor logical a wal_level 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 en el nivel logical, define el parámetro rds.logical_replication en 1.

        • Asigna el valor 0 a wal_sender_timeout 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.

        • Define max_replication_slots como el número máximo de ranuras de replicación que puede admitir la instancia de origen. Usa el siguiente comando después de sustituir MAX_REPLICATION_SLOTS por el número:

          ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;

          Cloud SQL requiere un espacio para cada base de datos que se migre. Especifica al menos el número de suscripciones que se espera que se conecten, 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 tareas de migración para el origen, el número de ranuras de replicación debe ser al menos 5 * 2 = 10, además del número de ranuras de replicación que ya utilices.

        • Define max_wal_senders con un valor al menos igual que max_replication_slots, además del número de remitentes que ya se hayan usado en tu instancia. Usa el siguiente comando y sustituye MAX_WAL_SENDERS por el número total de procesos de envío de WAL que se ejecutan simultáneamente:

          ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;

          Por ejemplo, si el parámetro max_replication_slots se define como 10 y ya estás usando dos remitentes, el número de procesos de remitente de WAL que se ejecutan al mismo tiempo sería 10 + 2 = 12.

        • Define max_worker_processes con un valor que sea al menos el número de bases de datos de la instancia de origen, además del número de procesos de trabajador que ya se utilicen en tu instancia. Usa el siguiente comando, sustituyendo MAX_WORKER_PROCESSES por el número total:

          ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
      2. Si la instancia de PostgreSQL de origen es Microsoft Azure Database for PostgreSQL Flexible Server, realiza las siguientes acciones para admitir la migración de datos de un servidor externo a una instancia de Cloud SQL:
        • Define shared_preload_libraries para incluir pglogical con el siguiente comando:

          ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
                
        • Asigna el valor logical a wal_level. Para obtener más información, consulta Replicación lógica y decodificación lógica en Azure Database for PostgreSQL (servidor flexible).
        • Define max_replication_slots como el número máximo de ranuras de replicación que puede admitir la instancia de origen. Usa el siguiente comando después de sustituir MAX_REPLICATION_SLOTS por el número:

          ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;

          Cloud SQL requiere un espacio para cada base de datos que se migre. Especifica al menos el número de suscripciones que se espera que se conecten, 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 tareas de migración para el origen, el número de ranuras de replicación debe ser al menos 5 * 2 = 10, además del número de ranuras de replicación que ya utilices.

        • Define max_wal_senders con un valor al menos igual que max_replication_slots, además del número de remitentes que ya se hayan usado en tu instancia. Usa el siguiente comando y sustituye MAX_WAL_SENDERS por el número total de procesos de envío de WAL que se ejecutan simultáneamente:

          ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;

          Por ejemplo, si el parámetro max_replication_slots se define como 10 y ya estás usando dos remitentes, el número de procesos de remitente de WAL que se ejecutan al mismo tiempo sería 10 + 2 = 12.

        • Define max_worker_processes con un valor que sea al menos el número de bases de datos de la instancia de origen, además del número de procesos de trabajador que ya se utilicen en tu instancia. Usa el siguiente comando, sustituyendo MAX_WORKER_PROCESSES por el número total:

          ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
        • Define azure.extensions para incluir pglogical. Para obtener más información, consulta Parámetros de servidor en Azure Database for PostgreSQL (servidor flexible).
    4. Los parámetros que definas en este paso se aplicarán a un servidor de bases de datos PostgreSQL en ejecución. También puedes hacer que estos cambios sean permanentes incluyéndolos en el archivo postgresql.conf.

    5. Si la réplica de Cloud SQL va a usar una IP privada, configura el cortafuegos del servidor externo para que permita el intervalo de IPs internas asignado al 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.

    Habilitar la monitorización del retraso de la replicación en 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 latencia de replicación no estará disponible de forma predeterminada. Tienes tres alternativas para hacer un seguimiento de esta métrica y reducir al máximo el periodo de inactividad cuando promociones la base de datos:

    • Opción 1: Habilita el servidor externo de Cloud SQL para monitorizar el retraso de la replicación concediendo acceso a una consulta específica. Con un usuario que tenga el privilegio SUPERUSER, haz lo siguiente:

      1. Define la siguiente función para permitir que el servidor externo consulte el retraso de la 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. Concede el permiso EXECUTE al usuario ejecutando 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: Conceder el privilegio SUPERUSER directamente al usuario que se utiliza para conectarse a la instancia de origen. De esta forma, el servidor externo puede leer directamente el retraso de la réplica.

    • Opción 3: Hacer un seguimiento de la latencia 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 latencia de réplica en los gráficos ni en las respuestas de la API.

    Configurar las bases de datos de origen

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

    • Fuentes locales: bases de datos de plantillas template0 y template1
    • En el caso de las fuentes de Amazon RDS: template0, template1 y rdsadmin
    • En el caso de las fuentes de Cloud SQL, las bases de datos de plantilla template0 y template1

    Haz lo siguiente en cada base de datos de tu 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 tu instancia de origen:

      CREATE EXTENSION IF NOT EXISTS pglogical

      En el caso de las tablas que no tienen claves principales, Cloud SQL admite la migración de la instantánea inicial y las instrucciones INSERT durante la fase de captura de datos de cambios (CDC). Migra las instrucciones UPDATE y DELETE manualmente.

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

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

      • En todos los esquemas de cada base de datos que se vaya a migrar, excepto en el esquema de información y los esquemas que empiecen por pg_, ejecuta el siguiente comando:

        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 quieras 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;

        Si la versión de Microsoft Azure Database for PostgreSQL de tu origen es anterior a la 14, ejecuta el siguiente comando:

        GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;

        Puedes ignorar un error que aparezca en la interfaz de pglogical.node.

        Si tu origen es Microsoft Azure Database for PostgreSQL versión 14 o posterior, ejecuta el siguiente comando:

        GRANT pg_read_all_data to username;

        De lo contrario, ejecuta el siguiente comando:

        ALTER USER username with REPLICATION;

    Configurar una instancia de representación de la fuente

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

    Crear 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 esta información.

    Si quieres migrar un subconjunto de bases de datos de la instancia de origen a la de Cloud SQL de destino, usa el parámetro selectedObjects para especificar los nombres de las bases de datos. 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",
            "hostPort": "SOURCE_HOST",
            "username": "USERNAME",
            "password": "PASSWORD",
            "caCertificate": "SOURCE_CERT",
            "clientCertificate": "CLIENT_CERT",
            "clientKey": "CLIENT_KEY"
          }
        }

    Ejemplo de importación gestionada

    // 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":"db2"}],
        "hostPort": "192.0.2.0:3306",
        "username": "replicationUser",
        "password": "486#@%*@"
      }
    }
    
    Propiedad Descripción
    SOURCE_NAME Nombre de la instancia de representación de origen que se va a crear.
    REGION La región en la que quieres que resida 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 de objetos separados por comas que contiene las bases de datos que vas a migrar de la instancia de representación de origen a la instancia de Cloud SQL de destino.
    SOURCE HOST La dirección IPv4 y el puerto del servidor externo, o la dirección DNS del servidor externo. Si el servidor externo está alojado en Cloud SQL, el puerto es 5432.
    USERNAME La cuenta de usuario de replicación del servidor externo.
    PASSWORD La contraseña de la cuenta de usuario de replicación.
    BUCKET El nombre del segmento que contiene el archivo de volcado. Inclúyalo solo si va a configurar la replicación con un archivo de volcado que se encuentre en un segmento de Cloud Storage.
    DUMP_FILE Un archivo del contenedor que contiene los datos del servidor externo.
    CLIENT_CA_CERT El certificado de la AC en el servidor externo. Inclúyalo solo si se usa SSL/TLS en el servidor externo.
    CLIENT_CERT El certificado de cliente del servidor externo. Solo es necesario para la autenticación de cliente y servidor. Inclúyalo solo si se usa SSL/TLS en el servidor externo.
    CLIENT_KEY El archivo de clave privada del certificado de cliente en el servidor externo. Solo es necesario para la autenticación de cliente-servidor. Inclúyalo solo si se usa SSL/TLS en el servidor externo.
    SSL_OPTION

    Indica si se usa el cifrado SSL/TLS para establecer una conexión entre la base de datos de origen de Microsoft Azure y la base de datos de destino de Cloud SQL. Puede especificar los siguientes valores para este parámetro:

    • SSL_OPTION_UNSPECIFIED: la base de datos de destino se conecta a la base de datos de origen sin cifrado.
    • DISABLED: SSL se desactiva cuando la réplica se conecta a la base de datos de origen.
    • REQUIRE: Se requiere SSL para que la réplica se conecte a la base de datos de origen.
    • VERIFY_CA: usa este parámetro para especificar si se usa la autenticación solo del servidor o la autenticación del servidor y del cliente como parte del cifrado SSL/TLS para conectar las bases de datos de origen y de destino.

      Para usar la autenticación solo del servidor, en la variable SOURCE_CERT, debes proporcionar el certificado x509 codificado en PEM de la autoridad de certificación (CA) que firmó el certificado del servidor externo.

      Para usar la autenticación de servidor a cliente, haz los siguientes cambios:

      • SOURCE_CERT: proporciona el certificado de la CA que firmó el certificado del servidor de la base de datos de origen
      • CLIENT_CERT: proporciona el certificado que usa la base de datos de destino para autenticarse en el servidor de la base de datos de origen
      • CLIENT_KEY: proporciona la clave privada asociada al certificado de cliente

    El valor predeterminado de este parámetro es SSL_OPTION_UNSPECIFIED.

    Crear una instancia de representación de origen

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

    A continuación, 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 El ID de tu proyecto en Google Cloud.
    JSON_PATH Ruta al archivo JSON que contiene los datos de la solicitud del servidor externo.

    Actualizar una instancia de representación de origen

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

    Modificar los datos de la solicitud

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

    Para actualizar las bases de datos que quieras migrar desde la instancia de representación de origen, 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.

    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": {
            "selectedObjects": "SELECTED_OBJECTS",
            "username": "NEW_USERNAME",
            "password": "NEW_PASSWORD"
          }
        }

    Ejemplo de importación gestionada

    // 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 contiene las bases de datos que vas a migrar de la instancia de representación de origen a la instancia de Cloud SQL de destino.
    NEW_USERNAME La nueva cuenta de usuario de replicación en el servidor externo.
    NEW_PASSWORD La contraseña de la nueva cuenta.

    Modificar una instancia de representación de origen

    Antes de empezar este paso, crea un archivo JSON que contenga los datos de la solicitud modificados.

    A continuación, para modificar 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 El ID de tu proyecto en Google Cloud.
    JSON_PATH Ruta al archivo JSON que contiene los datos de la solicitud del servidor externo.
    SOURCE_NAME Nombre de la instancia de representación de origen.

    Configurar una réplica de Cloud SQL

    La réplica de Cloud SQL acabará conteniendo los datos del servidor externo. En este paso, creará los datos de la solicitud y los usará en un comando curl que cree la réplica de Cloud SQL en Cloud SQL.

    Crear los datos de la solicitud

    Los datos de la solicitud contienen información básica sobre tu servidor externo y tu 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 esta 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 El tipo de máquina en el que se alojará tu instancia de réplica. Si no sabes qué tipo de máquina usar, empieza con db-custom-2-7680. Puedes cambiar su tamaño y otros valores admitidos más adelante si es necesario.
    DISK_SIZE Tamaño de almacenamiento de la réplica de Cloud SQL, en GB.
    PUBLIC_IP_STATUS Determina si se ha asignado 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 a la réplica, asigna el valor false. Si tu proyecto tiene habilitada la constraints/sql.restrictPublicIp política de la organización, para crear la réplica de Cloud SQL, debes asignar el valor false a la propiedad ipv4Enabled. Para obtener más información sobre cómo desactivar la asignación de direcciones IP públicas, consulta Inhabilitar una 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. En PROJECT_ID, especifica el ID de tu proyecto en Google Cloud.
    NETWORK_NAME Nombre de la red privada que se va a usar con la réplica de Cloud SQL.
    AVAILABILITY_TYPE Tipo de disponibilidad de la réplica de Cloud SQL. De forma predeterminada, el valor es ZONAL. Para que la réplica tenga alta disponibilidad, asigna el valor REGIONAL. Para obtener información sobre los valores permitidos, consulte SqlAvailabilityType.
    Después de crear una réplica de alta disponibilidad de un servidor externo, no puedes cambiarla a una réplica que no sea de alta disponibilidad. Esto también es cierto a la inversa. No puedes cambiar una réplica sin alta disponibilidad de un servidor externo a una réplica con alta disponibilidad.
    La conmutación por error manual puede provocar una migración irrecuperable si se intenta cuando la instancia aún está cargando los datos iniciales, o un tiempo de inactividad temporal si la instancia ya está replicando desde la fuente. Comprueba el estado de la réplica.
    SOURCE_REPRESENTATION_INSTANCE_NAME Nombre de la instancia de representación de origen.
    SOURCE_REGION La región asignada a la instancia de representación de origen.
    DATABASE_VERSION Versión de la base de datos que se va a usar con la réplica de Cloud SQL. Las opciones de esta versión son POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 o POSTGRES_17. La versión de la base de datos que se ejecuta en tu servidor externo debe coincidir con la versión de la base de datos de origen o ser una versión posterior.
    REPLICA_NAME Nombre de la réplica de Cloud SQL que se va a crear.

    Crear la réplica de Cloud SQL

    Antes de empezar este paso, crea un archivo JSON que contenga los datos de tu solicitud de réplica. A continuación, para crear una réplica de Cloud SQL, abre un 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 El ID de tu proyecto en Google Cloud, que debe ser el mismo que el de la instancia de origen.
    JSON_PATH Ruta al archivo JSON que contiene los datos de la solicitud de la réplica de Cloud SQL.

    Verificar la configuración

    Para comprobar que las instancias se han configurado correctamente, vaya 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 Base de datos externa principal 10.68.48.3:5432
         replica-instance Réplica de lectura de la base de datos 34.66.48.59

    También debes asegurarte de que tienes el permiso cloudsql.instances.migrate en la réplica de Cloud SQL. Este permiso se incluye en los roles de gestión de identidades y accesos cloudsql.admin o cloudsql.editor.

    Añadir usuarios a la réplica de Cloud SQL

    No puedes importar cuentas de usuario de bases de datos desde el servidor externo, pero sí crearlas en una réplica de Cloud SQL. Hazlo antes de replicar desde el servidor externo.

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

    Puedes usar la dirección IP de salida 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 Google Cloud consola, 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, coloca el puntero sobre la descripción emergente 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. 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 Nombre de la réplica de Cloud SQL cuya dirección IP pública saliente quieres obtener.

    Permitir conexiones entrantes en el servidor externo

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

    • El servidor externo está protegido por un cortafuegos o por 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 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 tengas que actualizar la instancia de representación de origen. Por ejemplo, en estos casos, debes actualizar tus configuraciones:

    • El host, el puerto o la IP del servidor externo cambian.
    • Quieres usar otro usuario de replicación de PostgreSQL.
    • La contraseña del usuario de replicación de PostgreSQL cambia.
    • Los certificados SSL que se usan para conectar de forma segura con el servidor externo cambian.

    Inicializar la réplica de Cloud SQL

    Para cargar inicialmente los datos del servidor externo en la réplica de Cloud SQL, usa una importación gestionada. Utiliza un servicio que extrae datos del servidor externo y los importa directamente a la instancia de Cloud SQL. Para obtener más información, consulta el artículo Usar una importación gestionada para configurar la replicación desde bases de datos externas.

    Supervisar replicación

    Cuando la réplica de Cloud SQL termina de cargar los datos iniciales, se conecta al servidor externo y aplica todas las actualizaciones que se hayan realizado después de la operación de exportación. Confirme el estado de la réplica.

    Es importante comprobar el estado de la réplica antes de convertirla en una instancia independiente. Si el proceso de replicación no se completa correctamente, la réplica promovida no tendrá todos los cambios del servidor externo.

    Si la latencia de replicación no tiende a 0, toma medidas para solucionarlo. Te recomendamos que consultes las siguientes 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.

    Si quieres migrar un subconjunto de bases de datos de la instancia de representación de origen a la instancia de Cloud SQL de destino, consulta las siguientes métricas por base de datos:

    Métrica Descripción
    per_database/postgresql/external_sync/initial_sync_complete Conocer la fase de migración de una base de datos. Si el valor de esta métrica es 0, significa que la base de datos sigue formando parte del volcado de datos inicial. Si el valor es 1, significa que la base de datos ha completado el volcado de datos inicial y se encuentra en la fase de captura de datos de cambios (CDC).
    per_database/postgresql/external_sync/replication_byte_lag Conocer el retraso de replicación de una base de datos (en bytes).

    Una vez que la réplica de Cloud SQL se haya puesto al día con el servidor externo y no haya ningún retraso en la replicación en la réplica de Cloud SQL, conéctate a tu base de datos. Ejecuta los comandos de base de datos adecuados para asegurarte de que el contenido es el esperado en comparación con el servidor externo. Conserva tu servidor externo hasta que se hayan realizado las validaciones necesarias.

    Configurar 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 convertirla en instancia principal.

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

    Consola

    1. En la Google Cloud consola, 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 actuará como elemento superior de la réplica que quieras crear.
    3. Haz clic en Crear réplica.
    4. En la página Crear réplica de lectura, actualice el ID de la instancia y cualquier otra opción de configuración, como el nombre, la región y la zona.
    5. Haz clic en Crear.

      Cloud SQL crea una réplica. Se te redirigirá a la página de la instancia de la réplica principal.

    6. Sigue los pasos del 4 al 6 para cada réplica en cascada que quieras crear.

    gcloud

    1. Crea la réplica especificando tu réplica de Cloud SQL como instancia principal con la marca --master-instance-name:
    2. gcloud sql instances create REPLICA_NAME \
            --master-instance-name=PARENT_REPLICA_NAME \
      Sustituye lo siguiente:
      • REPLICA_NAME: ID único de la réplica que estás creando.
      • PARENT_REPLICA_NAME: el nombre de la réplica de Cloud SQL
    3. Una vez creada 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 principal, edita el siguiente ejemplo de código JSON y guárdalo 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"

    Promocionar la réplica

    Promociona tu réplica siguiendo estos pasos:

    1. Promueve la réplica a una instancia principal.
    2. Añade réplicas de lectura a tu instancia.
    3. Opcional: Configura tu instancia para alta disponibilidad. Para evitar que haya más tiempo de inactividad, puedes habilitar la alta disponibilidad mientras configuras una réplica. Para ello, define 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 que la migración se realice sin problemas, compruebe que ningún objeto ni aplicación haga referencia a las extensiones. Antes de continuar con la migración, te recomendamos que elimines las extensiones y cualquier referencia de las bases de datos de origen.

      Para obtener más información sobre las extensiones que admite Cloud SQL, consulta Configurar 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 ningún ajuste de cron asociado a la extensión. Después de migrar las bases de datos y promover la réplica, Google recomienda que vuelvas a habilitar la extensión pg_cron en cada base de datos migrada.

    • No puedes migrar datos de la versión 11 de un servidor Microsoft Azure de origen a la versión 11 de una instancia de Cloud SQL para PostgreSQL de destino. Para resolver este problema, migra los datos a una instancia de Cloud SQL que tenga la versión 12 o una posterior.

    Siguientes pasos