Wiederherstellung der logischen Replikation nach einem Hauptversions-Upgrade - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Wiederherstellung der logischen Replikation nach einem Hauptversions-Upgrade

Bevor Sie ein Hauptversions-Upgrade eines durchführen können, der als Publisher-Knoten für die logische Replikation eingerichtet ist, müssen Sie alle Replikationssteckplätze löschen, auch die, die nicht aktiv sind. Es wird empfohlen, Datenbanktransaktionen vorübergehend vom Herausgeberknoten umzuleiten, die Replikationsslots zu löschen, den zu aktualisieren und dann die Replikation erneut einzurichten und neu zu starten.

Die Replikationsslots werden nur auf dem Herausgeberknoten gehostet. Der Knoten RDS für SQL Postgre-Abonnenten in einem logischen Replikationsszenario hat keine Steckplätze zum Löschen, aber er kann nicht auf eine Hauptversion aktualisiert werden, solange er als Abonnentenknoten mit einem Abonnement für den Herausgeber vorgesehen ist. Bevor Sie den SQL Abonnentenknoten RDS für Postgre aktualisieren, löschen Sie das Abonnement und den Knoten. Weitere Informationen finden Sie unter Verwaltung logischer Replikationssteckplätze für for Postgre SQL.

Feststellen, dass die logische Replikation unterbrochen wurde

Sie können feststellen, ob der Replikationsprozess unterbrochen wurde, indem Sie entweder den Herausgeberknoten oder den Abonnentenknoten wie folgt abfragen.

So überprüfen Sie den Herausgeberknoten
  • Verwenden Sie psql, um eine Verbindung mit dem Herausgeberknoten herzustellen, und fragen Sie dann die pg_replication_slots-Funktion ab. Notieren Sie sich den Wert in der aktiven Spalte. Normalerweise wird t (true) zurückgegeben, was bedeutet, dass die Replikation aktiv ist. Wenn die Abfrage f (false) zurückgibt, ist dies ein Hinweis darauf, dass die Replikation an den Abonnenten gestoppt wurde.

    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)
So überprüfen Sie den Abonnentenknoten

Auf dem Abonnentenknoten können Sie den Status der Replikation auf drei verschiedene Arten überprüfen.

  • Suchen Sie in den SQL Postgre-Protokollen auf dem Abonnentenknoten nach Fehlermeldungen. Das Protokoll identifiziert Fehler mit Meldungen, die den Exit-Code 1 enthalten, wie im Folgenden dargestellt.

    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
  • Fragen Sie die pg_replication_origin-Funktion ab. Stellen Sie mithilfe von psql eine Verbindung mit der Datenbank auf dem Abonnentenknoten her und fragen Sie die pg_replication_origin-Funktion wie folgt ab.

    SELECT * FROM pg_replication_origin; roident | roname ---------+-------- (0 rows)

    Die leere Ergebnismenge bedeutet, dass die Replikation unterbrochen wurde. Die Ausgabe sollte normalerweise folgendermaßen aussehen.

    roident | roname ---------+---------------------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
  • Fragen Sie die pglogical.show_subscription_status-Funktion wie im folgenden Beispiel veranschaulicht ab.

    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)

    Diese Ausgabe zeigt, dass die Replikation unterbrochen wurde. Ihr Status lautet down. Normalerweise zeigt die Ausgabe den Status replicating an.

Wenn Ihr logischer Replikationsprozess unterbrochen wurde, können Sie die Replikation wiederherstellen, indem Sie die folgenden Schritte ausführen.

So stellen Sie die logische Replikation zwischen Herausgeber- und Abonnentenknoten wieder her

Um die Replikation wiederherzustellen, trennen Sie zuerst den Abonnenten vom Herausgeberknoten und richten dann das Abonnement erneut ein, wie in diesen Schritten beschrieben.

  1. Stellen Sie mit psql wie folgt eine Verbindung zum Abonnentenknoten her.

    psql --host=222222222222.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Deaktivieren Sie das Abonnement, indem Sie die pglogical.alter_subscription_disable-Funktion verwenden.

    SELECT pglogical.alter_subscription_disable('docs_lab_subscription',true); alter_subscription_disable ---------------------------- t (1 row)
  3. Rufen Sie die ID des Herausgeberknotens ab, indem Sie pg_replication_origin wie folgt abfragen.

    SELECT * FROM pg_replication_origin; roident | roname ---------+------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
  4. Verwenden Sie die Antwort aus dem vorherigen Schritt mit dem pg_replication_origin_create-Befehl, um die ID zuzuweisen, die vom Abonnement verwendet werden kann, wenn es erneut eingerichtet wurde.

    SELECT pg_replication_origin_create('pgl_labdb_docs_labcb4fa94_docs_lab3de412c'); pg_replication_origin_create ------------------------------ 1 (1 row)
  5. Aktivieren Sie das Abonnement, indem Sie seinen Namen mit dem Status true übergeben, wie im folgenden Beispiel veranschaulicht.

    SELECT pglogical.alter_subscription_enable('docs_lab_subscription',true); alter_subscription_enable --------------------------- t (1 row)

Prüfen Sie den Status des Knotens. Sein Status sollte replicating wie in diesem Beispiel gezeigt lauten.

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)

Überprüfen Sie den Status des Replikationsslots des Abonnenten auf dem Herausgeberknoten. Die active-Spalte des Slots sollte den Wert t (true) zurückgeben, was darauf hinweist, dass die Replikation wiederhergestellt wurde.

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)