Configurazione di repliche esterne

Questa pagina descrive come configurare un'istanza Cloud SQL che si replica in una replica esterna a Cloud SQL utilizzando l' estensione pglogical con logical decoding.

Per saperne di più sulla configurazione della replica esterna, consulta Informazioni sulla replica esterna.

Imposta la configurazione della replica esterna

Prima di iniziare

Prima di iniziare questa attività, devi avere un'istanza Cloud SQL e un'istanza PostgreSQL esterna che soddisfi i requisiti per le repliche esterne.

Configura l'istanza principale

  1. Vai alla pagina Istanze Cloud SQL nella console Google Cloud.
  2. Abilita l'accesso sull'istanza principale per l'indirizzo IP della replica esterna.

    Per informazioni sull'abilitazione dell'accesso IP, consulta Configurazione dell'accesso per connessioni IP.

  3. Registra l'indirizzo IP pubblico e l'indirizzo IP pubblico in uscita dell'istanza principale per utilizzarli in un secondo momento. Puoi trovare questi valori nella pagina Panoramica dell'istanza.
  4. Fai clic sull'icona di Cloud Shell nell'angolo in alto a destra.
  5. Nel prompt di Cloud Shell, utilizza il client PostgreSQL integrato per connetterti all'istanza principale:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Inserisci la password root. A questo punto dovresti vedere il prompt postgres.
  7. Crea un utente PostgreSQL con l'attributo REPLICATION.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Installa e configura l'estensione pglogical:

    Modifica l'istanza Cloud SQL per aggiungere e impostare i flag seguenti:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Per ulteriori informazioni su questi flag, consulta la pagina delle risorse di PostgreSQL.

    Riavvia il database, quindi accedi, cambia il valore di replica_user e crea l'estensione pglogical:

    CREATE EXTENSION pglogical;
       

  9. Crea un nodo pglogico:

    Un _node_ pglogical rappresenta un'istanza PostgreSQL fisica e archivia i dettagli della connessione per quell'istanza.

    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. Se inizi con un nuovo database, crea lo stesso database e le stesse tabelle sia sull'istanza principale sia su quella di replica. Ad esempio:
    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. Se hai già un database sull'istanza principale, devi crearne uno stesso nella replica. A questo scopo, esporta il database dall'istanza principale a un bucket Cloud Storage e importalo nella replica. Scopri di più sull' esportazione dei dati da Cloud SQL in un file di dump SQL in Cloud Storage.
  12. Per supportare la replica di diversi set di dati in destinazioni diverse, pglogical dispone del concetto di set di replica. Ad esempio, per aggiungere una tabella al set di replica predefinito:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Configura la replica esterna

  1. Crea un utente speciale per la replica e concedi i privilegi di replica:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Se inizi con un nuovo database, utilizza REPLICATION_USER per creare lo stesso database e le stesse tabelle sia sulle istanze principali sia su quelle di replica. Ad esempio:
    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. Se stai eseguendo il seeding dell'istanza di replica esterna con un file che hai esportato dall'istanza principale, scarica il file esportato da Cloud Storage. Se la replica esterna si trova su un'istanza di Compute Engine, puoi scaricare il file utilizzando il comando gsutil:
    gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importa il file nel tuo database.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Installa pglogical in base al tuo sistema operativo. Ad esempio, sui sistemi Debian che eseguono PostgreSQL versione 13, sudo apt-get install postgresql-13-pglogical.
  6. Accedi al database come replica_user e imposta i seguenti parametri:
    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 pglogico:
    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 sottoscrizione pglogica:
    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. Controlla lo stato dell'abbonamento:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Se lo stato è visualizzato come replicating, significa che la configurazione è riuscita.
  11. Inserisci alcuni dati nel file principale e controlla la replica per assicurarti che i dati vengano visualizzati anche lì.

Risolvere i problemi

Consulta la sezione Risoluzione dei problemi pglogica

Passaggi successivi