이 가이드는 논리적 복제를 사용하여 외부 Postgres 데이터베이스에서 Lakebase로 데이터를 복제하는 방법을 보여줍니다. Lakebase는 구독자 역할을 합니다: 소스 데이터베이스에 직접 연결해 기존 데이터를 복사하고, 컷오버할 때까지 계속되는 변경 사항을 적용합니다. 이를 이용해 Amazon Aurora PostgreSQL이나 Amazon RDS for PostgreSQL 같은 다른 Postgres 제공업체나 자체 관리 Postgres 서버에서 데이터베이스를 Lakebase로 마이그레이션할 수 있습니다.
필수 구성 요소
Lakebase가 접근할 수 있는 공개 엔드포인트를 가진 소스 Postgres 데이터베이스입니다.
소스 데이터베이스의 슈퍼유저 접근 권한이나 관리형 Postgres 서비스의 관리자 계정 설정
wal_level, 속성으로REPLICATION역할 생성, 게시 생성 모두 이 수준의 접근 권한이 필요합니다.목표 데이터베이스를 위한 Lakebase 프로젝트입니다.
구독을 생성하기 위한 Lakebase Postgres 역할: 역할의 구성원(예:
databricks_superuser) 또는 대상 데이터베이스에서 미리 정의된pg_create_subscription역할과CREATE권한을 모두 부여받은 역할.pg_create_subscription역할만으로는 충분하지 않아요.CREATE가 데이터베이스에 없으면CREATE SUBSCRIPTION가permission denied for database와 함께 실패합니다.databricks_superuser을 다른 역할에 부여하려면 Postgres 역할 만들기 또는 역할 업데이트를 참조하세요.GRANT pg_create_subscription TO <role_name>; GRANT CREATE ON DATABASE <database_name> TO <role_name>;
Lakebase에서는 논리적 복제가 지원됩니다. 프로젝트별로 이를 켜는 단계는 없습니다. 구독자인 Lakebase는 wal_level 변경이 필요하지 않습니다. 소스 퍼블리셔에만 wal_level = logical이 필요합니다.
소스 데이터베이스를 준비하세요
소스 Postgres 데이터베이스에서 WAL(Write-Ahead Log)을 logical로 설정하고 복제를 위한 용량이 있는지 확인하세요. 다음 예시는 자가 관리 Postgres에 대한 것입니다. 관리형 Postgres 제공업체는 다른 설정을 사용할 수 있습니다:
ALTER SYSTEM SET wal_level = logical;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
변경 사항이 적용되도록 wal_level 소스 데이터베이스를 재시작하세요. 관리형 서비스에서는 제공자의 매개변수 그룹이나 플래그를 사용하여 logical를 wal_level로 설정하세요. 예를 들어, Amazon Aurora PostgreSQL에서 1를 DB 클러스터 매개변수 그룹에서 rds.logical_replication로 설정하고 클러스터를 재부팅하세요. Amazon RDS에서 PostgreSQL용으로, DB 매개변수 그룹에 같은 매개변수를 설정하고 인스턴스를 재부팅하세요.
복제용 역할을 생성하고 복제할 테이블에 대한 읽기 권한을 부여하세요:
CREATE ROLE replication_user WITH REPLICATION LOGIN PASSWORD '<password>';
GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
이 CREATE ROLE 명령문은 자체 관리형 Postgres 서버에서 작성된 대로 작동합니다. 일부 관리형 Postgres 제공자는 REPLICATION 속성을 직접 허용하지 않고, 대신 제공자 전용 역할을 통해 복제 권한을 부여합니다. 소스가 관리형 서비스에서 실행된다면, 제공자의 문서를 따라 역할에 복제 권한을 부여한 후, 이후 단계에서 replication_user 대신 그 역할을 사용하세요. 예를 들어, Amazon Aurora PostgreSQL과 Amazon RDS for PostgreSQL에서 WITH REPLICATION 없이 역할을 생성한 후 GRANT rds_replication TO replication_user를 실행하세요.
복제하려는 테이블에 대해 게시를 만드세요. 각 테이블은 반드시 PRIMARY KEY 또는 replica identity가 설정되어 있어야 합니다. Postgres 문서의 복제 신원 을 참조하세요.
CREATE PUBLICATION my_publication FOR TABLE orders, customers;
레이크베이스가 소스에 도달하도록 허용하세요
구독자로서 Lakebase가 귀하의 소스 데이터베이스로 아웃바운드로 연결합니다. 이 아웃바운드 연결은 계정의 네트워크 정책이 적용되며, 서버리스 워크로드가 도달할 수 있는 인터넷 목적지를 제어합니다. Lakebase 프로젝트 설정이나 데이터베이스 내 역할에 의해 제어되지 않습니다.
변경 여부는 귀하의 계정이 네트워크 정책을 적용하는지 여부에 따라 다릅니다:
- 활성 네트워크 정책 없음: Lakebase는 접근 가능한 공용 엔드포인트가 있는 모든 퍼블리셔에 도달할 수 있습니다. 변경이 필요하지 않습니다.
- 활성 네트워크 정책: 계정 네트워크 정책에서 소스 데이터베이스의 호스트를 허용된 인터넷 대상에 추가하세요. 네트워크 정책 관리를 참조하세요. 호스트가 허용되지 않으면, 구독을 생성할 때 구독이 거부됩니다. 문제 해결을 참조하세요.
가입자 연결에는 Private Link가 지원되지 않습니다. 소스 데이터베이스는 공개 엔드포인트를 통해 접근 가능해야 합니다.
대상 테이블 만들기
논리적 복제는 스키마가 아니라 데이터를 복제합니다. 복제를 시작하기 전에 대상 Lakebase 데이터베이스에서 소스와 동일한 이름과 열로 테이블을 생성하세요. 수동으로 만들 수도 있고, 소스에서 스키마를 덤프해서 Lakebase에 불러올 수도 있습니다. 스키마만 덤프를 참조하세요.
대상 테이블을 비어 있는 상태로 생성하세요. 초기 테이블 복사는 대상 테이블에 이미 행이 포함된 경우 중복 키나 제약 위반으로 실패합니다.
구독을 생성하세요
구독을 생성할 수 있는 역할로 대상 Lakebase 데이터베이스에 연결한 후(Prerequisites 참조), 원본 퍼블리셔에 연결되는 구독을 생성하세요:
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<source-host> port=5432 dbname=<source-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;
구독을 생성하면 원본 퍼블리셔에 복제 슬롯을 시작하고 기존 행을 복사한 후 진행 중인 변경 사항을 스트리밍합니다.
Warning
복제 슬롯은 Lakebase가 변경 사항을 수신했음을 확인할 때까지 소스 데이터베이스가 작성 기록(WAL)을 유지하도록 합니다. 구독이 비활성화되거나 연결이 끊겼거나 오류가 발생하여 변경 사항을 소비하지 않으면, WAL은 소스 위에 무제한으로 누적됩니다. 프로덕션 소스에서는 저장 공간이 가득 차서 장애가 발생할 수 있습니다.
복제가 실행되는 동안, 슬롯이 소스에 얼마나 많은 WAL을 유지하는지 모니터링하세요:
SELECT slot_name, active,
pg_catalog.pg_size_pretty(pg_catalog.pg_wal_lsn_diff(pg_catalog.pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_catalog.pg_replication_slots;
자체 관리 소스의 위험을 줄이려면 슬롯이 보유할 수 있는 WAL의 양을 제한하도록 max_slot_wal_keep_size을 설정하세요. 슬롯이 한도를 초과하면 Postgres가 해당 슬롯을 무효화하고 구독은 다시 생성해야 합니다. 마이그레이션이 끝나면 바로 구독을 해지하세요.
복제 슬롯과 저장소를 참조하세요.
Note
Lakebase가 구독하면 소스 데이터베이스에 연결하고 복제 역할의 자격 증명을 해당 데이터베이스로 전송합니다.
sslmode=verify-full
sslrootcert=system을 사용하면 연결을 암호화하고 출처의 신원을 확인하여 중계된 자격 증명을 중간자 공격으로부터 보호합니다. 원본이 공개적으로 신뢰받는 인증 기관을 사용할 때 작동합니다. 더 약한 sslmode=require 방식은 암호화하지만 출처를 검증하지는 않습니다. 사설 인증 기관을 사용하는 소스를 검증하는 것은 지원되지 않습니다.
복제 확인
목표 레이크베이스 데이터베이스에서 기존 행이 도착했는지 확인하세요:
SELECT COUNT(*) FROM orders;
소스에 행을 삽입하거나 업데이트한 후, 다시 타겟을 쿼리합니다. 변화는 몇 초 만에 Lakebase에 나타납니다.
모니터링 및 전환
초기 사본과 지속적인 지연을 추적하세요:
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;
초기 복사본이 완료되었는지 확인하려면 구독자에서 모니터 복제의 테이블별 동기화 상태 쿼리를 실행하고 모든 테이블에 Ready (fully live)가 표시될 때까지 기다립니다.
타겟이 따라잡으면 소스 쓰기를 멈추고, 타겟이 완전히 최신인지 확인한 뒤, 애플리케이션을 Lakebase 연결 세부사항으로 전환하세요.
논리적 복제는 시퀀스 값이나 ID 카운터를 복사하지 않습니다. Lakebase에서 쓰기를 재개하기 전에, 각 대상 시퀀스를 복제된 데이터와 일치하도록 재설정하지 않으면, 새로 SERIAL 또는 아이덴티티 컬럼에 삽입할 때 중복 기본 키가 생성될 수 있습니다:
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('orders', 'id'), (SELECT MAX(id) FROM orders));
애플리케이션이 Lakebase에서 실행되면 구독을 해지해 원본에서 복제를 중단하세요. 소스에 접근할 수 있을 때, 구독을 삭제하면 소스에 있는 복제 슬롯도 제거됩니다. 구독 또는 게시물 삭제 항목을 참조하세요.
모니터링 및 정리에 대해서는 논리 복제 관리 및 모니터링을 참조하세요.
다음 단계
- 복제 관리: 구독 모니터링, 슬롯 관리, 문제 해결. 논리적 복제 관리 및 모니터링을 참조하세요.
- Lakebase의 스트림: Lakebase에서 변경 사항을 외부 Postgres 구독자에게 게시합니다. Lakebase에서 데이터를 복제하는 방법을 참조하세요.
- 방법 비교: Lakebase에서 데이터를 가져오고 내보내는 올바른 방법을 선택하세요. Lakebase로 데이터를 가져오고 내보내기를 참조하세요.