Configurar réplicas externas

En esta página se 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, consulta el artículo Acerca de la replicación en Cloud SQL.

Configurar la réplica externa

Antes de empezar

Antes de empezar esta tarea, debes tener una instancia de Cloud SQL y una instancia de PostgreSQL externa que cumpla los requisitos de las réplicas externas.

Requisitos de la instancia de origen

La instancia de origen de una réplica de lectura externa debe ser una instancia principal o independiente. No puedes usar una réplica de lectura de Cloud SQL como instancia de origen de una réplica de lectura externa. A veces, las réplicas de lectura se vuelven a crear a partir del clon de disco de su instancia principal, y la réplica de lectura no puede mantener su estado de replicación en una réplica de lectura externa.

Configurar la instancia principal

  1. Ve a la página Instancias de Cloud SQL de la Google Cloud consola.
  2. Habilita 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 por IP, consulta el artículo Configurar el acceso para conexiones IP.

  3. Anota la dirección IP pública y la dirección IP pública de salida de la instancia principal para usarlas más adelante. Puede encontrar estos valores en la página Resumen de la instancia.
  4. En la esquina superior derecha, haz clic en el icono de Cloud Shell .
  5. En la petición de Cloud Shell, usa el cliente de PostgreSQL integrado para conectarte a tu instancia principal:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Introduce tu contraseña de administrador. A continuación, deberías ver la petición 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 añadir y definir 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 de recursos de PostgreSQL.

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

    CREATE EXTENSION pglogical;
       
  9. Crea un nodo pglogical:

    Un _nodo_ de pglogical representa una instancia física de PostgreSQL y almacena los detalles de conexión de 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 vas a usar una base de datos nueva, crea la misma base de datos y las mismas tablas en las instancias principal y 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 segmento de Cloud Storage e impórtala en la réplica. Consulta más información sobre cómo exportar datos de 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 conjunto de replicación. Por ejemplo, para añadir una tabla al conjunto de replicación predeterminado, haz lo siguiente:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Configurar la réplica externa

  1. Crea un usuario especial para la replicación y concédele privilegios de replicación:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Si vas a empezar con una base de datos nueva, usa la 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 vas a inicializar la réplica externa con un archivo que has exportado de la instancia principal, descarga el archivo exportado de 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 tu base de datos.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instala pglogical según tu sistema operativo. Por ejemplo, en sistemas Debian que ejecuten PostgreSQL versión 13, sudo apt-get install postgresql-13-pglogical.
  6. Inicia sesión en la base de datos como replication_user y define 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 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. Comprueba el estado de la suscripción:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Si el estado es replicating, significa que la configuración se ha completado correctamente.
  11. Inserta algunos datos en la principal y comprueba la réplica para asegurarte de que los datos también aparecen ahí.

Solucionar problemas

Consulta Solucionar problemas de pglogical.

Siguientes pasos