Saltar al contenido

¿Cómo uso la replicación lógica para actualizar mi clúster de base de datos de Aurora compatible con PostgreSQL?

6 minutos de lectura
0

Quiero usar la replicación lógica para actualizar mi clúster de base de datos (DB) de la edición de Amazon Aurora compatible con PostgreSQL.

Descripción corta

Para usar la replicación lógica para actualizar las versiones de los clústeres de bases de datos de Aurora compatible con PostgreSQL, configura la replicación entre el clúster de origen original y el nuevo clúster de destino. Luego, migra gradualmente los cambios en los datos y cambia las aplicaciones al nuevo clúster.

Resolución

Preparar el clúster de origen

Sigue estos pasos:

  1. Establece el parámetro rds.logical_replication en 1 en tu grupo de parámetros de clúster de base de datos personalizado.

  2. Ejecuta la siguiente consulta para comprobar que wal_level es lógico y qye rds.logical_replication está activado:

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

    Resultado de ejemplo:

    name                    | setting
    ------------------------+---------
    rds.logical_replication | on
    wal_level              | logical
    (2 rows)
  3. Ejecuta el siguiente comando para crear una publicación en la base de datos:

    CREATE PUBLICATION my_publication FOR ALL TABLES;

    Nota: Sustituye my_publication por el nombre de tu publicación.

  4. Ejecuta la siguiente consulta para recuperar información de la publicación:

    SELECT * FROM pg_publication;

    Resultado de ejemplo:

     oid   | pubname        | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot
    -------+----------------+----------+--------------+-----------+-----------+-----------+-------------+------------
     20493 | my_publication | 16400    | t            | t         | t         | t         | t           | f
    (1 row)
  5. Ejecuta el siguiente comando para crear una ranura de replicación en la base de datos:

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

    Ejemplo de salida para pg_create_logical_replication_slot:

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

    Nota: Sustituye my_replication_slot por el nombre de tu ranura de replicación.

  6. Ejecuta el siguiente comando para obtener la lista de las ranuras de replicación que se encuentran actualmente en el clúster de base de datos y su estado:

    SELECT * FROM pg_replication_slots;

    Ejemplo de salida para 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)

Clonación del clúster de origen

Utiliza la consola de Amazon Relational Database Service (Amazon RDS) o la interfaz de la línea de comandos de AWS (AWS CLI) para crear un clon del clúster de base de datos de origen de Aurora compatible con PostgreSQL.

Preparación del clon para una actualización

Para obtener más información, consulta Preparación del clon para una actualización en Actualización de Aurora PostgreSQL a una nueva versión principal.

Actualización del clúster a una nueva versión

Para obtener más información, consulta Actualización del clúster a una nueva versión principal en Actualización de Aurora PostgreSQL a una nueva versión principal.

Preparación del clon para la replicación

Sigue estos pasos:

  1. Cuando el clon esté disponible tras la actualización, utiliza psql para conectarte al clúster y, a continuación, ejecuta el siguiente comando para crear la suscripción:

    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');

    Nota: Sustituye admin_user_name por el nombre de usuario del clúster de origen y admin_user_password por la contraseña del clúster de origen. Además, sustituye source_instance_URL por el punto de enlace del clúster de origen y database por el nombre de tu base de datos.

  2. Ejecuta la siguiente consulta para recuperar el origen de replicación que creaste:

    SELECT * FROM pg_replication_origin;

    Ejemplo de salida para pg_replication_origin:

     roident | roname
    ---------+----------
     1       | pg_32783
    (1 row)
  3. Ejecuta la siguiente consulta para recuperar información sobre la suscripción a la replicación lógica:

    SELECT * FROM pg_subscription;

    Ejemplo de salida para 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. Ejecuta el siguiente comando para especificar el punto de inicio en la secuencia de registro para la replicación:

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

    Nota: Sustituye roname por el identificador que devolvió la vista pg_replication_origin. Sustituye log_sequence_number por tu número de secuencia de registro.
    Resultado de ejemplo:

     pg_replication_origin_advance
    ------------------------------
    
    (1 row)
  5. Ejecuta el siguiente comando para activar la replicación lógica:

    ALTER SUBSCRIPTION my_subscription ENABLE;

    Nota: Sustituye my_subscription por el nombre de tu suscripción.
    Resultado de ejemplo:

    ALTER SUBSCRIPTION
  6. Ejecuta el siguiente comando para confirmar que la replicación funciona:

    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';

    Resultado de ejemplo:

         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. (Opcional) Ejecuta el siguiente comando para supervisar el retraso de la replicación:

    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';

    Resultado de ejemplo:

    -[ 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

    Nota: Cuando los valores anteriores llegan a 0, la réplica coincide con la instancia de base de datos de origen.

Realización de tareas posteriores a la actualización

Para obtener más información, consulta Realización de tareas posteriores a la actualización.

Información relacionada

¿Cómo uso la replicación lógica para replicar tablas entre mis instancias de base de datos de Amazon RDS para PostgreSQL?

Uso de la replicación lógica para replicar Amazon RDS para PostgreSQL administrado y Amazon Aurora para PostgreSQL autoadministrado

OFICIAL DE AWSActualizada hace 6 meses