Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Riconnessione della replica logica dopo un aggiornamento principale
Prima di poter eseguire un aggiornamento della versione principale di un cluster Aurora Postgre SQL DB RDS configurata come nodo publisher per la replica logica, è necessario eliminare tutti gli slot di replica, anche quelli non attivi. Si consiglia di deviare temporaneamente le transazioni del database dal nodo publisher, eliminare gli slot di replica, aggiornare il cluster Aurora Postgre DB, aggiornare l'istanza RDS per Postgre SQL DB e .
Gli slot di replica sono ospitati solo nel nodo publisher. Il nodo di SQL sottoscrizione Aurora Postgre in uno scenario di replica logica non ha slot da eliminare. Il processo di aggiornamento della versione SQL principale di Aurora Postgre supporta l'aggiornamento dell'abbonato a una nuova versione principale di Postgre indipendente dal nodo editore. SQL Tuttavia, il processo di aggiornamento interrompe il processo di replica e interferisce con la sincronizzazione dei dati tra il nodo editore e il nodo sottoscrittore. WAL È necessario riconnettere la replica logica tra publisher e subscriber dopo aver aggiornato il publisher, il subscriber o entrambi. Nella procedura seguente viene illustrato come determinare se la replica è stata interrotta e come risolvere il problema.
Determinazione della replica logica interrotta
È possibile determinare che il processo di replica è stato interrotto eseguendo una query sul nodo publisher o sul nodo subscriber, come indicato di seguito.
Per controllare il nodo publisher
-
Utilizza
psql
per connetterti al nodo publisher e quindi esegui la query sulla funzionepg_replication_slots
. Osserva il valore nella colonna attiva. Normalmente, la query restituiscet
(true) per indicare che la replica è attiva. Se restituiscef
(false), indica che la replica nel subscriber è stata interrotta.SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_labcb4fa94_docs_lab3de412c | pglogical_output | logical | f (1 row)
Per controllare il nodo subscriber
Nel nodo subscriber è possibile verificare lo stato della replica in tre modi diversi.
-
Esamina i SQL log di Postgre sul nodo sottoscrittore per trovare i messaggi di errore. Il log identifica gli errori nei messaggi che includono il codice di uscita 1, come illustrato di seguito.
2022-07-06 16:17:03 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 14610) exited with exit code 1 2022-07-06 16:19:44 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 21783) exited with exit code 1
-
Esegui la query sulla funzione
pg_replication_origin
. Connettiti al database sul nodo subscriber utilizzandopsql
ed esegui la query sulla funzionepg_replication_origin
, come indicato di seguito.SELECT * FROM pg_replication_origin;
roident | roname ---------+-------- (0 rows)
Se il set di risultati è vuoto, la replica è stata interrotta. Normalmente, viene restituito l'output riportato di seguito.
roident | roname ---------+---------------------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
-
Esegui la query sulla funzione
pglogical.show_subscription_status
come illustrato nell'esempio seguente.SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name ---====----------------+--------+------------------------------------- docs_lab_subscription | down | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
Questo output mostra che la replica è stata interrotta. Lo stato è
down
e normalmente l'output mostra lo statoreplicating
.
Se il processo di replica logica è stato interrotto, è possibile riconnettere la replica seguendo questi passaggi.
Per riconnettere la replica logica tra i nodi publisher e subscriber
Per riconnettere la replica, devi prima disconnettere il subscriber dal nodo publisher e quindi riconnettere la sottoscrizione, come descritto in questi passaggi.
-
Connettiti al nodo subscriber utilizzando
psql
, come indicato di seguito.psql --host=
222222222222
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
Disattiva la sottoscrizione utilizzando la funzione
pglogical.alter_subscription_disable
.SELECT pglogical.alter_subscription_disable('docs_lab_subscription',true);
alter_subscription_disable ---------------------------- t (1 row)
-
Ottieni l'identificatore del nodo publisher eseguendo la query su
pg_replication_origin
, come indicato di seguito.SELECT * FROM pg_replication_origin;
roident | roname ---------+------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
-
Utilizza la risposta restituita dal passaggio precedente con il comando
pg_replication_origin_create
per assegnare l'identificatore che può essere usato dalla sottoscrizione una volta riconnessa.SELECT pg_replication_origin_create('pgl_labdb_docs_labcb4fa94_docs_lab3de412c');
pg_replication_origin_create ------------------------------ 1 (1 row)
-
Attiva la sottoscrizione specificando il nome con lo stato
true
, come illustrato nell'esempio seguente.SELECT pglogical.alter_subscription_enable('docs_lab_subscription',true);
alter_subscription_enable --------------------------- t (1 row)
Controlla lo stato del nodo. Lo stato deve essere replicating
come mostrato nell'esempio.
SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name -------------------------------+-------------+------------------------------------- docs_lab_subscription | replicating | pgl_labdb_docs_lab98f517b_docs_lab3de412c (1 row)
Verifica lo stato dello slot di replica del subscriber sul nodo publisher. La colonna active
dello slot deve restituire t
(true) per indicare che la replica è stata riconnessa.
SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_lab98f517b_docs_lab3de412c | pglogical_output | logical | t (1 row)