Uso de la replicación lógica de PostgreSQL con clústeres de base de datos multi-AZ - Amazon Relational Database Service

Uso de la replicación lógica de PostgreSQL con clústeres de base de datos multi-AZ

Al utilizar la replicación lógica de PostgreSQL con su clúster de base de datos multi-AZ,  puede replicar y sincronizar tablas individuales en lugar de toda la instancia de base de datos. La replicación lógica usa un modelo de publicación y suscripción para replicar los cambios de una fuente a uno o más destinatarios. Para ello, usa registros de cambios del registro de escritura anticipada (WAL) de PostgreSQL. Para obtener más información, consulte Replicación lógica para Amazon RDS para PostgreSQL.

Al crear una nueva ranura de replicación lógica en la instancia de base de datos de escritor de un clúster de base de datos multi-AZ, la ranura se copia de forma asincrónica en cada instancia de base de datos de lector del clúster. Las ranuras de las instancias de base de datos de lector se sincronizan continuamente con las de la instancia de base de datos de escritor.

Se admite la replicación lógica para los clústeres de bases de datos multi-AZ que ejecutan RDS para PostgreSQL versión 14.8-R2 y versiones posteriores, y 15.3-R2 y versiones posteriores.

nota

Además de la característica de replicación lógica nativa de PostgreSQL, los clústeres de base de datos multi-AZ de RDS para PostgreSQL también admiten la extensión pglogical.

Para obtener información adicional sobre la replicación lógica de PostgreSQL, consulte Logical replication en la documentacion de PostgreSQL.

Requisitos previos

Para configurar la replicación lógica de PostgreSQL para clústeres de bases de datos multi-AZ, debe cumplir los siguientes requisitos previos.

Configuración de la replicación lógica

Para configurar la replicación lógica para un clúster de base de datos multi-AZ, habilite parámetros específicos dentro del grupo de parámetros del clúster de base de datos asociado y, a continuación, cree ranuras de replicación lógica.

nota

A partir de la versión 16 de PostgreSQL, puede utilizar instancias de base de datos de lector del clúster de base de datos multi-AZ para la replicación lógica.

Para configurar la replicación lógica para un clúster de base de datos multi-AZ de RDS para PostgreSQL
  1. Abra el grupo de parámetros de clúster de base de datos personalizado asociado a su clúster de base de datos multi-AZ de RDS para PostgreSQL.

  2. En el campo búsqueda Parámetros, busque el rds.logical_replicationparámetro estático  y establezca su valor en 1. Este cambio de parámetro puede aumentar la generación de WAL, por lo que debe habilitarlo solo cuando utilice ranuras lógicas.

  3. Como parte de este cambio, configure los siguientes parámetros del clúster de base de datos.

    • max_wal_senders

    • max_replication_slots

    • max_connections

    En función del uso previsto, es posible que también tenga que cambiar los valores de los siguientes parámetros. Sin embargo, en muchos casos, los valores predeterminados son suficientes.

    • max_logical_replication_workers

    • max_sync_workers_per_subscription

  4. Reinicie el clúster de base de datos multi-AZ para que los valores de los parámetros surtan efecto. Para obtener instrucciones, consulte Reinicio de un clúster de base de datos Multi-AZ e instancias de base de datos de lector.

  5. Cree una ranura de replicación lógica en la instancia de base de datos de escritor del clúster de base de datos multi-AZ, como se explica en Trabajo con ranuras de replicación lógica. Este proceso necesita que especifique un complemento de descodificación. Actualmente, RDS para PostgreSQL admite los complementos test_decoding, wal2json y pgoutput que se incluyen con PostgreSQL.

    La ranura se copia de forma asincrónica en cada instancia de base de datos de lector del clúster.

  6. Verifique el estado de la ranura en todas las instancias de base de datos de lector del clúster de base de datos multi-AZ. Para ello, inspeccione la vista pg_replication_slots de todas las instancias de base de datos de lector y asegúrese de que el estado confirmed_flush_lsn avanza a medida que la aplicación consume activamente los cambios lógicos.

    Los siguientes comandos muestran cómo inspeccionar el estado de replicación en las instancias de base de datos de lector.

    % 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)

Tras completar las tareas de replicación, detenga el proceso de replicación, elimine las ranuras de replicación y desactive la replicación lógica. Para desactivar la replicación lógica, modifique el grupo de parámetros del clúster de base de datos y establezca el valor rds.logical_replication de nuevo en 0. Reinicie el clúster para que el cambio de parámetro surta efecto.

Limitaciones y recomendaciones

Estas son las limitaciones y recomendaciones que se aplican a la replicación lógica con los clústeres de base de datos multi-AZ que ejecutan PostgreSQL 16:

  • Solo puede usar instancias de base de datos de escritura para crear o eliminar ranuras de replicación lógica. Por ejemplo, el comando CREATE SUBSCRIPTION debe usar el punto de conexión del escritor del clúster en la cadena de conexión del host.

  • Debe utilizar el punto de conexión del escritor del clúster durante cualquier sincronización o resincronización de tablas. Por ejemplo, puede utilizar los siguientes comandos para volver a sincronizar una tabla recién agregada.

    Postgres=>ALTER SUBSCRIPTION subscription-name CONNECTION host=writer-endpoint Postgres=>ALTER SUBSCRIPTION subscription-name REFRESH PUBLICATION
  • Debe esperar a que se complete la sincronización de las tablas antes de utilizar las instancias de base de datos de lector para la replicación lógica. Puede utilizar la tabla de catálogo pg_subscription_rel para supervisar la sincronización de la tabla. La sincronización de tablas finaliza cuando la columna srsubstate se establece en lista (r).

  • Recomendamos utilizar puntos de conexión de instancia para la conexión de replicación lógica una vez completada la sincronización inicial de las tablas. El siguiente comando reduce la carga en la instancia de base de datos de escritor al descargar la replicación a una de las instancias de base de datos de lector:

    Postgres=>ALTER SUBSCRITPION subscription-name CONNECTION host=reader-instance-endpoint

    No puede utilizar la misma ranura en más de una instancia de base de datos a la vez. Cuando dos o más aplicaciones replican los cambios lógicos de distintas instancias de base de datos en el clúster, es posible que algunos cambios se pierdan debido a una conmutación por error del clúster o a un problema de red. En estas situaciones, puede usar los puntos de conexión de la instancia para la replicación lógica en la cadena de conexión del host. En la otra aplicación que utiliza la misma configuración, se mostrará el siguiente mensaje de error:

    replication slot slot_name is already active for PID x providing immediate feedback.
  • Al usar la extensión pglogical, solo puede usar el punto de conexión del escritor de clústeres. La extensión tiene limitaciones conocidas que pueden crear ranuras de replicación lógica no utilizadas durante la sincronización de tablas. Las ranuras de replicación obsoletas reservan archivos de registro de escritura anticipada (WAL) y pueden provocar problemas de espacio en disco.