논리적 복제 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

논리적 복제

논리적 복제는 객체의 복제 ID와 변경 사항에 따라 데이터 객체와 변경 사항을 복제하는 방법입니다. 논리적 복제는 한 명 이상의 구독자가 게시자 노드에서 하나 이상의 게시를 구독하는 게시구독 모델을 사용합니다. 구독자는 구독하는 게시에서 데이터를 가져옵니다.

논리적 복제를 사용하면 데이터 복제와 보안을 모두 세부적으로 제어할 수 있습니다. 다음 사용 사례에서 논리적 복제를 사용할 수 있습니다.

  • PostgreSQL의 여러 메이저 버전 간 복제

  • 다른 플랫폼의 PostgreSQL 인스턴스 간 복제(예: Linux에서 Windows로)

아키텍처

다음 워크플로 단계는 논리적 복제 아키텍처의 작동 방식을 보여줍니다.

  1. 게시자 데이터베이스에서 데이터 스냅샷을 만들고 해당 데이터를 구독자 데이터베이스에 복사합니다.

  2. 게시자 데이터베이스의 변경 사항은 구독자에게 실시간으로 전송됩니다.

  3. 구독자는 게시자와 동일한 순서로 데이터를 적용하므로 단일 구독 내 게시에 대해 트랜잭션 일관성이 보장됩니다.

게시는 기본 인스턴스(게시자)에서 정의할 수 있습니다. 게시는 하나 이상의 데이터베이스 테이블에서 생성된 변경 사항 세트입니다. INSERT, UPDATE, DELETE 및 TRUNCATE 작업의 조합에서 변경 사항을 선택할 수 있습니다. 기본적으로 이러한 모든 변경 사항은 구독자 데이터베이스에 복제됩니다. 이는 바이트 단위의 복제에 정확한 블록 주소가 사용되는 물리적 복제와 대조적입니다.

구독자 측에서 업데이트 또는 삭제할 적절한 행을 식별할 수 있도록 게시된 테이블에 UPDATE 및 DELETE 작업을 복제하도록 구성된 REPLICA IDENTITY가 있어야 합니다. 대부분의 경우 복제본 ID는 프라이머리 키 또는 고유 키로 결정됩니다. 프라이머리 키가 없고 프라이머리 키를 생성할 수 없는 경우 복제본 ID를 full로 설정할 수 있습니다. 즉, 전체 행이 키가 됩니다. 이 설정은 비효율적이므로 최후의 수단으로 복제본 ID를 full로 설정하는 것이 좋습니다.

구독은 논리적 복제의 다운스트림 측입니다. 구독이 정의된 노드를 구독자라고 합니다. 구독은 다른 데이터베이스와 구독하려는 하나 개 이상의 게시 세트에 대한 연결을 정의합니다.

구성 설정

게시자 설정에 필요한 구성은 다음과 같습니다.

  • wal_levellogical로 설정합니다.

  • 연결이 예상되는 최소 구독 수와 테이블 동기화를 위한 일부 예약 슬롯을 수용하려면 max_replication_slots를 설정합니다.

  • max_replication_slots 및 물리적 복제본 수를 수용하려면 max_wal_senders를 설정합니다.

구독자 설정에 필요한 구성은 다음과 같습니다.

  • 구독자에게 추가하려는 최소 구독 수와 테이블 동기화를 위한 일부 예약 구독을 수용하려면 max_replication_slots를 설정합니다.

  • 최소 구독 수와 테이블 동기화를 위한 일부 예약 작업자를 수용하려면 max_logical_replication_workers를 설정합니다.

  • max_worker_processes를 (max_logical_replication_workers + 1) 이상으로 설정합니다.

각 구독은 하나의 복제 슬롯을 통해 변경 사항을 수신합니다.

다음 단계에서는 논리적 복제를 수행하는 방법을 보여줍니다.

  1. 소스 데이터베이스의 테이블 그룹(복제의 일부)에 대해 CREATE PUBLICATION 명령을 사용하여 게시자를 생성합니다.

  2. CREATE SUBSCRIPTION 명령을 사용하여 구독자를 생성한 다음 구독자를 생성할 때 게시 세부 정보를 제공합니다.

  3. 초기 데이터 로드는 소스 데이터베이스에서 대상 데이터베이스로 자동으로 시작됩니다.

  4. 복제 슬롯으로 캡처된 변경 데이터는 대상 데이터베이스에 복제됩니다.

  5. pg_stat_replication(카탈로그 테이블)을 사용하여 복제 상태를 확인합니다. pg_stat_replication_slots를 사용하여 복제 슬롯을 확인합니다.

자세한 내용은 AWS 데이터베이스 블로그의 Using logical replication to replicate managed Amazon RDS for PostgreSQL and Amazon Aurora to self-managed PostgreSQL 게시물을 참조하세요.

제한 사항

마이그레이션을 시작하기 전에 논리적 복제 방법에 대한 다음과 같은 제한 사항을 고려하는 것이 좋습니다.

  • 현재 논리적 복제에는 가장 많은 제한 사항과 기능 격차가 있습니다.

  • 논리적 복제는 데이터 정의 언어(DDL), 시퀀스 및 대규모 객체 작업을 복제할 수 없습니다. 잘라내기 작업(외부 키가 있는 테이블에 적용됨)은 동일한 구독에 관련 테이블을 포함해야 합니다.

논리적 복제에 대한 자세한 내용은 31.6. Restrictions(PostgreSQL 설명서)를 참조하세요.