Direkt zum Inhalt

Wie verwende ich die logische Replikation, um meinen Aurora PostgreSQL-Compatible-DB-Cluster zu aktualisieren?

Lesedauer: 5 Minute
0

Ich möchte die logische Replikation verwenden, um meinen Amazon Aurora PostgreSQL-Compatible Edition-Datenbank (DB)-Cluster zu aktualisieren.

Kurzbeschreibung

Um Versionen für Aurora PostgreSQL-Compatible-DB-Cluster mithilfe der logischen Replikation zu aktualisieren, richte die Replikation zwischen dem ursprünglichen Quell-Cluster und dem neuen Ziel-Cluster ein. Migriere dann schrittweise die Datenänderungen und stelle die Anwendungen auf den neuen Cluster um.

Lösung

Den Quell-Cluster vorbereiten

Gehe wie folgt vor:

  1. Setze den Parameter rds.logical_replication in der benutzerdefinierten DB-Cluster-Parametergruppe auf 1.

  2. Führe die folgende Abfrage aus, um zu überprüfen, ob wal_level logical ist und rds.logical_replication auf on gesetzt ist:

    SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');

    Beispielausgabe:

    name                    | setting
    ------------------------+---------
    rds.logical_replication | on
    wal_level              | logical
    (2 rows)
  3. Führe den folgenden Befehl aus, um eine Veröffentlichung in der Datenbank zu erstellen:

    CREATE PUBLICATION my_publication FOR ALL TABLES;

    Hinweis: Ersetze my_publication durch deinen Veröffentlichungsnamen.

  4. Führe die folgende Abfrage aus, um Informationen aus der Veröffentlichung abzurufen:

    SELECT * FROM pg_publication;

    Beispielausgabe:

     oid   | pubname        | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot
    -------+----------------+----------+--------------+-----------+-----------+-----------+-------------+------------
     20493 | my_publication | 16400    | t            | t         | t         | t         | t           | f
    (1 row)
  5. Führe den folgenden Befehl aus, um einen Replikationsslot in der Datenbank zu erstellen:

    SELECT pg_create_logical_replication_slot('my_replication_slot', 'pgoutput');

    Beispielausgabe für pg_create_logical_replication_slot:

     pg_create_logical_replication_slot
    ------------------------------------
     (my_replication_slot,0/6EC7260)
    (1 row)

    Hinweis: Ersetze my_replication_slot durch deinen Replikationsslotnamen.

  6. Führe den folgenden Befehl aus, um die Liste der Replikationsslots, die sich derzeit im DB-Cluster befinden, und ihren Status abzurufen:

    SELECT * FROM pg_replication_slots;

    Beispielausgabe für pg_replication_slots:

     slot_name            | plugin   | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase
    ---------------------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+-----------
     my_replication_slot | pgoutput | logical   | 16401  | test     | f         | f      |            |      | 308479       | 0/6EC7208  | 0/6EC7260          | reserved   |               | f
    (1 row)

Den Quell-Cluster klonen

Verwende die Amazon Relational Database Service (Amazon RDS)-Konsole oder die AWS Command Line Interface (AWS CLI), um einen Klon des DB-Quell-Clusters von Aurora PostgreSQL-Compatible zu erstellen.

Den Klon für ein Upgrade vorbereiten

Weitere Informationen findest du unter So bereitest du den Klon für ein Upgrade vor unter Aurora PostgreSQL auf eine neue Hauptversion aktualisieren.

Den Cluster auf eine neue Version aktualisieren

Weitere Informationen findest du unter So aktualisierst du den Cluster auf eine neue Hauptversion unter Aurora PostgreSQL auf eine neue Hauptversion aktualisieren.

Den Klon für die Replikation vorbereiten

