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'istanza database RDS per PostgreSQL impostata come nodo publisher per la replica logica, è necessario rimuovere tutti gli slot di replica, anche quelli non attivi. Si consiglia di deviare temporaneamente le transazioni del database dal nodo publisher, rimuovere gli slot di replica, aggiornare l'istanza database RDS per PostgreSQL e quindi riconnettere e riavviare la replica.
Gli slot di replica sono ospitati solo nel nodo publisher. Il nodo subscriber RDS per PostgreSQL in uno scenario di replica logica non ha slot da rimuovere, ma non può essere aggiornato a una versione principale finché è designato come nodo subscriber con una sottoscrizione al publisher. Prima di aggiornare il nodo subscriber RDS per PostgreSQL, rimuovi la sottoscrizione e il nodo. Per ulteriori informazioni, consulta Gestione degli slot di replica logica per RDS per PostgreSQL.
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
psqlper 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 log di PostgreSQL sul nodo subscriber 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 utilizzandopsqled 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_statuscome 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 è
downe 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_createper 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)