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.
Einrichten der logischen PostgreSQL-Replikation mit DB-Clustern mit Multi-AZ für Amazon RDS
Durch die Verwendung der logischen PostgreSQL-Replikation mit Ihrem Multi-AZ-DB-Cluster können Sie einzelne Tabellen anstelle der gesamten Datenbank-Instance replizieren und synchronisieren. Für die logische Replikation wird ein Veröffentlichungs- und Abonnementmodell verwendet, um Änderungen aus einer Quelle an einen oder mehrere Empfänger zu replizieren. Dazu werden Änderungsdatensätze aus dem Write-Ahead-Protokoll (WAL) von PostgreSQL verwendet. Weitere Informationen finden Sie unter Ausführen der logischen Replikation für Amazon RDS für PostgreSQL.
Wenn Sie einen neuen Slot für die logische Replikation auf der Writer-DB-Instance eines Multi-AZ-DB-Clusters erstellen, wird der Slot asynchron in jede Reader-DB-Instance im Cluster kopiert. Die Slots auf den Reader-DB-Instances werden kontinuierlich mit den Slots auf der Writer-DB-Instance synchronisiert.
Die logische Replikation wird für Multi-AZ-DB-Cluster unterstützt, auf denen RDS für PostgreSQL Version 14.8-R2 und höher sowie 15.3-R2 und höher ausgeführt wird.
Anmerkung
Zusätzlich zu der nativen logischen Replikationsfunktion von PostgreSQL unterstützen Multi-AZ-DB-Cluster, auf denen RDS für PostgreSQL ausgeführt wird, auch die pglogical-Erweiterung.
Weitere Informationen über die logische Replikation in PostgreSQL finden Sie unter Logische Replikation
Voraussetzungen
Um die logische Replikation von PostgreSQL für Multi-AZ-DB-Cluster zu konfigurieren, müssen Sie die folgenden Voraussetzungen erfüllen.
-
Ihr Benutzerkonto muss Mitglied der
rds_superuser-Gruppe sein und überrds_superuser-Rechte verfügen. Weitere Informationen finden Sie unter Grundlegendes zu PostgreSQL-Rollen und -Berechtigungen. -
Ihr Multi-AZ-DB-Cluster muss einer benutzerdefinierten DB-Cluster-Parametergruppe zugeordnet sein, damit Sie die im folgenden Verfahren beschriebenen Parameterwerte konfigurieren können. Weitere Informationen finden Sie unter Arbeiten mit DB-Cluster-Parametergruppen für Multi-AZ-DB-Cluster.
Einrichten der logischen Replikation
Um eine logische Replikation für einen Multi-AZ-DB-Cluster einzurichten, aktivieren Sie bestimmte Parameter innerhalb der zugehörigen DB-Cluster-Parametergruppe und erstellen dann Slots für die logische Replikation.
Anmerkung
Ab PostgreSQL-Version 16 können Sie Reader-DB-Instances des DB-Clusters mit Multi-AZ für die logische Replikation verwenden.
So richten Sie eine logische Replikation für einen Multi-AZ-DB-Cluster von RDS für PostgreSQL ein
-
Öffnen Sie die benutzerdefinierte DB-Cluster-Parametergruppe, die Ihrem Multi-AZ-DB-Cluster von RDS für PostgreSQL zugeordnet ist.
Suchen Sie im Suchfeld Parameter nach dem statischen Parameter
rds.logical_replicationund legen Sie als Wert für den Parameter1fest. Diese Parameteränderung kann zu einer verstärkten WAL-Generierung führen. Aktivieren Sie sie daher nur, wenn Sie logische Slots verwenden.-
Konfigurieren Sie im Rahmen dieser Änderung die folgenden DB-Cluster-Parameter.
-
max_wal_senders -
max_replication_slots -
max_connections
Abhängig von Ihrer erwarteten Auslastung müssen Sie möglicherweise auch die Werte der folgenden Parameter ändern. In vielen Fällen sind die Standardwerte jedoch ausreichend.
-
max_logical_replication_workers -
max_sync_workers_per_subscription
-
-
Starten Sie den Multi-AZ-DB-Cluster neu, damit die Parameterwerte wirksam werden. Detaillierte Anweisungen finden Sie unter Neustarten von Multi-AZ-DB-Clustern und Reader-DB-Instances für Amazon RDS.
-
Erstellen Sie einen Slot für die logische Replikation auf der Writer-DB-Instance des Multi-AZ-DB-Clusters, wie unter Arbeiten mit logischen Replikations-Slots beschrieben. Für diesen Prozess ist es erforderlich, dass Sie ein Decodier-Plugin angeben. Derzeit unterstützt RDS für PostgreSQL die
test_decoding-,wal2json- undpgoutput-Plugins, die mit PostgreSQL geliefert werden.Der Slot wird asynchron in jede Reader-DB-Instance im Cluster kopiert.
-
Überprüfen Sie den Status des Slots auf allen Reader-DB-Instances des Multi-AZ-DB-Clusters. Überprüfen Sie hierfür die Ansicht
pg_replication_slotsauf allen Reader-DB-Instances und stellen Sie sicher, dass derconfirmed_flush_lsn-Status voranschreitet, während die Anwendung aktiv logische Änderungen verarbeitet.Die folgenden Befehle veranschaulichen, wie der Replikationsstatus auf den Reader-DB-Instances überprüft werden kann.
% psql -h test-postgres-instance-2.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700(1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628(1 row) % psql -h test-postgres-instance-3.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700(1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628(1 row)
Beenden Sie nach Abschluss Ihrer Replikationsaufgaben den Replikationsprozess, löschen Sie die Replikationsslots und deaktivieren Sie die logische Replikation. Um die logische Replikation zu deaktivieren, ändern Sie Ihre DB-Cluster-Parametergruppe und setzen Sie den Wert von rds.logical_replication auf 0 zurück. Starten Sie den Cluster neu, damit die Parameteränderung in Kraft tritt.
Einschränkungen und Empfehlungen
Die folgenden Einschränkungen und Empfehlungen gelten für die Verwendung der logischen Replikation mit DB-Clustern mit Multi-AZ, auf denen PostgreSQL-Version 16 ausgeführt wird:
-
Sie können nur Writer-DB-Instances verwenden, um logische Replikationsslots zu erstellen oder zu löschen. Beispielsweise muss der Befehl
CREATE SUBSCRIPTIONden Cluster-Writer-Endpunkt in der Host-Verbindungszeichenfolge verwenden. -
Sie müssen den Cluster-Writer-Endpunkt bei jeder Tabellensynchronisation oder erneuten Synchronisierung verwenden. Beispielsweise können Sie die folgenden Befehle verwenden, um eine neu hinzugefügte Tabelle erneut zu synchronisieren:
Postgres=>ALTER SUBSCRIPTIONsubscription-nameCONNECTION host=writer-endpointPostgres=>ALTER SUBSCRIPTIONsubscription-nameREFRESH PUBLICATION -
Sie müssen warten, bis die Tabellensynchronisation abgeschlossen ist, bevor Sie die Reader-DB-Instances für die logische Replikation verwenden können. Sie können die Katalogtabelle
pg_subscription_relverwenden, um die Tabellensynchronisation zu überwachen. Die Tabellensynchronisation ist abgeschlossen, wenn die Spaltesrsubstateauf „bereit“ (r) gesetzt ist. -
Es wird empfohlen, Instance-Endpunkte für die logische Replikationsverbindung zu verwenden, sobald die erste Tabellensynchronisation abgeschlossen ist. Der folgende Befehl reduziert die Belastung der Writer-DB-Instance, indem die Replikation auf eine der Reader-DB-Instances verlagert:
Postgres=>ALTER SUBSCRIPTIONsubscription-nameCONNECTION host=reader-instance-endpointSie können denselben Slot für mehr als eine DB-Instance gleichzeitig verwenden. Wenn zwei oder mehr Anwendungen logische Änderungen von verschiedenen DB-Instances im Cluster replizieren, können einige Änderungen aufgrund eines Cluster-Failovers oder eines Netzwerkproblems verloren gehen. In diesen Situationen können Sie Instance-Endpunkte für die logische Replikation in der Host-Verbindungszeichenfolge verwenden. Die andere Anwendung, die dieselbe Konfiguration verwendet, zeigt die folgende Fehlermeldung an:
replication slotslot_nameis already active for PIDxproviding immediate feedback. -
Wenn Sie die
pglogical-Erweiterung verwenden, können Sie nur den Cluster-Writer-Endpunkt verwenden. Die Erweiterung hat bekannte Einschränkungen, die dazu führen können, dass bei der Tabellensynchronisation ungenutzte logische Replikationsslots entstehen. Veraltete Replikationsslots reservieren Write-Ahead-Protokolldateien (WAL) und können zu Speicherplatzproblemen führen.