Amazon RDS for PostgreSQL에 대한 논리적 복제 수행 - Amazon Relational Database Service

Amazon RDS for PostgreSQL에 대한 논리적 복제 수행

버전 10.4부터 RDS for PostgreSQL는 PostgreSQL 10에 도입된 게시 및 구독 SQL 구문을 지원합니다. 자세한 내용은 PostgreSQL의 논리적 복제 문서를 참조하세요.

참고

RDS for PostgreSQL은 PostgreSQL 10에 도입된 기본 PostgreSQL 논리적 복제 기능 외에 pglogical 확장도 지원합니다. 자세한 내용은 pglogical을 사용하여 인스턴스 간 데이터 동기화 단원을 참조하십시오.

다음에서 RDS for PostgreSQL DB 인스턴스의 논리적 복제 설정에 관한 정보를 확인할 수 있습니다.

논리적 복제 및 논리적 디코딩 이해

RDS for PostgreSQL은 PostgreSQL의 논리적 복제 슬롯을 사용하여 미리 쓰기 로그(WAL) 변경 사항 스트리밍을 지원합니다. 또한 논리적 디코딩 사용을 지원합니다. 인스턴스에 대한 논리적 복제 슬롯을 설정하고 해당 슬롯을 통해 데이터베이스 변경을 클라이언트(예: pg_recvlogical)에 스트리밍할 수 있습니다. 논리적 복제 슬롯은 데이터베이스 수준에서 생성되며 단일 데이터베이스에 대한 복제 연결을 지원합니다.

가장 일반적인 PostgreSQL 논리적 복제용 클라이언트는 Amazon EC2 인스턴스의 사용자 지정 관리형 호스트 또는 AWS Database Migration Service입니다. 논리적 복제 슬롯에는 스트림 수신기에 대한 정보가 없습니다. 또한 대상이 복제본 데이터베이스일 필요는 없습니다. 논리적 복제 슬롯을 설정하고 슬롯에서 데이터를 읽지 않을 경우 데이터가 DB 인스턴스의 스토리지에 기록되고 빠르게 가득 찰 수 있습니다.

Amazon RDS의 PostgreSQL 논리적 복제 및 논리적 디코딩은 파라미터, 복제 연결 유형 및 보안 역할에 의해 활성화됩니다. PostgreSQL DB 인스턴스의 데이터베이스에 대한 복제 연결을 설정할 수 있는 모든 클라이언트는 논리적 디코딩용 클라이언트가 될 수 있습니다.

RDS for PostgreSQL DB 인스턴스에 논리적 디코딩 사용 설정
  1. 사용 중인 사용자 계정에 다음과 같은 역할이 있는지 확인합니다.

    • 논리 복제를 설정할 수 있는 rds_superuser 역할

    • 논리적 슬롯을 관리하고 논리적 슬롯을 사용하여 데이터를 스트리밍할 수 있는 권한을 부여하는 rds_replication 역할

  2. rds.logical_replication 정적 파라미터를 1로 설정합니다. 이 파라미터를 적용하는 중에 wal_level, max_wal_senders, max_replication_slots, max_connections 파라미터 또한 설정합니다. 이러한 파라미터 변경은 WAL 생성을 강화하므로 논리적 슬롯을 사용할 때 rds.logical_replication 파라미터만 설정하면 됩니다.

  3. 정적 rds.logical_replication 파라미터가 적용되도록 DB 인스턴스를 재부팅합니다.

  4. 다음 섹션에 설명된 대로 논리적 복제 슬롯을 생성합니다. 이 프로세스에서는 디코딩 플러그인을 지정해야 합니다. 현재 RDS for PostgreSQL은 PostgreSQL과 함께 배송되는 test_decoding 및 wal2json 출력 플러그 인을 지원합니다.

PostgreSQL 논리적 디코딩에 대한 자세한 내용은 PostgreSQL 설명서를 참조하세요.

논리적 복제 슬롯 작업

SQL 명령을 사용하여 논리적 슬롯 작업을 수행할 수 있습니다. 예를 들어 다음 명령은 기본 PostgreSQL 출력 플러그인인 test_slot을 사용하여 test_decoding 논리적 슬롯을 생성합니다.

SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding'); slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)

논리적 슬롯 목록을 보려면 다음 명령을 사용합니다.

SELECT * FROM pg_replication_slots;

논리적 슬롯을 삭제하려면 다음 명령을 사용합니다.

SELECT pg_drop_replication_slot('test_slot'); pg_drop_replication_slot ----------------------- (1 row)

논리적 복제 슬롯 작업에 대한 더 많은 예제는 PostgreSQL 문서의 Logical Decoding Examples를 참조하세요.

논리적 복제 슬롯을 생성한 후 스트리밍을 시작할 수 있습니다. 다음 예에서는 스트리밍 복제 프로토콜을 통해 논리적 디코딩을 제어하는 방법을 보여 줍니다. 이 예에서는 PostgreSQL 배포판에 포함된 pg_recvlogical 프로그램을 사용합니다. 이렇게 하려면 복제 연결을 허용하도록 클라이언트 인증을 설정해야 합니다.

pg_recvlogical -d postgres --slot test_slot -U postgres --host -instance-name.111122223333.aws-region.rds.amazonaws.com -f - --start

pg_replication_origin_status 보기의 내용을 보려면 pg_show_replication_origin_status 함수를 쿼리합니다.

SELECT * FROM pg_show_replication_origin_status(); local_id | external_id | remote_lsn | local_lsn ----------+-------------+------------+----------- (0 rows)