Riconnessione della replica logica dopo un aggiornamento principale - Amazon Aurora

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 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)