Logische Dekodierung auf einem Lesereplikat - 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.

Logische Dekodierung auf einem Lesereplikat

RDS für PostgreSQL unterstützt die logische Replikation aus Standbys mit PostgreSQL 16.1. Auf diese Weise können Sie eine logische Dekodierung aus einem schreibgeschützten Standby erstellen, wodurch die Last für die primäre DB-Instance reduziert wird. Sie können eine höhere Verfügbarkeit für Ihre Anwendungen erreichen, die Daten zwischen mehreren Systemen synchronisieren müssen. Dieses Feature steigert die Leistung Ihres Data Warehouse und Ihrer Datenanalyse.

Außerdem sorgen Replikationsslots in einem bestimmten Standby dafür, dass dieses Standby zur primären Instance hochgestuft wird. Das bedeutet, dass im Falle eines Failovers einer primären DB-Instance oder der Hochstufung einer Standby-Instance zur neuen primären Instance die Replikationsslots bestehen bleiben und die ehemaligen Standby-Subscriber davon nicht betroffen sind.

So erstellen Sie eine logische Dekodierung auf einem Lesereplikat
  1. Logische Replikation aktivieren – Um eine logische Dekodierung auf einem Standby zu erstellen, müssen Sie die logische Replikation auf Ihrer Quell-DB-Instance und deren physischem Replikat aktivieren. Weitere Informationen finden Sie unter Konfiguration von Read Replicas mit PostgreSQL.

    • So aktivieren Sie die logische Replikation für eine neu erstellte DB-Instance von RDS für PostgreSQL – Erstellen Sie eine neue benutzerdefinierte DB-Parametergruppe und legen Sie den statischen Parameter rds.logical_replication auf 1 fest. Ordnen Sie dann diese DB-Parametergruppe der Quell-DB-Instance und ihrem physischen Lesereplikat zu. Weitere Informationen finden Sie unter Verknüpfen einer DB-Parametergruppe mit einer DB-Instance in Amazon RDS.

    • So aktivieren Sie die logische Replikation für eine bestehende DB-Instance von RDS für PostgreSQL – Ändern Sie die benutzerdefinierte DB-Parametergruppe der Quell-DB-Instance und ihres physischen Lesereplikats, um den statischen Parameter rds.logical_replication auf 1 festzulegen. Weitere Informationen finden Sie unter Ändern von Parametern in einer DB-Parametergruppe in Amazon RDS.

    Anmerkung

    Sie müssen die DB-Instances neu starten, um diese Parameteränderungen anzuwenden.

    Sie können die folgende Abfrage verwenden, um die Werte für wal_level und rds.logical_replication auf der Quell-DB-Instance und ihrem physischen Lesereplikat zu überprüfen.

    Postgres=>SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication'); name | setting -------------------------+--------- rds.logical_replication | on wal_level | logical (2 rows)
  2. Tabelle in der Quelldatenbank erstellen – Stellen Sie in Ihrer Quell-DB-Instance eine Verbindung zur Datenbank her. Weitere Informationen finden Sie unter Herstellen einer Verbindung zu einer DB-Instance, in der die PostgreSQL-Datenbank-Engine ausgeführt wird.

    Verwenden Sie die folgenden Abfragen, um eine Tabelle in Ihrer Quelldatenbank zu erstellen und Werte einzufügen:

    Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY); CREATE TABLE
    Postgres=>INSERT INTO LR_test VALUES (generate_series(1,10000)); INSERT 0 10000
  3. Publikation für die Quelltabelle erstellen – Verwenden Sie die folgende Abfrage, um eine Publikation für die Tabelle in der Quell-DB-Instance zu erstellen.

    Postgres=>CREATE PUBLICATION testpub FOR TABLE LR_test; CREATE PUBLICATION

    Verwenden Sie eine SELECT-Abfrage, um die Details der Publikation zu überprüfen, die sowohl auf der Quell-DB-Instance als auch auf der physischen Lesereplikat-Instance erstellt wurde.

    Postgres=>SELECT * from pg_publication; oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+---------+----------+--------------+-----------+-----------+-----------+-------------+------------ 16429 | testpub | 16413 | f | t | t | t | t | f (1 row)
  4. Abonnement aus einer logischen Replikat-Instance erstellen – Erstellen Sie eine weitere DB-Instance von RDS für PostgreSQL als logische Replikat-Instance. Stellen Sie sicher, dass die VPC richtig eingerichtet ist, damit diese logische Replikat-Instance auf die physische Lesereplikat-Instance zugreifen kann. Weitere Informationen finden Sie unter Amazon VPC und Amazon RDS. Wenn Ihre Quell-DB-Instance inaktiv ist, können Verbindungsprobleme auftreten, und die primäre DB-Instance sendet die Daten nicht in die Standby-Instance.

    Postgres=>CREATE SUBSCRIPTION testsub CONNECTION 'host=Physical replica host name port=port dbname=source_db_name user=user password=password' PUBLICATION testpub; NOTICE: created replication slot "testsub" on publisher CREATE SUBSCRIPTION
    Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY); CREATE TABLE

    Verwenden Sie eine SELECT-Abfrage, um die Details des Abonnements auf der logischen Replikat-Instance zu überprüfen.

    Postgres=>SELECT oid,subname,subenabled,subslotname,subpublications FROM pg_subscription; oid | subname | subenabled | subslotname | subpublications -------+---------+------------+-------------+----------------- 16429 | testsub | t | testsub | {testpub} (1 row) postgres=> select count(*) from LR_test; count ------- 10000 (1 row)
  5. Status des logischen Replikationsslots überprüfen – Sie können den physischen Replikationsslot nur auf Ihrer Quell-DB-Instance sehen.

    Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn ---------------------------------------------+-----------+--------------------- rds_us_west_2_db_dhqfsmo5wbbjqrn3m6b6ivdhu4 | physical | (1 row)

    Auf Ihrer Lesereplikat-Instance können Sie jedoch den logische Replikationsslot und die Änderungen am Wert confirmed_flush_lsn sehen, wenn die Anwendung aktiv logische Änderungen verarbeitet.

    Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn -----------+-----------+--------------------- testsub | logical | 0/500002F0 (1 row)
    Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn -----------+-----------+--------------------- testsub | logical | 0/5413F5C0 (1 row)