logical decoding.
Per ulteriori informazioni sulla replica, consulta Informazioni sulla replica in Cloud SQL.
Configurare la replica esterna
Prima di iniziare
Prima di iniziare questa attività, devi avere un'istanza Cloud SQL e un'istanza PostgreSQL esterna.
Requisiti dell'istanza di origine
L'istanza di origine per una replica di lettura esterna deve essere un'istanza principale o autonoma. Non puoi utilizzare una replica di lettura Cloud SQL come istanza di origine per una replica di lettura esterna. A volte le repliche di lettura vengono ricreate dal clone del disco della relativa istanza principale e il relativo stato di replica in una replica di lettura esterna non può essere mantenuto dalla replica di lettura.
Configurare l'istanza principale
- Vai alla pagina Istanze Cloud SQL nella Google Cloud console.
- Abilita l'accesso all'istanza principale per l'indirizzo IP della replica esterna.
Per informazioni sull'abilitazione dell'accesso IP, consulta Configurazione dell'accesso per connessioni IP.
- Registra l'indirizzo IP pubblico e l'indirizzo IP pubblico in uscita dell' istanza principale per un utilizzo successivo. Puoi trovare questi valori nella pagina Panoramica dell'istanza.
- Fai clic sull'icona di Cloud Shell
nell'angolo in alto a destra. - Al prompt di Cloud Shell, utilizza il client PostgreSQL integrato per
connetterti all'istanza principale:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- Inserisci la password di root. Dovresti visualizzare il prompt di postgres.
- Crea un utente PostgreSQL con l'attributo
REPLICATION.CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD'; - Installa e configura l'estensione pglogical:
Modifica l'istanza Cloud SQL per aggiungere e impostare i seguenti flag:
cloudsql.enable_pglogicalcloudsql.logical_decodingmax_replication_slotsmax_worker_processesmax_wal_senders
Per ulteriori informazioni su questi flag, consulta la pagina delle risorse di PostgreSQL.
Riavvia il database, quindi accedi, passa a replication_user, crea l'estensione
pglogical:CREATE EXTENSION pglogical;
- Crea un nodo pglogical:
Un _nodo_ pglogical rappresenta un'istanza PostgreSQL fisica e memorizza i dettagli della connessione per l'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' );
- Se stai iniziando con un nuovo database, crea lo stesso database e le stesse tabelle
sia sull'istanza principale sia sull'istanza 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;
- Se hai già un database sull'istanza principale, devi creare lo stesso database sulla replica. Per farlo, esporta il database dall'istanza principale a un bucket Cloud Storage e importalo nella replica. Scopri di più su esportazione di dati da Cloud SQL a un file di dump SQL in Cloud Storage.
-
Per supportare la replica di diversi set di dati in destinazioni diverse,
pglogical ha il 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);
Configurare la replica esterna
- 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'; - Se stai iniziando con un nuovo database, utilizza il
REPLICATION_USER per creare lo stesso database e le
tabelle sia sull'istanza principale sia sull'istanza 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');
- Se stai inizializzando l'istanza di replica esterna
con un file esportato dall'istanza principale, scarica il
file esportato da Cloud Storage. Se la replica esterna si trova su un'
istanza Compute Engine, puoi scaricare il file utilizzando il
comando
gcloud storage:gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Importa il file nel database.
psql --user=postgres --password < DUMP_FILE_NAME.
- Installa
pglogicalin base al tuo sistema operativo. Ad esempio, sui sistemi Debian che eseguono PostgreSQL versione 13,sudo apt-get install postgresql-13-pglogical. - Accedi al database come replication_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 # executeCREATE EXTENSION pglogicalin 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.
- 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' );
- Crea una sottoscrizione 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' );
- Controlla lo stato della sottoscrizione:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- Se lo stato è
replicating, la configurazione è stata eseguita correttamente. - Inserisci alcuni dati nella replica principale e controlla la replica per assicurarti che i dati siano presenti anche lì.
Risoluzione dei problemi
Consulta Risoluzione dei problemi relativi a pglogicalPassaggi successivi
- Scopri come gestire le repliche.
- Scopri di più sulla replica in Cloud SQL.
- Scopri di più sulla replica di PostgreSQL.
- Scopri di più sulle impostazioni di configurazione della replica.
- Scopri di più sulla replica da un server esterno.