Lakebase에서 데이터를 복제하기

이 가이드는 Lakebase 데이터베이스에서 외부 Postgres 구독자에게 논리적 복제를 사용해 변경 사항을 게시하는 방법을 보여줍니다. Lakebase는 퍼블리셔 역할을 하며, 퍼블리케이션을 정의하고 외부 구독자가 접속해 변경 사항을 받습니다.

필수 구성 요소

  • 게시할 데이터베이스가 있고 게시하려는 테이블이 포함된 Lakebase 프로젝트입니다.
  • 프로젝트 소유자의 역할처럼 출판물을 만드는 역할의 구성원 databricks_superuser 인 Lakebase Postgres 역할. 다른 역할에 부여 databricks_superuser 하려면 ' 게시물 생성' 또는 '역할 업데이트'를 참조하세요. 이 역할은 가입자가 사용하는 역할이 아니라 당신이 연결할 때 사용하는 역할입니다. 첫 단계에서 구독자의 복제 역할을 생성하세요.
  • 프로젝트에서 암호 기반 연결이 활성화되어 있습니다. 구독자는 네이티브 Postgres 비밀번호 역할로 연결되며, 새 프로젝트에서는 기본적으로 비밀번호 연결이 비활성화됩니다. 암호 연결 관리를 참조하세요.
  • 구독자 역할을 할 외부 Postgres 데이터베이스. 가입자는 다른 지역의 Lakebase 데이터베이스일 수도 있습니다. 동일 지역 내 Lakebase 데이터베이스 간 복제는 지원되지 않습니다.

논리 복제는 기본적으로 wal_level = logical에서 실행되는 Lakebase에서 지원되므로 프로젝트별로 게시를 켜는 단계는 없습니다.

복제 역할을 생성하세요

외부 구독자가 연결할 수 있는 전용 역할을 만드세요. 구독자는 Postgres 사용자 이름과 비밀번호로 연결되므로, OAuth 역할이 아닌 네이티브 Postgres 비밀번호 역할을 생성하세요. OAuth 역할은 단기간 사용 가능한 Azure Databricks 토큰으로 인증하며, 비밀번호 기반 구독 연결 문자열은 이를 사용할 수 없습니다. 역할은 반드시 그 REPLICATION 속성을 가져야 합니다. Lakebase 앱, CLI, API에서 생성하는 역할들은 databricks_superuser를 부여하든 하지 않든 이 속성을 가집니다. Lakebase 앱의 역할 추가>비밀번호 탭에서 역할 이름을 입력하세요. databricks_superuser을(를) 선택할 필요는 없습니다. 네이티브 Postgres 암호 역할 만들기를 참조하세요.

비밀번호를 직접 설정하려면 SQL로 역할을 생성하세요. 속성을 포함하세요 REPLICATION . SQL로 생성된 역할은 자동으로 속성을 받지 않으니까요:

CREATE ROLE replication_user WITH LOGIN REPLICATION PASSWORD '<password>';

복제한 테이블을 해당 역할이 소유하지 않는다면, 읽기 권한을 부여하세요:

GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO replication_user;

출판물 작성하기

databricks_superuser 역할의 멤버로 Lakebase 데이터베이스에 연결한 후, 복제하려는 테이블에 대한 publication을 생성하세요. 각 테이블은 반드시 PRIMARY KEY 또는 replica identity 설정을 가져야 합니다. Postgres 문서의 복제 신원 을 참조하세요.

CREATE PUBLICATION my_publication FOR TABLE orders, customers;

가입자가 연결될 수 있도록 허용하세요

외부 가입자는 Azure Databricks 엣지 프록시를 통해 Lakebase에 접속하며, 이 프록시는 작업 공간 IP 접근 목록을 적용합니다. 구독자의 IP 주소를 작업 공간 IP 접근 목록에 허용하여 Lakebase 데이터베이스에 접근할 수 있게 하세요. IP 접근 목록 관리를 참조하세요.

가입자 연결에는 Private Link가 지원되지 않습니다. 가입자는 공개된 Lakebase 엔드포인트를 통해 연결됩니다.

외부 데이터베이스로부터 구독하세요

외부 Postgres 데이터베이스에서 게시하는 테이블과 동일한 이름과 열로 대상 테이블을 생성하세요. 빈 상태로 생성하세요: 대상 테이블에 이미 행이 포함되어 있다면 중복 키나 제약 위반으로 초기 복사본이 실패합니다. 테이블을 수동으로 만들 수도 있고, Lakebase에서 스키마를 덤프해서 구독 시스템에 불러올 수도 있습니다. 스키마만 덤프를 참조하세요.

그 다음, 외부 데이터베이스에서 구독을 생성할 수 있는 역할로서, Lakebase에 연결되는 구독을 생성하세요:

CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<lakebase-host> port=5432 dbname=<lakebase-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;

가입자용 직접 연결을 사용하세요. 논리적 복제는 영구 연결이 필요하므로 <lakebase-host>는 -pooler 연결 풀러 호스트네임이 아니라 직접 엔드포인트 호스트네임이어야 합니다. 연결 풀링을 참조하세요.

Note

Lakebase는 모든 연결에 TLS를 적용하기 때문에 트래픽은 항상 암호화되어 별도의 조치가 필요하지 않습니다. 가장 강력한 보호를 원한다면, sslmode=verify-full로 연결하세요. 이 연결 방식은 Lakebase 서버 인증서를 시스템의 루트 스토어와 대조해 검증합니다. Lakebase는 공개적으로 신뢰받는 인증서를 사용하기 때문에 추가 인증서가 필요하지 않습니다. 더 약한 sslmode=require 것은 암호화하지만 서버를 검증하지 않습니다.

복제 확인

외부 구독자에서 기존 행이 도착했는지 확인하세요:

SELECT COUNT(*) FROM orders;

Lakebase에서 한 행을 삽입하거나 업데이트한 후, 다시 subscriber에 쿼리하세요. 변경 사항은 몇 초 내에 가입자 측에 나타납니다.

구독자의 구독 상태와 지연 상태를 확인하세요:

SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;

초기 복사본이 완료되었는지 확인하려면 구독자에서 모니터 복제의 테이블별 동기화 상태 쿼리를 실행하고 모든 테이블에 Ready (fully live)가 표시될 때까지 기다립니다.

가입자의 연결은 Lakebase 퍼블리셔에서 복제 슬롯을 유지합니다. 구독자가 활발히 복제하는 동안에는 Lakebase 컴퓨트가 0으로 확장되지 않습니다. 논리적 복제 및 scale to zero를 참조하세요. 구독자가 변경 사항 소비를 중단하면 슬롯이 비활성화되고 약 40시간 후에 Lakebase가 해당 슬롯을 삭제합니다. 비활성 슬롯 자동 제거를 참조하세요.

다음 단계