읽기 복제본의 논리적 디코딩 - Amazon Relational Database Service

읽기 복제본의 논리적 디코딩

PostgreSQL용 RDS는 PostgreSQL 16.1을 사용하여 스탠바이 상태에서의 논리적 복제를 지원합니다. 이를 통해 읽기 전용 예비 복제본에서 논리적 디코딩을 생성하여 기본 DB 인스턴스의 부하를 줄일 수 있습니다. 여러 시스템에서 데이터를 동기화해야 하는 애플리케이션의 가용성을 높일 수 있습니다. 이 기능은 데이터 웨어하우스 및 데이터 분석의 성능을 향상합니다.

또한 지정된 예비 복제본의 복제 슬롯은 해당 예비 복제본을 기본 스탠바이로 계속 승격시킵니다. 즉, 기본 DB 인스턴스가 장애 조치 처리되거나 예비 복제본을 새 기본 인스턴스로 승격하는 경우 복제 슬롯은 유지되며 이전 예비 복제본 구독자는 영향을 받지 않습니다.

읽기 전용 복제본에 논리적 디코딩을 생성하려면
  1. 논리적 복제 활성화 - 예비 복제본에서 논리적 디코딩을 생성하려면 소스 DB 인스턴스와 물리적 복제본에서 논리적 복제를 활성화해야 합니다. 자세한 내용은 PostgreSQL을 사용한 읽기 전용 복제본 구성 섹션을 참조하세요.

    • 새로 만든 RDS for PostgreSQL DB 인스턴스의 논리적 복제를 활성화하려면 새 DB 사용자 지정 파라미터 그룹을 만들고 정적 파라미터 rds.logical_replication1로 설정합니다. 그런 다음 이 DB 파라미터 그룹을 소스 DB 인스턴스 및 물리적 읽기 복제본과 연결합니다. 자세한 내용은 Amazon RDS의 DB 인스턴스에 DB 파라미터 그룹 연결 섹션을 참조하세요.

    • PostgreSQL DB 인스턴스용 기존 RDS의 논리적 복제를 활성화하려면 소스 DB 인스턴스의 DB 사용자 지정 파라미터 그룹과 물리적 읽기 복제본을 수정하여 정적 파라미터 rds.logical_replication1로 설정합니다. 자세한 내용은 Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정 섹션을 참조하세요.

    참고

    이러한 파라미터 변경 사항을 적용하려면 DB 인스턴스를 재부팅해야만 합니다.

    다음 쿼리를 사용하여 소스 DB 인스턴스의 rds.logical_replication와 물리적 읽기 전용 복제본의 값과 wal_level 값을 확인할 수 있습니다.

    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. 소스 데이터베이스에 테이블 생성 - 소스 DB 인스턴스의 데이터베이스에 연결합니다. 자세한 내용은 PostgreSQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결 섹션을 참조하세요.

    다음 쿼리를 사용하여 소스 데이터베이스에 테이블을 만들고 값을 삽입할 수 있습니다.

    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. 소스 테이블에 대한 발행물 생성 - 다음 쿼리를 사용하여 소스 DB 인스턴스의 테이블에 대한 발행물을 만들 수 있습니다.

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

    SELECT 쿼리를 사용하여 소스 DB 인스턴스와 물리적 읽기 복제본 인스턴스 모두에서 생성된 발행의 세부 정보를 확인할 수 있습니다.

    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. 논리적 복제 인스턴스에서 구독 생성 - RDS for PostgreSQL DB 인스턴스를 논리적 복제 인스턴스로 하나 더 생성합니다. 이 논리적 복제본 인스턴스가 물리적 읽기 복제본 인스턴스에 액세스할 수 있도록 VPC가 올바르게 설정되어 있는지 확인하세요. 자세한 내용은 Amazon VPC 및 Amazon RDS 섹션을 참조하세요. 소스 DB 인스턴스가 유휴 상태인 경우 연결 문제가 발생할 수 있으며 기본 인스턴스는 데이터를 스탠바이 인스턴스로 전송하지 않습니다.

    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

    SELECT 쿼리를 사용하여 논리적 복제본 인스턴스의 구독 세부 정보를 확인할 수 있습니다.

    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. 논리적 복제 슬롯 상태 검사 - 소스 DB 인스턴스의 물리적 복제 슬롯만 볼 수 있습니다.

    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)

    하지만 읽기 복제본 인스턴스에서는 애플리케이션이 논리적 변경을 적극적으로 소비함에 따라 논리적 복제 슬롯과 confirmed_flush_lsn 값이 변경되는 것을 확인할 수 있습니다.

    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)