Decodificación lógica en una réplica de lectura - Amazon Relational Database Service

Decodificación lógica en una réplica de lectura

RDS para PostgreSQL admite la replicación lógica desde instancias en espera con PostgreSQL 16.1. Esto le permite crear una decodificación lógica desde una instancia en espera de solo lectura, lo que reduce la carga de la instancia de base de datos principal. Puede lograr una mayor disponibilidad para las aplicaciones que necesitan sincronizar datos en varios sistemas. Esta característica aumenta el rendimiento del almacenamiento de datos y del análisis de datos.

Además, las ranuras de replicación de una instancia en espera determinada mantienen la promoción de esa instancia en espera a una principal. Esto significa que, en caso de que se produzca una conmutación por error de una instancia de base de datos principal o de que se promueva una instancia en espera para ser la nueva instancia principal, las ranuras de replicación se mantendrán y los suscriptores en espera anteriores no se verán afectados.

Creación de una decodificación lógica en una réplica de lectura
  1. Active la replicación lógica: para crear una decodificación lógica en una instancia en espera, debe activar la replicación lógica en la instancia de base de datos de origen y en su réplica física. Para obtener más información, consulte Configuración de réplicas de lectura con PostgreSQL.

    • Para activar la replicación lógica de una instancia de base de datos de RDS para PostgreSQL recién creada: cree un nuevo grupo de parámetros personalizados de base de datos y establezca el parámetro estático rds.logical_replication en 1. A continuación, asocie este grupo de parámetros de base de datos a la instancia de base de datos de origen y a su réplica de lectura física. Para obtener más información, consulte Asociación de un grupo de parámetros de base de datos con una instancia de base de datos en Amazon RDS.

    • Para activar la replicación lógica de una instancia de base de datos de RDS para PostgreSQL existente: modifique el grupo de parámetros personalizados de base de datos de la instancia de base de datos de origen y su réplica de lectura física para establecer el parámetro estático rds.logical_replication en 1. Para obtener más información, consulte Modificación de los parámetros de un grupo de parámetros de base de datos en Amazon RDS.

    nota

    Debe reiniciar las instancias de base de datos para aplicar estos cambios en los parámetros.

    Puede utilizar la siguiente consulta para comprobar los valores de wal_level y rds.logical_replication en la instancia de base de datos de origen y su réplica de lectura física.

    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. Cree una tabla en la base de datos de origen: conéctese a la base de datos de su instancia de base de datos de origen. Para obtener más información, consulte Conexión a una instancia de base de datos que ejecuta el motor de base de datos de PostgreSQL.

    Utilice las siguientes consultas para crear una tabla en la base de datos de origen e insertar valores:

    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. Cree una publicación para la tabla de origen: utilice la siguiente consulta para crear una publicación para la tabla en la instancia de base de datos de origen.

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

    Utilice una consulta SELECT para comprobar los detalles de la publicación que se creó tanto en la instancia de base de datos de origen como en la instancia de réplica de lectura física.

    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. Cree una suscripción a partir de una instancia de réplica lógica: cree otra instancia de base de datos de RDS para PostgreSQL como instancia de réplica lógica. Asegúrese de que la VPC esté configurada correctamente para garantizar que esta instancia de réplica lógica pueda acceder a la instancia de réplica de lectura física. Para obtener más información, consulte VPC de Amazon y Amazon RDS. Si la instancia de base de datos de origen está inactiva, es posible que se produzcan problemas de conectividad y que la instancia principal no envíe los datos a la instancia en espera.

    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

    Utilice una consulta SELECT para comprobar los detalles de la suscripción en la instancia de la réplica lógica.

    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. Inspeccione el estado de la ranura de replicación lógica: solo puede ver la ranura de replicación física en la instancia de base de datos de origen.

    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)

    Sin embargo, en la instancia de la réplica de lectura, puede ver la ranura de replicación lógica y el valor de confirmed_flush_lsn cambia a medida que la aplicación consume activamente los cambios lógicos.

    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)