Gehe wie folgt vor:

  1. Wenn der Klon nach dem Upgrade verfügbar ist, verwende psql, um eine Verbindung zum Cluster herzustellen, und führe dann den folgenden Befehl aus, um das Abonnement zu erstellen:

    CREATE SUBSCRIPTION my_subscription
    CONNECTION 'postgres://admin_user_name:admin_user_password@source_instance_URL/database'
    PUBLICATION my_publication
    WITH (copy_data = false,
          create_slot = false,
          enabled = false,
          connect = true,
          slot_name = 'my_replication_slot');

    Hinweis: Ersetze admin_user_name durch deinen Quell-Cluster-Benutzernamen und admin_user_password durch dein Quell-Cluster-Passwort. Ersetze außerdem source_instance_URL durch deinen Quell-Cluster-Endpunkt und database durch deinen Datenbanknamen.

  2. Führe die folgende Abfrage aus, um den Replikationsursprung abzurufen, den du erstellt hast:

    SELECT * FROM pg_replication_origin;

    Beispielausgabe für pg_replication_origin:

     roident | roname
    ---------+----------
     1       | pg_32783
    (1 row)
  3. Führe die folgende Abfrage aus, um Informationen über das logische Replikationsabonnement abzurufen:

    SELECT * FROM pg_subscription;

    Beispielausgabe für pg_subscription:

     oid   | subdbid | subskiplsn | subname          | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequired | subrunasowner | subconninfo                                                                              | subslotname           | subsynccommit | subpublications    | suborigin
    -------+---------+------------+-----------------+----------+------------+-----------+-----------+------------------+-----------------+---------------------+---------------+------------------------------------------------------------------------------------------------+---------------------+---------------+------------------+-----------
     32783 | 16401   | 0/0        | my_subscription | 16400    | f          | f         | f         | d                | f               | t                   | f             | postgres://admin_user_name:admin_user_password@source_instance_URL/database                  | my_replication_slot   | off           | {my_publication}  | any
    (1 row)
  4. Führe den folgenden Befehl aus, um den Startpunkt in der Protokollsequenz für die Replikation anzugeben:

    SELECT pg_replication_origin_advance('roname', 'log_sequence_number');

    Hinweis: Ersetze roname durch den Bezeichner, den die Ansicht pg_replication_origin zurückgegeben hat. Ersetze log_sequence_number durch deine Protokollsequenznummer.
    Beispielausgabe:

     pg_replication_origin_advance
    ------------------------------
    
    (1 row)
  5. Führe den folgenden Befehl aus, um die logische Replikation zu aktivieren:

    ALTER SUBSCRIPTION my_subscription ENABLE;

    Hinweis: Ersetze my_subscription durch deinen Abonnementnamen.
    Beispielausgabe:

    ALTER SUBSCRIPTION
  6. Führe den folgenden Befehl aus, um dich zu vergewissern, dass die Replikation funktioniert:

    SELECT now() AS CURRENT_TIME,
           slot_name,
           active,
           active_pid,
           pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size,
           pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes
    FROM pg_replication_slots
    WHERE slot_type = 'logical';

    Beispielausgabe:

         current_time      |      slot_name       | active | active_pid | diff_size | diff_bytes
    ----------------------+---------------------+--------+------------+-----------+------------
     2024-01-20 10:30:45 | my_replication_slot | t      | 12345      | 16 MB     | 16777216
    (1 row)
  7. (Optional) Führe den folgenden Befehl aus, um die Replikationsverzögerung zu überwachen:

    SELECT now() AS CURRENT_TIME,
           slot_name,
           active,
           active_pid,
           pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size,
           pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes
    FROM pg_replication_slots
    WHERE slot_type = 'logical';

    Beispielausgabe:

    -[ RECORD 1 ]+------------------------------
    current_time | 2025-10-05 22:07:16.077928+00
    slot_name    | my_replication_slot
    active       | t
    active_pid   | 5392
    diff_size    | 0 bytes
    diff_bytes   | 0

    Hinweis: Wenn die vorherigen Werte 0 erreichen, entspricht das Replikat der Quell-DB-Instance.

Aufgaben nach dem Upgrade durchführen

Weitere Informationen findest du unter Aufgaben nach dem Upgrade durchführen.

Ähnliche Informationen

Wie verwende ich die logische Replikation, um Tabellen zwischen meinen Amazon RDS für PostgreSQL-DB-Instances zu replizieren?

Verwendung der logischen Replikation zur Replikation von verwaltetem Amazon RDS für PostgreSQL und Amazon Aurora auf selbstverwaltetes PostgreSQL

AWS OFFICIALAktualisiert vor 6 Monaten