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 Aurora SQL Postgre-DB-Clusters 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 Publisher-Knoten umzuleiten, die Replikationsslots zu löschen, den Aurora SQL Postgre-DB-Cluster zu aktualisieren, die RDS for SQL Postgre-DB-Instance Replikation erneut einzurichten und neu zu starten.
Die Replikationsslots werden nur auf dem Herausgeberknoten gehostet. Der Aurora SQL Postgre-Abonnentenknoten in einem logischen Replikationsszenario hat keine Steckplätze, die gelöscht werden könnten. Der Upgrade-Prozess für die SQL Hauptversion von Aurora Postgre unterstützt das Upgrade des Abonnenten auf eine neue Hauptversion von Postgre SQL unabhängig vom Herausgeberknoten. Der Upgrade-Prozess unterbricht jedoch den Replikationsprozess und beeinträchtigt die Synchronisation von WAL Daten zwischen Herausgeberknoten und Abonnentenknoten. Sie müssen die logische Replikation zwischen Herausgeber und Abonnent wiederherstellen, nachdem Sie den Herausgeber, den Abonnenten oder beide aktualisiert haben. Im folgenden Verfahren wird gezeigt, wie Sie feststellen, ob die Replikation unterbrochen wurde, und wie Sie das Problem beheben.
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 diepg_replication_slots
-Funktion ab. Notieren Sie sich den Wert in der aktiven Spalte. Normalerweise wirdt
(true) zurückgegeben, was bedeutet, dass die Replikation aktiv ist. Wenn die Abfragef
(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 vonpsql
eine Verbindung mit der Datenbank auf dem Abonnentenknoten her und fragen Sie diepg_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 Statusreplicating
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.
-
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
-
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)
-
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)
-
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)
-
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)