Configurar réplicas externas

Esta página describe cómo configurar una instancia de Cloud SQL que se replica en una réplica externa a Cloud SQL mediante la extensión pglogical con logical decoding .

Para obtener más información sobre la replicación, consulte Acerca de la replicación en Cloud SQL .

Configurar la configuración de réplica externa

Antes de empezar

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

Configurar la instancia principal

  1. Vaya a la página Instancias de Cloud SQL en el Google Cloud consola.
  2. Habilite el acceso en la instancia principal para la dirección IP de la réplica externa.

    Para obtener información sobre cómo habilitar el acceso IP, consulte Configurar el acceso para conexiones IP .

  3. Registre la dirección IP pública y la dirección IP pública saliente de la instancia principal para su uso posterior. Puede encontrar estos valores en la página "Descripción general" de la instancia.
  4. Haga clic en el icono de Cloud Shell en la esquina superior derecha.
  5. En el indicador de Cloud Shell, use el cliente PostgreSQL integrado para conectarse a su instancia principal:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Introduce tu contraseña de root. Deberías ver el mensaje de Postgres.
  7. Cree un usuario PostgreSQL con el atributo REPLICATION .
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Instalar y configurar la extensión pglogical:

    Edite la instancia de Cloud SQL para agregar y configurar los siguientes indicadores:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Para obtener más información sobre estos indicadores, consulte la página de recursos de PostgreSQL .

    Reinicie la base de datos, luego inicie sesión, cambie a replication_user, cree la extensión pglogical :

    CREATE EXTENSION pglogical;
       
  9. Crear un nodo pglogical:

    Un _nodo_ pglogical representa una instancia física de PostgreSQL y almacena 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 comienza con una base de datos nueva, cree la misma base de datos y las mismas tablas tanto en la instancia principal como en la 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 tiene una base de datos en la instancia principal, debe crearla en la réplica. Para ello, exporte la base de datos de la instancia principal a un bucket de Cloud Storage e impórtela a la réplica. Obtenga más información sobre cómo exportar datos de Cloud SQL a un archivo de volcado de SQL en Cloud Storage .
  12. Para permitir la replicación de diferentes conjuntos de datos a distintos destinos, pglogical utiliza el concepto de 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);
       

Configurar la réplica externa

  1. Cree un usuario especial para la replicación y otorgue privilegios de replicación:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Si comienza con una nueva base de datos, use REPLICATION_USER para crear la misma base de datos y tablas tanto en la instancia principal como en la 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 va a sembrar la instancia de réplica externa con un archivo que exportó desde la instancia principal, descargue el archivo exportado desde Cloud Storage. Si su réplica externa está en una instancia de Compute Engine, puede descargar el archivo con el comando gcloud storage :
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importa el archivo a tu base de datos.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instale pglogical según su sistema operativo. Por ejemplo, en sistemas Debian con PostgreSQL versión 13, sudo apt-get install postgresql-13-pglogical .
  6. Inicie sesión en la base de datos como replication_user y configure 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. Crear 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. Crear una suscripción 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. Comprobar el estado de la suscripción:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Si el estado aparece como replicating , entonces la configuración es exitosa.
  11. Inserte algunos datos en el archivo principal y verifique la réplica para asegurarse de que los datos también aparezcan allí.

Solucionar problemas

Consulte Solución de problemas pglogical

¿Qué sigue?