Configurar réplicas externas

En esta página, se describe cómo configurar una instancia de Cloud SQL para replicar a una réplica externa de Cloud SQL mediante la extensión pglogical con logical decoding.

Para obtener más información sobre la configuración de la réplica externa, consulta Información sobre la replicación externa.

Establece la configuración de la réplica externa

Antes de comenzar

Antes de comenzar con esta tarea, debes contar con una instancia de Cloud SQL y una instancia externa de PostgreSQL que cumpla con los requisitos para réplicas externas.

Configura la instancia principal

  1. Ve a la página Instancias de Cloud SQL en la consola de Google Cloud.
  2. En la instancia principal, habilita el acceso de la dirección IP de la réplica externa.

    Si quieres obtener más información sobre cómo habilitar el acceso de IP, consulta Configura el acceso para conexiones IP públicas.

  3. Registra la dirección IP pública y la dirección IP saliente pública de la instancia principal para usarla más adelante. Puedes encontrar estos valores en la página Descripción general de la instancia.
  4. Haz clic en el ícono de Cloud Shell () en la esquina superior derecha.
  5. En el mensaje de Cloud Shell, usa el cliente PostgreSQL incorporado para conectarte a tu instancia principal:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Ingresa tu contraseña raíz. Deberías ver el mensaje de postgres.
  7. Crea un usuario de PostgreSQL con el atributo REPLICATION.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Instala y configura la extensión pglogical:

    Edita la instancia de Cloud SQL para agregar y configurar las siguientes marcas:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Para obtener más información sobre estas marcas, consulta la página Recursos de PostgreSQL.

    Reinicia la base de datos, accede, cambia a replication_user y crea la extensión pglogical:

    CREATE EXTENSION pglogical;
       
  9. Crea un nodo pglogical:

    Un _node_ pglogical representa una instancia física de PostgreSQL y almacena los detalles de conexión para esa instancia.

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. Si estás comenzando con una base de datos nueva, crea la misma base de datos y las mismas tablas en las instancias principal y de réplica. Por ejemplo:
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
  11. Si ya tienes una base de datos en la instancia principal, debes crear la misma en la réplica. Para ello, exporta la base de datos de la instancia principal a un bucket de Cloud Storage y, luego, impórtala en la réplica. Obtén más información sobre la exportación de datos desde Cloud SQL a un archivo de volcado de SQL en Cloud Storage.
  12. Para admitir la replicación de diferentes conjuntos de datos en diferentes destinos, pglogical tiene el concepto de un conjunto de replicación. Por ejemplo, para agregar una tabla al conjunto de replicación predeterminado:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Configura la réplica externa

  1. Crea un usuario especial para la replicación y otorga privilegios de replicación:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Si comienzas con una base de datos nueva, usa REPLICATION_USER para crear la misma base de datos y las mismas tablas en las instancias principal y de réplica. Por ejemplo:
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. Si propagas la instancia de réplica externa con un archivo que exportaste desde la instancia principal, descarga el archivo exportado desde Cloud Storage. Si tu réplica externa está en una instancia de Compute Engine, puedes descargar el archivo con el comando gcloud storage:
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importa el archivo a la base de datos.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instala pglogical según tu SO. Por ejemplo, en sistemas Debian que ejecutan la versión 13 de PostgreSQL, sudo apt-get install postgresql-13-pglogical.
  6. Accede a la base de datos como replication_user y configura los siguientes parámetros:
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. Crea un nodo pglogical:
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. Crea una suscripción a pglogical:
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. Verifica el estado de la suscripción:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Si el estado aparece como replicating, la configuración se realizó correctamente.
  11. Inserta algunos datos en la instancia principal y verifica la instancia de réplica para asegurarte de que los datos también aparezcan allí.

Solucionar problemas

Consulta Solución de problemas de pglogical

¿Qué sigue?