Riconnessione della replica logica dopo un aggiornamento principale - Amazon Relational Database Service

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 per un'istanza Postgre SQL DB 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 quindi ristabilire e riavviare la SQL replica.

Gli slot di replica sono ospitati solo nel nodo publisher. Il nodo di SQL sottoscrizione RDS per Postgre in uno scenario di replica logica non ha slot da abbandonare, ma non può essere aggiornato a una versione principale se è designato come nodo di sottoscrizione con un abbonamento all'editore. Prima di aggiornare il nodo di sottoscrizione RDS per Postgre, elimina l'abbonamento e SQL il nodo. Per ulteriori informazioni, consulta Gestione degli slot di replica logica per Postgre per Postgre SQL.

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 funzione pg_replication_slots. Osserva il valore nella colonna attiva. Normalmente, la query restituisce t (true) per indicare che la replica è attiva. Se restituisce f (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 utilizzando psql ed esegui la query sulla funzione pg_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 stato replicating.

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.

  1. 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
  2. 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)
  3. 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)
  4. 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)
  5. 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)