읽기 복제본의 논리적 디코딩
PostgreSQL용 RDS는 PostgreSQL 16.1을 사용하여 스탠바이 상태에서의 논리적 복제를 지원합니다. 이를 통해 읽기 전용 예비 복제본에서 논리적 디코딩을 생성하여 기본 DB 인스턴스의 부하를 줄일 수 있습니다. 여러 시스템에서 데이터를 동기화해야 하는 애플리케이션의 가용성을 높일 수 있습니다. 이 기능은 데이터 웨어하우스 및 데이터 분석의 성능을 향상합니다.
또한 지정된 예비 복제본의 복제 슬롯은 해당 예비 복제본을 기본 스탠바이로 계속 승격시킵니다. 즉, 기본 DB 인스턴스가 장애 조치 처리되거나 예비 복제본을 새 기본 인스턴스로 승격하는 경우 복제 슬롯은 유지되며 이전 예비 복제본 구독자는 영향을 받지 않습니다.
읽기 전용 복제본에 논리적 디코딩을 생성하려면
-
논리적 복제 활성화 - 예비 복제본에서 논리적 디코딩을 생성하려면 소스 DB 인스턴스와 물리적 복제본에서 논리적 복제를 활성화해야 합니다. 자세한 내용은 PostgreSQL을 사용한 읽기 전용 복제본 구성 섹션을 참조하세요.
-
새로 만든 RDS for PostgreSQL DB 인스턴스의 논리적 복제를 활성화하려면 새 DB 사용자 지정 파라미터 그룹을 만들고 정적 파라미터
rds.logical_replication을1로 설정합니다. 그런 다음 이 DB 파라미터 그룹을 소스 DB 인스턴스 및 물리적 읽기 복제본과 연결합니다. 자세한 내용은 Amazon RDS의 DB 인스턴스에 DB 파라미터 그룹 연결 섹션을 참조하세요. -
PostgreSQL DB 인스턴스용 기존 RDS의 논리적 복제를 활성화하려면 소스 DB 인스턴스의 DB 사용자 지정 파라미터 그룹과 물리적 읽기 복제본을 수정하여 정적 파라미터
rds.logical_replication을1로 설정합니다. 자세한 내용은 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) -
-
소스 데이터베이스에 테이블 생성 - 소스 DB 인스턴스의 데이터베이스에 연결합니다. 자세한 내용은 PostgreSQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결 섹션을 참조하세요.
다음 쿼리를 사용하여 소스 데이터베이스에 테이블을 만들고 값을 삽입할 수 있습니다.
Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY);CREATE TABLEPostgres=>INSERT INTO LR_test VALUES (generate_series(1,10000));INSERT 0 10000 -
소스 테이블에 대한 발행물 생성 - 다음 쿼리를 사용하여 소스 DB 인스턴스의 테이블에 대한 발행물을 만들 수 있습니다.
Postgres=>CREATE PUBLICATION testpub FOR TABLE LR_test;CREATE PUBLICATIONSELECT 쿼리를 사용하여 소스 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) -
논리적 복제 인스턴스에서 구독 생성 - RDS for PostgreSQL DB 인스턴스를 논리적 복제 인스턴스로 하나 더 생성합니다. 이 논리적 복제본 인스턴스가 물리적 읽기 복제본 인스턴스에 액세스할 수 있도록 VPC가 올바르게 설정되어 있는지 확인하세요. 자세한 내용은 Amazon VPC 및 Amazon RDS 섹션을 참조하세요. 소스 DB 인스턴스가 유휴 상태인 경우 연결 문제가 발생할 수 있으며 기본 인스턴스는 데이터를 스탠바이 인스턴스로 전송하지 않습니다.
Postgres=>CREATE SUBSCRIPTION testsub CONNECTION 'host=Physical replica host nameport=portdbname=source_db_nameuser=userpassword=password' PUBLICATIONtestpub;NOTICE: created replication slot "testsub" on publisher CREATE SUBSCRIPTIONPostgres=>CREATE TABLE LR_test (a int PRIMARY KEY);CREATE TABLESELECT 쿼리를 사용하여 논리적 복제본 인스턴스의 구독 세부 정보를 확인할 수 있습니다.
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) -
논리적 복제 슬롯 상태 검사 - 소스 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)