Puoi utilizzare le funzionalità di replica logica e decodifica in Cloud SQL per PostgreSQL. Queste funzionalità consentono flussi di lavoro di replica logica e flussi di lavoro Change Data Capture (CDC).
Per informazioni generali sulla replica, consulta Informazioni sulla replica in Cloud SQL.
Introduzione
Quando PostgreSQL esegue la replica logica, le modifiche trasmesse in flusso alle repliche vengono estratte dai log WAL utilizzando la decodifica logica. Le modifiche decodificate sono indipendenti dal formato di archiviazione fisica sottostante. Le modifiche riflettono solo le modifiche ai dati a livello SQL, in termini di INSERT, UPDATE ed DELETE. Questa indipendenza dal livello di archiviazione offre una grande flessibilità e consente ai consumatori dei modifiche in tempo reale un'ampia gamma di funzionalità.
La replica logica è la funzionalità di punta basata sulla decodifica logica.
A differenza della funzionalità di replica fisica di PostgreSQL, che richiede la stessa versione dei database di origine e di destinazione, la replica logica consente la replica tra le versioni principali di PostgreSQL. La replica logica in Cloud SQL è supportata dall'estensione pglogical, disponibile in tutte le versioni PostgreSQL, e dalla replica logica nativa di PostgreSQL, aggiunta in PostgreSQL 10.
Il formato in cui vengono trasmesse le modifiche può essere configurato con plug-in diversi. Ciò consente architetture flessibili di Change Data Capture (CDC).
Ad esempio, l'estensione wal2json
consente di trasmettere in flusso tutte le modifiche in un database a un consumer, formattato come JSON. Cloud SQL supporta il decodificatore pgoutput
integrato, il modulo di contributo test_decoding e wal2json
. Cloud SQL supporta attualmente entrambe le varianti wal2json
dell'output JSON: format-version 1
, che codifica l'intera transazione come singolo oggetto JSON, e format-version 2
, che restituisce un oggetto JSON per comando. Questi plug-in abilitano la replica
in database non PostgreSQL.
Configura l'istanza PostgreSQL
PostgreSQL supporta la decodifica logica scrivendo informazioni aggiuntive nel log write-ahead (WAL).
In Cloud SQL, puoi abilitare questa funzionalità impostando il flag cloudsql.logical_decoding
su on
. Questa impostazione è diversa da quella utilizzata
in PostgreSQL standard.
Se modifichi un'istanza PostgreSQL esterna, abilita questa funzionalità impostando il parametro di configurazione wal_level
su logical
.
Se prevedi di utilizzare l'estensione pglogical, devi aggiungere pglogical a
shared_preload_libraries
. Poiché Cloud SQL non consente la modifica diretta di questo flag, pglogical viene abilitato impostando cloudsql.enable_pglogical
su on
. (su una VM, sudo apt-get install postgresql-13-pglogical) e riavvia il database.
Se utilizzi pglogical per replicare tra due istanze PostgreSQL, la decodifica logica deve essere abilitata solo sull'istanza principale e non sull'istanza di replica (a meno che l'istanza stessa sia principale per altre repliche). Tuttavia, l'estensione pglogical deve essere abilitata su entrambe le istanze. Per esempi sull'utilizzo dei termini "primaria" e "replica" e sul relativo significato, consulta Informazioni sulla replica in Cloud SQL.
Attiva connettività di rete
Assicurati che le istanze principali accettino connessioni dall'istanza di replica.
Principale | Replica | Configurazione |
---|---|---|
Cloud SQL (IP pubblico) | Cloud SQL (IP pubblico) | Aggiungi l'indirizzo IP in uscita della replica alle reti autorizzate principali. |
Cloud SQL (IP privato) | Cloud SQL (IP privato) | Se entrambe le istanze si trovano nello stesso progetto Google Cloud, aggiungi l'
intervallo IP allocato della rete VPC della replica alla rete autorizzata che ospita le istanze.
Per trovare l'intervallo IP allocato nella console Google Cloud:
|
Esterna | Cloud SQL | Puoi utilizzare Database Migration Service. |
Cloud SQL | Esterna | Per saperne di più, consulta Configurare le repliche esterne. |
Ottieni l'indirizzo IP in uscita di un'istanza di replica
Se l'istanza di replica è un'istanza Cloud SQL e ha un indirizzo IP pubblico, esegui questi passaggi per recuperarne l'indirizzo IP in uscita.
Console
Apri la pagina Istanze Cloud SQL.
Accanto all'indirizzo IP pubblico della replica Cloud SQL, passa il mouse sopra la descrizione comando Ulteriori informazioni e recupera l'indirizzo IP in uscita. Tieni presente che l'indirizzo IP in uscita non è l'indirizzo IP visualizzato nell'elenco principale per la replica nella console Cloud.
Se l'istanza di replica non è un'istanza Cloud SQL, consulta la documentazione pertinente.
Per ulteriori informazioni su come ottenere l'indirizzo IP pubblico di un'istanza, vedi Recuperare l'indirizzo IP in uscita della replica Cloud SQL.
gcloud
Puoi utilizzare questo comando gcloud
:
gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"
Consenti connessioni
Se l'istanza principale è un'istanza Cloud SQL, puoi consentire l'accesso dall'indirizzo IP in uscita della replica aggiungendola come rete autorizzata.
Abilita le connessioni di replica per PostgreSQL 9.6 e versioni precedenti
Se l'istanza principale non è in esecuzione in Cloud SQL e utilizza PostgreSQL 9.6 o versioni precedenti, devi assicurarti che il file pg_hba.conf
dell'istanza sia impostato in modo da accettare connessioni di replica. Aggiungi
la seguente riga al file, utilizzando all all
solo per
il test iniziale. Per maggiore sicurezza, limita gli utenti e gli indirizzi IP solo a quelli
obbligatori, come in questo esempio:
host replication all all md5
Per ulteriori informazioni, consulta l'articolo sul file pg_hba.conf.
Crea un utente di replica
Per utilizzare le funzionalità di decodifica logica, devi creare un utente PostgreSQL con l'attributo REPLICATION
.
Esempi
CREATE USER replication_user WITH REPLICATION
IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'secret';
In alternativa, puoi impostare questo attributo su un utente esistente:
ALTER USER existing_user WITH REPLICATION;
Risorse PostgreSQL
Quando si utilizza la decodifica logica, un processo in background sull'istanza PostgreSQL principale trasforma le modifiche WAL in modifiche logiche, utilizzando il plug-in di decodifica selezionato, e le inoltra a un consumer (che potrebbe anche essere un'istanza non PostgreSQL). Questo processo in background è chiamato mittente WAL. Il numero di mittenti WAL simultanei che possono essere attivi in un'istanza PostgreSQL è limitato dal flag max_wal_senders. Il valore predefinito di questo flag è 10 e il suo limite cresce in modo lineare con la memoria dell'istanza Cloud SQL, consentendo 8 mittenti WAL per GB di memoria.
Per garantire che i segmenti WAL non vengano eliminati prima di essere inviati a tutti i consumer, PostgreSQL utilizza gli slot di replica logica per tenere traccia dei dati inviati a un determinato consumer (e slot di replica fisici per le repliche di lettura). Il numero di slot di replica che puoi creare per un'istanza PostgreSQL è limitato dal flag max_replication_slots. Il valore predefinito di questo flag è 10 e il suo limite aumenta con la memoria dell'istanza Cloud SQL, consentendo da 2 a 8 slot di replica per GB di memoria.
La tabella seguente mostra la relazione tra la memoria massima di un'istanza Cloud SQL e il numero massimo di slot di replica per l'istanza.
In genere esiste uno slot di replica e un mittente WAL per consumer, quindi questi flag devono essere impostati su valori più o meno uguali. Tuttavia, PostgreSQL consiglia di fornire un piccolo buffer per max_wal_senders
da gestire quando le connessioni si interrompono inaspettatamente e vengono create nuove connessioni. La replica fisica, utilizzata dalle repliche di lettura di Cloud SQL, utilizza anche uno slot di replica e un mittente WAL, quindi conteggiali quando calcoli il numero di risorse necessarie.
La replica logica nativa di PostgreSQL e pglogical richiedono ulteriori processi in background, sia sull'istanza principale che su quella di replica. Il numero di processi in background che possono essere eseguiti è limitato dal flag max_worker_processes. Il valore predefinito è otto e il suo limite cresce in modo lineare insieme alla memoria dell'istanza Cloud SQL, consentendo due processi aggiuntivi per GB di memoria. Il numero esatto di processi worker utilizzati con questi approcci è spiegato nelle rispettive sezioni.
Se questo flag è impostato su un valore troppo basso e la replica non riesce e appare il messaggio di errore worker registration failed
nei log, probabilmente devi aumentare l'impostazione max_worker_processes
.
Tieni presente che i mittenti WAL non vengono conteggiati come processi worker. I worker generati per l'esecuzione di query parallele contano, quindi se il valore di max_worker_processes
è impostato su un valore troppo basso, le prestazioni potrebbero essere scarse perché PostgreSQL non può sfruttare l'esecuzione di query parallele.
Utilizzando la funzione pg_ls_waldir (),
puoi determinare l'utilizzo del disco WAL. Questa funzione è limitata agli
utenti cloudsqlsuperuser
, ad esempio l'utente amministratore predefinito postgres
. Questa funzione è disponibile solo in PostgreSQL 10 e versioni successive.
Per calcolare l'utilizzo totale del disco WAL:
postgres=> select * from pg_ls_waldir();
nome | dimensioni | modifica |
---|---|---|
00000001000000000000000A | 16777216 | 2021-08-11 15:16:49+00 |
000000010000000000000009 | 16777216 | 2021-08-12 06:23:24+00 |
(2 righe)
postgres=> select pg_size_pretty(sum(size)) as "Total WAL disk usage" from pg_ls_waldir();
Utilizzo totale disco WAL |
---|
32 MB |
(1 riga)
Configura la replica logica con una replica esterna
Consulta Configurazione di repliche esterne per un esempio completo utilizzando la decodifica pglogical e logica.
Configura la replica logica con pglogical
Per configurare la replica logica con pglogical, la decodifica logica deve essere abilitata nell'istanza principale. Imposta cloudsql.logical_decoding=on
sull'istanza Cloud SQL
o wal_level=logical
su un'istanza esterna. Inoltre,
pglogical deve essere abilitato sia sull'istanza principale che su quella di replica; imposta
cloudsql.enable_pglogical=on
su un'istanza Cloud SQL o aggiungi pglogical a
shared_preload_libraries
su un'istanza esterna. Tieni presente che la modifica di questi
flag richiede il riavvio dell'istanza principale e di quella di replica.
Se riscontri problemi con questi passaggi, consulta Risolvere i problemi di pglogical.
Crea un utente con privilegi di replica
Quando utilizzi pglogical, devi avere un utente con privilegi di replica e il ruolo cloudsqlsuperuser
sia nell'istanza principale sia in quella di replica. L'utente deve eseguire tutti i comandi descritti di seguito.
Installa l'estensione pglogical
Devi installare l'estensione pglogical sia sull'istanza principale che su quella di replica. Nell'istanza principale, l'utente di replica (ovvero l'utente che si connette al database) deve installarla.
CREATE EXTENSION pglogical;
Crea un nodo pglogical su ogni istanza
Un nodo pglogical rappresenta un'istanza PostgreSQL fisica e archivia i dettagli della connessione per quell'istanza. Sia l'istanza principale che quella di replica devono registrarsi come nodi:
source-instance$ SELECT pglogical.create_node(
node_name := 'primary',
dsn := 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=secret'
);
dest-instance$ SELECT pglogical.create_node(
node_name := 'replica',
dsn := 'host=<replica-ip> port=5432 dbname=postgres user=replication_user password=secret'
);
Crea una tabella con dati da replicare
L'estensione pglogical consente di replicare solo un sottoinsieme di tabelle in una destinazione. Ad esempio, creeremo una tabella fittizia sull'istanza principale e la completeremo con alcuni dati da testare:
CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
La tabella deve essere creata anche sull'istanza di replica.
Aggiungi la tabella a un set di replica
Per supportare la replica di set di dati diversi in destinazioni diverse, pglogical ha il concetto di set di replica. Possiamo aggiungere la tabella di test al set di replica predefinito.
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
Crea la sottoscrizione pglogical
Crea la sottoscrizione pglogical sull'istanza di destinazione fornendo i dettagli della connessione all'istanza principale.
SELECT pglogical.create_subscription(
subscription_name := 'test_sub',
provider_dsn := 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=replicapassword'
);
SELECT * FROM pglogical.show_subscription_status('test_sub');
Se lo stato è "replicante", significa che la configurazione è riuscita. Esegui una query sulla tabella replica_test
per assicurarti che i dati siano stati replicati. Inserisci e modifica i record sull'istanza principale e verifica che vengano visualizzati nell'istanza di replica.
Nell'istanza principale, esegui una query sulla tabella pg_replication_slots
per visualizzare lo slot di replica creato dalla sottoscrizione.
esegui la pulizia
Dopo l'esito positivo del test, elimina l'abbonamento nella replica utilizzando pglogical.drop_subscription('test_sub')
. Verifica che lo slot di replica venga
eliminato anche sull'istanza principale. In caso contrario, i segmenti WAL continuano
ad accumularsi nell'istanza di replica.
Per ulteriori informazioni su set di replica, replica parziale dei dati, replica DDL, altre configurazioni avanzate e limitazioni, consulta la documentazione pglogical.
Utilizzo delle risorse
L'estensione pglogical esegue più processi in background che vengono conteggiati ai fini del limite di max_worker_processes
.
In stato stabile, esegue un processo "supervisore" quando abilitato, un processo "gestore" per database PostgreSQL che ha installato l'estensione (ad esempio, potrebbero esserci D
di questi) e un processo "apply" per sottoscrizione pglogical sull'istanza di replica (ad esempio, potrebbero esserci S
di questi).
L'estensione, tuttavia, può generare ulteriori processi worker durante l'esecuzione di una sincronizzazione iniziale e in realtà genera processi "manager" per ogni database dell'istanza, ma se nel database non è installata l'estensione, esce immediatamente.
Di conseguenza, assegna alcuni processi worker
in più rispetto al necessario. I processi worker sono utilizzati da PostgreSQL per
altri scopi, come l'elaborazione parallela delle query. Se il valore max_worker_processes
è impostato su un valore troppo basso, la replica potrebbe non riuscire automaticamente o PostgreSQL potrebbe non essere in grado di eseguire l'elaborazione delle query parallele.
Per riassumere, queste impostazioni sono consigliate:
max_worker_processes
>= 1 + D + 8 (on the source instance)
>= 1 + D + S + 8 (on the destination instance)
max_wal_senders >= S + 2 (on the source instance)
max_replication_slots >= S (on the source instance)
Risolvi i problemi di pglogical
Impossibile creare l'estensione pglogical
Quando provi a installare l'estensione pglogical, potresti visualizzare l'errore:
ERROR: pglogical is not in shared_preload_libraries
Quando installi pglogical su un'istanza Cloud SQL, assicurati di aver impostato
cloudsql.enable_pglogical=on
. Se utilizzi un'istanza esterna, aggiungila direttamente
al flag shared_preload_libraries
, ad esempio
shared_preload_libraries=pg_stat_statements,pglogical
.
Queste modifiche richiedono il riavvio dell'istanza principale.
Impossibile creare la sottoscrizione pglogical
Quando crei una sottoscrizione, pglogical prima controlla di poter utilizzare i dettagli della connessione per connettersi all'istanza. Prova innanzitutto a creare una connessione normale e, se non riesce, si verifica un errore: ERROR: could not
connect to the postgresql server
.
Se si verifica questo errore, assicurati che l'istanza principale sia configurata in modo da consentire le connessioni dall'istanza di replica e verifica che i dettagli della connessione forniti siano corretti. Sono disponibili ulteriori dettagli sul motivo per cui PostgreSQL non è riuscito a stabilire una connessione.
Dopo aver creato una connessione regolare, pglogical prova a creare una connessione di replica speciale. In PostgreSQL 9.6 e precedenti, questo tipo di connessione
potrebbe avere una configurazione di autenticazione diversa. Se visualizzi questo errore: ERROR: could
not connect to the postgresql server in replication mode
, devi aggiornare il file pg_hba.conf
nell'istanza di origine.
Il file pg_hba.conf
utilizzato da Cloud SQL presenta già le modifiche necessarie.
Questo errore si verifica solo quando ti connetti a un'istanza esterna non gestita da Cloud SQL.
In alternativa, la connessione in modalità di replica potrebbe non riuscire se l'istanza di origine non consente un numero sufficiente di mittenti WAL. Se vedi FATAL: number of requested
standby connections exceeds max_wal_senders
, aumenta max_wal_senders
nell'istanza principale.
La sottoscrizione pglogical non è attiva
Una sottoscrizione pglogical potrebbe non riuscire a replicare. Per risolvere il problema, assicurati innanzitutto che sia in esecuzione un processo in background sull'istanza di replica. Esegui la query
pg_stat_activity
per verificare che sia in esecuzione un processo pglogical apply
. In caso contrario, controlla i log sul nodo di destinazione. Se viene visualizzato il messaggio worker
registration failed,
, puoi aumentare l'impostazione di max_worker_processes
.
Quindi, assicurati che sia stato creato uno slot di replica nell'istanza principale. Nell'istanza di replica, la riga in pglogical.subscription
contiene il nome dello slot che la sottoscrizione cerca di creare e sull'istanza principale puoi eseguire una query su pg_replication_slots
per verificare che lo slot sia stato creato correttamente.
Se non è stato creato alcuno slot di replica, controlla i log sull'istanza principale.
Un errore di ERROR: logical decoding requires wal_level >= logical
implica che il flag wal_level
non è stato impostato su logical
. Risolvi il problema impostando cloudsql.logical_decoding=on
sull'istanza principale se si tratta di un'istanza Cloud SQL.
In alternativa, se l'istanza è un'istanza esterna, imposta wal_level=logical
.
In caso contrario, potresti vedere ERROR: all replication slots are in use
, insieme
all'utile HINT: Free one or increase max_replication_slots
.
Configura la replica logica PostgreSQL nativa
A partire da PostgreSQL 10, PostgreSQL supporta la replica logica integrata nativa. Per configurare la replica logica nativa, è necessario abilitare la decodifica logica sull'istanza principale impostando cloudsql.logical_decoding=on
su un'istanza Cloud SQL o wal_level=logical
su un'istanza esterna. Tieni presente che la modifica di questi flag richiede il riavvio dell'istanza principale.
Assicurati che le istanze siano configurate correttamente (per la connettività di rete e così via) esaminando le sezioni in Configurare un'istanza PostgreSQL. Questa pagina fornisce i passaggi per una proof of concept. Se riscontri problemi mentre segui i passaggi di queste sezioni, consulta Risolvere i problemi di pglogical. Per ulteriori informazioni, consulta Replica logica nella documentazione PostgreSQL.
Crea una tabella con dati da replicare
La replica logica nativa PostgreSQL supporta un intero database o solo singole tabelle. Ad esempio, creeremo una tabella fittizia sull'istanza principale e la completeremo con i dati da testare.
CREATE TABLE native_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO native_test (data) VALUES ('apple'), ('banana'), ('cherry');
La tabella deve essere creata anche sull'istanza di replica.
Crea una pubblicazione sull'istanza principale
Deal di replica logica PostgreSQL nativa con publisher e sottoscrittori.
Crea una pubblicazione dei dati in native_test
:
CREATE PUBLICATION pub FOR TABLE native_test;
Crea una sottoscrizione sull'istanza di replica
Ecco un esempio di creazione di un abbonamento sull'istanza di replica:
CREATE SUBSCRIPTION sub
CONNECTION 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=replicapassword'
PUBLICATION pub;
Per creare la sottoscrizione sull'istanza di replica è richiesto il ruolo cloudsqlsuperuser
. Dopo aver creato la sottoscrizione, esegui una query sulla tabella native_test
per verificare che i dati siano stati visualizzati nell'istanza di replica.
Nell'istanza principale, puoi eseguire una query sulla tabella pg_replication_slots
per visualizzare lo slot di replica creato dalla sottoscrizione.
esegui la pulizia
Una volta esito positivo del test, elimina l'abbonamento sulla replica utilizzando DROP
SUBSCRIPTION sub;
. Verifica che lo slot di replica venga eliminato anche sulla piattaforma principale. In caso contrario, i segmenti WAL continueranno ad accumularsi sull'istanza principale.
Limitazioni sulla replica logica PostgreSQL nativa
L'accesso alla colonna subconninfo
della tabella di sistema pg_subscription non è disponibile.
L'esecuzione di pg_dump
non può eseguire il dump delle informazioni sulle sottoscrizioni perché verifica se l'utente che si connette dispone delle autorizzazioni di super user.
Ricevi modifiche WAL decodificate per Change Data Capture (CDC)
Come caso d'uso alternativo per CDC, la decodifica logica può trasmettere modifiche da un'istanza PostgreSQL. Lo strumento standard utilizzato per eseguire questa operazione è pg_recvlogical.
Puoi utilizzare lo strumento pg_recvlogical
per creare uno slot di replica e trasmettere le modifiche
monitorate da questo slot. Il formato delle modifiche è determinato dalla
scelta del plug-in di decodifica. Puoi utilizzare:
wal2json, per trasmettere le modifiche in formato JSON, oppure
test_decoding, per trasmettere in streaming le modifiche formattate con un formato di testo semplice
Crea slot di replica
Per creare uno slot di replica, esegui:
pg_recvlogical
-h <instance_ip> \
-U <replication_user> \
-p 5432 \
-d postgres \
--slot test_slot \
--create-slot \
-P <decoder_plugin>
Modifiche allo stream
In un terminale Cloud Shell, esegui:
pg_recvlogical
-h <instance_ip> \
-U <replication_user> \
-p 5432 \
-d postgres \
--slot test_slot \
--start \
-f -
Mentre ti trovi in un altro terminale Cloud Shell, connettiti al tuo database ed esegui questi comandi:
CREATE TABLE cdc_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO cdc_test (data) VALUES ('apple', 'banana');
UPDATE cdc_test SET data = 'cherry' WHERE id = 2;
DELETE FROM cdc_test WHERE id = 1;
DROP TABLE cdc_test;
Se utilizzi il plug-in decoder wal2json
, nel primo terminale Cloud Shell viene visualizzato un output simile al seguente:
{"change":[]}
{"change":[{"kind":"insert","schema":"public","table":"cdc_test","columnnames":["id","data"],"columntypes":["integer","text"],"columnvalues":[1,"apple"]},{"kind":"insert","schema":"public","table":"cdc_test","columnnames":["id","data"],"columntypes":["integer","text"],"columnvalues":[2,"banana"]}]}
{"change":[{"kind":"update","schema":"public","table":"cdc_test","columnnames":["id","data"],"columntypes":["integer","text"],"columnvalues":[2,"cherry"],"oldkeys":{"keynames":["id"],"keytypes":["integer"],"keyvalues":[2]}}]}
{"change":[{"kind":"delete","schema":"public","table":"cdc_test","oldkeys":{"keynames":["id"],"keytypes":["integer"],"keyvalues":[1]}}]}
{"change":[]}
Se utilizzi il plug-in decoder test_decoding
, nel primo terminale Cloud Shell viene visualizzato un output simile al seguente:
BEGIN 19460
COMMIT 19460
BEGIN 19461
table public.cdc_test: INSERT: id[integer]:1 data[text]:'apple'
table public.cdc_test: INSERT: id[integer]:2 data[text]:'banana'
COMMIT 19461
BEGIN 19462
table public.cdc_test: UPDATE: id[integer]:2 data[text]:'cherry'
COMMIT 19462
BEGIN 19463
table public.cdc_test: DELETE: id[integer]:1
COMMIT 19463
BEGIN 19464
COMMIT 19464
Gli ID transazione potrebbero essere diversi.
esegui la pulizia
Dopo aver completato il test, elimina lo slot di replica creato eseguendo:
pg_recvlogical
-h <instance_ip> \
-U <replication_user> \
-p 5432 \
-d postgres \
--slot test_slot \
--drop-slot
Note e limitazioni
Le note e le limitazioni in questa sezione si applicano alle funzionalità di replica logica e decodifica di Cloud SQL per PostgreSQL.
Quando ripristini un'istanza in cui è abilitato
cloudsql.logical_decoding
ocloudsql.enable_pglogical
e che attualmente agisce come publisher per la replica logica, devi prima disabilitare la replica in tutte le istanze di destinazione. In caso contrario, il ripristino nell'istanza non riesce e restituisce un errore, ma al momento i dettagli dell'errore non sono visibili.Quando ripristini un backup di un'istanza in cui era abilitato
cloudsql.logical_decoding
ocloudsql.enable_pglogical
(al momento del backup) e lo ripristini in una nuova istanza, lo stato di replica non viene ripristinato nella nuova istanza. Devi riconfigurare la replica manualmente in seguito.In un'istanza Cloud SQL con una o più repliche di lettura di Cloud SQL (con replica fisica), se abiliti
cloudsql.logical_decoding
ocloudsql.enable_pglogical
, questi flag vengono abilitati anche nella replica di lettura.Le istanze di replica di lettura di Cloud SQL non possono fungere da publisher per la replica logica perché PostgreSQL non supporta la decodifica logica nelle repliche di lettura. Tuttavia, i flag sono abilitati sull'istanza della replica di lettura per assicurarsi che possa sostituire l'istanza principale se e quando viene promossa.
L'abilitazione di
cloudsql.logical_decoding
ocloudsql.enable_pglogical
nell'istanza principale comporta l'abilitazione dei flag in tutte le repliche di lettura, il che comporta il riavvio della replica principale e di lettura in chiusura. Per evitare questa situazione e controllare quando ogni istanza viene riavviata, puoi (1) impostare a turno i flag su ogni replica di lettura e solo allora (2) impostare i flag sull'istanza principale.La disabilitazione di
cloudsql.logical_decoding
ocloudsql.enable_pglogical
nell'istanza principale non comporta la disabilitazione dei flag in tutte le repliche di lettura. Per disabilitare i flag tra le istanze, devi eseguire l'inverso dei passaggi descritti sopra: (1) disabilitare i flag sull'istanza principale e poi (2) disabilitare i flag a turno su ogni replica di lettura.