Puoi utilizzare le funzionalità di decodifica e replica logica in Cloud SQL per PostgreSQL. Queste funzionalità consentono i flussi di lavoro di replica logica e di CDC (Change Data Capture).
Per informazioni generali sulla replica, consulta Informazioni sulla replica in Cloud SQL.
Introduzione
Quando PostgreSQL esegue la replica logica, le modifiche trasmesse in flusso vengono estratte dai log WAL mediante decodifica logica. Le modifiche decodificate sono indipendenti dal formato di archiviazione fisico sottostante. Le modifiche riflettono solo le modifiche ai dati a livello di SQL, in termini di INSERT, UPDATE ed DELETE. Questa indipendenza dal livello di archiviazione offre una grande flessibilità e consente un'ampia gamma di funzionalità da parte dei consumatori dei modifiche in tempo reale.
La replica logica è la funzionalità di punta basata sulla decodifica logica.
A differenza di PostgreSQL, replica fisica che richiede sia l'origine che la destinazione la stessa versione dei database, la replica logica consente la replica Versioni principali di PostgreSQL. La replica logica in Cloud SQL è supportata dal pglogical, disponibile in tutte le versioni PostgreSQL e di replica logica nativa, aggiunta in PostgreSQL 10.
Il formato in cui vengono trasmesse le modifiche può essere configurato con
o plug-in. Ciò consente di avere flessibilità
Change Data Capture (CDC)
(CDC).
Ad esempio, l'estensione wal2json
consente di trasmettere in streaming tutte le modifiche di un database a un consumer, in formato JSON. Cloud SQL supporta il decoder pgoutput
integrato,
test_decoding
contrib e wal2json
. Al momento Cloud SQL supporta entrambe le variantiwal2json
dell'output JSON: format-version 1
che codifica l'intera transazione come un singolo oggetto JSON e format-version 2
che genera un oggetto JSON per comando. Questi plug-in abilitano
in database non PostgreSQL.
Configura l'istanza PostgreSQL
PostgreSQL supporta la decodifica logica scrivendo informazioni aggiuntive nel suo log write-ahead (WAL).
In Cloud SQL, puoi attivare 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à
L'impostazione del parametro di configurazione wal_level
su logical
.
Se prevedi di utilizzare l'estensione pglogical, pglogical deve essere aggiunto 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
per configurare un database.
Se utilizzi pglogical per replicare tra due istanze PostgreSQL, la decodifica logica deve essere abilitata solo sull'istanza principale e non l'istanza di replica (a meno che l'istanza stessa non sia un'istanza principale di repliche). Tuttavia, l'estensione pglogical deve essere abilitata su entrambe le istanze. Per esempi di come i termini "principale" e "replica" e le relative significati, vedi Informazioni sulla replica in Cloud SQL.
Attiva connettività di rete
Assicurati che le istanze principali accettino le connessioni dall'istanza replica.
Principale | Replica | Configurazione |
---|---|---|
Cloud SQL (IP pubblico) | Cloud SQL (IP pubblico) | Aggiungi l'indirizzo IP in uscita della replica alle reti autorizzate della principale. |
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:
|
Esterno | Cloud SQL | Puoi utilizzare Database Migration Service. |
Cloud SQL | Esterno | 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, segui questi passaggi per ottenere il suo 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 Altre informazioni e recupera l'indirizzo IP in uscita. Tieni presente che l'indirizzo IP in uscita non è quello visualizzato nella scheda principale della replica nella console Cloud.
Se l'istanza di replica non è un'istanza Cloud SQL, consulta documentazione pertinente.
Per saperne di più su come ottenere l'indirizzo IP pubblico di un'istanza, consulta Recuperare l'indirizzo IP in uscita della replica Cloud SQL.
gcloud
Puoi utilizzare il seguente 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 aggiungendolo come rete autorizzata.
Attivare le connessioni di replica per PostgreSQL 9.6 e versioni precedenti
Se l'istanza principale non è in esecuzione in Cloud SQL, ma è in esecuzione PostgreSQL 9.6 o versioni precedenti, devi assicurarti che il file pg_hba.conf
dell'istanza sia impostato per accettare le connessioni di replica. Aggiungi il parametro
seguente al file, utilizzando all all
per l'iniziale
solo per i test. Per una maggiore sicurezza, limita gli utenti e gli indirizzi IP solo a quelli necessari, come in questo esempio:
host replication all all md5
Per ulteriori informazioni, vedi Il file pg_hba.conf.
Crea un utente di replica
Per utilizzare le funzionalità di decodifica logica, devi creare un utente PostgreSQL con
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 viene utilizzata la decodifica logica, un processo in background nell'istanza PostgreSQL principale trasforma le modifiche WAL in modifiche logiche, utilizzando il plug-in di decodifica selezionato, e le inoltra a un consumatore (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. Per impostazione predefinita, questo flag è 10 e il suo limite cresce linearmente con la memoria dell'istanza Cloud SQL, che consentono 8 mittenti WAL per GB di memoria.
Per garantire che i segmenti WAL non vengano eliminati prima di essere inviati a tutti PostgreSQL utilizza PostgreSQL slot di replica logica per tenere traccia di quali dati sono stati inviati a quale consumatore (e slot di replica fisici per le repliche di lettura). Il numero di gli slot di replica che puoi creare per un'istanza PostgreSQL sono limitati max_replication_slots flag. Questo flag il valore predefinito è 10 e il suo limite aumenta con la memoria del tuo Cloud SQL con un'istanza, consentendo da 2 a 8 slot di replica per GB di memoria.
La seguente tabella mostra la relazione tra la memoria massima di un'istanza Cloud SQL e gli slot di replica massimi per l'istanza.
In genere esiste uno slot di replica e un mittente WAL per consumatore, pertanto questi indicatori devono essere impostati su valori approssimativamente uguali. Tuttavia, PostgreSQL consiglia
fornendo a max_wal_senders
un piccolo buffer da gestire quando le connessioni
muore inaspettatamente e vengono stabilite nuove connessioni. Replica fisica, come utilizzata da
le repliche di lettura di Cloud SQL, ma utilizza anche uno slot di replica e un mittente WAL, quindi
a quelli per calcolare quante sono le risorse di cui hai bisogno.
La replica logica nativa di PostgreSQL e pglogical richiedono dei processi in background da eseguire, sia sull'istanza principale che su quella di replica. La di processi in background che possono essere eseguiti è limitato max_worker_processes flag. Il valore predefinito è 8 e il limite aumenta in modo lineare con la memoria dell'istanza Cloud SQL, consentendo due processi aggiuntivi per GB di memoria. Il numero esatto di worker i processi utilizzati con questi approcci sono illustrati nelle rispettive sezioni.
Se questo flag è impostato su un valore troppo basso e la replica non riesce con il messaggio di errore
worker registration failed
nei log, probabilmente dovrai
aumentare l'impostazione max_worker_processes
.
Tieni presente che i mittenti WAL non vengono conteggiati come processi di lavoro. Lavoratori nati per
le esecuzioni parallele di query 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 parallela delle query.
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 versione 10 e successive.
Per calcolare l'utilizzo totale del disco WAL:
postgres=> select * from pg_ls_waldir();
nome | dimensioni | modifica |
---|---|---|
00000001000000000000000A | 16777216 | 11-08-2021 15:16:49+00 |
000000010000000000000009 | 16777216 | 12-08-2021 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)
Configurare la replica logica con una replica esterna
Vedi Configura le repliche esterne per ottenere un esempio completo utilizzando la decodifica pglogica e logica.
Configurare la replica logica con pglogical
Per configurare la replica logica con pglogical, la decodifica logica deve essere attivata
sull'istanza principale. Imposta cloudsql.logical_decoding=on
su 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 sia dell'istanza principale sia di quella di replica.
Se riscontri problemi con questi passaggi, consulta Risolvere i problemi relativi a pglogical.
Crea un utente con privilegi di replica
Quando utilizzi pglogical, devi avere un utente con privilegi di replica e il ruolo cloudsqlsuperuser
su entrambe le istanze principali e di replica. Qualsiasi comando
descritti di seguito devono essere eseguiti dallo stesso utente.
Installa l'estensione pglogical
Devi installare l'estensione pglogical sia sull'istanza principale sia su quella di replica. Nell'istanza principale, l'utente di replica (ovvero l'utente che si connette database) devono installarlo.
CREATE EXTENSION pglogical;
Crea un nodo pglogical su ogni istanza
Un nodo pglogical rappresenta un'istanza PostgreSQL fisica e memorizza i dettagli di connessione per quell'istanza. Sia l'istanza principale sia 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 i dati da replicare
L'estensione pglogical consente di replicare solo un sottoinsieme di tabelle in un destinazione. Ad esempio, creeremo una tabella fittizia sull'istanza principale e compilarlo 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 un set di replica. Possiamo aggiungere la tabella di test predefinito della replica.
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 è "In corso di replica", la configurazione è andata a buon fine. Esegui una query sul
replica_test
per garantire che i dati siano stati replicati. Inserisci e modifica
i record nell'istanza principale e verifica che vengano visualizzati nell'istanza
della replica.
Nell'istanza principale, esegui una query sulla tabella pg_replication_slots
per visualizzare la replica
slot creato dall'abbonamento.
Esegui la pulizia
Una volta completato il test, elimina l'abbonamento sulla replica utilizzando
pglogical.drop_subscription('test_sub')
. Verifica che lo slot di replica sia
anch'esso caduto nelle primarie. In caso contrario, i segmenti WAL continuano ad accumularsi sull'istanza di replica.
Per ulteriori informazioni su set di replica, replica parziale dei dati, replica DDL altre configurazioni avanzate e limitazioni, consulta documentazione pglogical.
Utilizzo delle risorse
L'estensione pglogical esegue più processi in background che vengono conteggiati ai fini del calcolo
il limite di max_worker_processes
.
In stato stabile esegue un "supervisore" una volta abilitato,
"amministratore" per database PostgreSQL che ha installato l'estensione (per
esempio, potrebbero esserci D
di questi formati) e uno "apply" processo per pglogical
sull'istanza di replica (ad esempio, potrebbero esserci S
di questi).
Tuttavia, l'estensione potrebbe generare processi di lavoro aggiuntivi durante l'esecuzione di una
sincronizzazione iniziale e, in effetti, genera processi "di gestione" per ogni database
nell'istanza, ma se nel database non è installata l'estensione, esce immediatamente.
Di conseguenza, assegna un numero limitato di processi worker
richiesta nello stato stabile. I processi worker sono utilizzati da PostgreSQL per
ad esempio l'elaborazione parallela delle query. Se il criterio max_worker_processes
è impostato
troppo basso, la replica potrebbe non riuscire in modo invisibile o PostgreSQL potrebbe non essere in grado di
l'elaborazione parallela delle query.
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)
Risolvere i problemi relativi a 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 l'abbonamento pglogical
Quando crei un abbonamento, pglogical verifica innanzitutto di poter utilizzare i dettagli di connessione per connettersi all'istanza. Prova innanzitutto a creare
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 per consentire le connessioni dall'istanza replica e che i dettagli di 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 cerca di creare una
connessione di replica. In PostgreSQL 9.6 e versioni precedenti, questo tipo di connessione potrebbe avere una configurazione di autenticazione diversa. Se viene visualizzato 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 è gestito 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 il valore di max_wal_senders
su
l'istanza principale.
La sottoscrizione pglogical non è attiva
La replica di una sottoscrizione pglogical potrebbe non riuscire. Per risolvere il problema, assicurati innanzitutto che un processo in background sia in esecuzione sull'istanza replica. Termine di ricerca
pg_stat_activity
per verificare che sia in esecuzione un processo pglogical apply
. Se
non è necessario, controlla i log sul nodo di destinazione. Se vedi il messaggio worker
registration failed,
, puoi aumentare l'impostazione max_worker_processes
.
Quindi, assicurati che sia stato creato uno slot di replica nell'istanza principale. Il giorno
di replica, la riga in pglogical.subscription
contiene il nome del
slot che la sottoscrizione cerca di creare, e sull'istanza principale puoi eseguire query
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 era impostato su logical
. Per risolvere il problema, imposta cloudsql.logical_decoding=on
sull'istanza principale se si tratta di un'istanza Cloud SQL.
In alternativa, se l'istanza è esterna, imposta wal_level=logical
.
In caso contrario, potresti visualizzare ERROR: all replication slots are in use
, insieme al utile HINT: Free one or increase max_replication_slots
.
Configurare la replica logica nativa di PostgreSQL
A partire da PostgreSQL 10, PostgreSQL supporta la replica logica integrata nativa. Per configurare la replica logica nativa, la decodifica logica deve essere abilitata 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 l'istanza PostgreSQL. Questa pagina fornisce i passaggi per una proof of concept. Se riscontri problemi mentre segui i passaggi di queste sezioni, vedi Risolvi i problemi di pglogical. Per ulteriori informazioni, consulta la sezione Replicazione logica nella documentazione di PostgreSQL.
Crea una tabella con i dati da replicare
La replica logica PostgreSQL nativa supporta un intero database o solo singole tabelle. Ad esempio, creeremo una tabella fittizia nell'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 nell'istanza replica.
Creare una pubblicazione nell'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 nell'istanza replica
Ecco un esempio di creazione di un abbonamento nell'istanza replica:
CREATE SUBSCRIPTION sub
CONNECTION 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=replicapassword'
PUBLICATION pub;
La creazione della sottoscrizione sull'istanza di replica richiede
Ruolo cloudsqlsuperuser
. Dopo aver creato l'abbonamento, esegui una query sulla tabella native_test
per verificare che i dati siano visualizzati nell'istanza della replica.
In quella principale, puoi eseguire una query sulla tabella pg_replication_slots
per visualizzare
nello 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 sul primario. In caso contrario, i segmenti WAL continuano ad accumularsi nell'istanza principale.
Limitazioni sulla replica logica PostgreSQL nativa
Accesso alla colonna subconninfo
dell'
pg_subscription
tabella di sistema non disponibile.
L'esecuzione di pg_dump
non può scaricare le informazioni sugli abbonamenti perché controlla se l'utente che si connette dispone delle autorizzazioni di superutente.
Ricevi modifiche WAL decodificate per Change Data Capture (CDC)
Come caso d'uso alternativo per la tecnologia CDC, la decodifica logica può trasmettere le modifiche da un'istanza PostgreSQL. Lo strumento standard usato per farlo è pg_recvlogical.
Puoi utilizzare lo strumento pg_recvlogical
per creare uno slot di replica e per eseguire lo streaming delle modifiche monitorate da questo slot. Il formato delle modifiche è determinato dal tuo
il plug-in di decodifica. Puoi utilizzare:
wal2json, per trasmettere in streaming le modifiche nel formato JSON
test_decoding, per trasmettere le modifiche in flusso formattate con un formato di testo semplice
Crea uno 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 -
In un altro terminale Cloud Shell, connettiti al tuo database ed esegui i seguenti 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 di decodifica 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 di decodifica 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 in esecuzione:
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 alla replica logica e di decodifica di Cloud SQL per PostgreSQL.
Quando ripristini un'istanza che ha
cloudsql.logical_decoding
ocloudsql.enable_pglogical
attivato e attualmente agisce come publisher Per la replica logica, devi disabilitare la replica in tutte le istanze di destinazione per prima cosa. In caso contrario, il ripristino nell'istanza non va a buon fine e viene visualizzato un errore, ma al momento i dettagli dell'errore non sono visibili.Quando ripristini il backup di un'istanza che aveva
cloudsql.logical_decoding
ocloudsql.enable_pglogical
abilitati (al momento del backup) e lo stanno ripristinando in una nuova istanza, lo stato di replica non viene ripristinato la nuova istanza. Successivamente, devi riconfigurare manualmente la replica.In un'istanza Cloud SQL con una o più repliche di lettura di Cloud SQL (utilizzando replica fisica), se abiliti
cloudsql.logical_decoding
ocloudsql.enable_pglogical
, questi flag sono abilitati anche nella cartella replica.Le istanze di replica di lettura 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 garantire che possa sostituire quella principale se e quando promosso.
L'attivazione di
cloudsql.logical_decoding
ocloudsql.enable_pglogical
sull'istanza principale comporta l'attivazione degli indicatori su tutte le repliche di lettura, con conseguente riavvio delle repliche principali e di lettura in rapida successione. Per evitare questa situazione e controllare quando viene riavviata ciascuna istanza, puoi (1) impostare i flag su ogni replica di lettura in sequenza e solo successivamente (2) impostare i flag sull'istanza principale.La disattivazione di
cloudsql.logical_decoding
ocloudsql.enable_pglogical
nell'istanza principale non comporta la disattivazione degli indicatori su tutte le repliche di lettura. Per disabilitare i flag tra le istanze, devi eseguire la invertendo i passaggi descritti sopra: (1) disabilita i flag sull'istanza principale e poi (2) disabilitare i flag su ogni replica di lettura, a loro volta.