PostgreSQL용 AlloyDB 데이터베이스에서 BigQuery 또는 Cloud Storage와 같은 지원되는 대상으로 데이터를 복제하려면 먼저 Datastream용 소스 인스턴스를 준비해야 합니다. TCP 프록시 설정, 논리적 디코딩 사용 설정, 게시 및 복제 슬롯 만들기, Datastream 사용자 구성을 통해 지속적인 데이터베이스 변경사항을 캡처할 수 있습니다.
Datastream과 AlloyDB 간의 연결 설정
Datastream이 AlloyDB 인스턴스에 연결할 수 있도록 하려면 소비자 프로젝트에서 TCP 프록시를 설정해야 합니다. TCP 프록시 이미지가 모든 고객에게 공개적으로 제공됩니다.
프록시 컨테이너를 실행합니다.
- 소비자 프로젝트에서 Cloud Shell을 활성화합니다.
- 연결 문제를 방지하기 위해 다음 스크립트를 실행하여 TCP 프록시를 만들고 브리지 네트워킹을 사용 중지합니다.
gcloud compute instances create-with-container \ --zone=REGION_ID VM_NAME \ --container-image gcr.io/dms-images/tcp-proxy \ --tags=dms-tcp-proxy \ --container-env=SOURCE_CONFIG=ALLOYDB_IP:ALLOYDB_PORT \ --can-ip-forward \ --network=SOURCE_AND_DEST_VPC \ --machine-type=VM_TIER \ --metadata=startup-script='#! /bin/bash mkdir -p /etc/docker cat <<EOF > /etc/docker/daemon.json {"bridge":"none"} EOF systemctl restart docker'다음을 바꿉니다.
- REGION_ID: TCP 프록시를 만들려는 리전입니다.
- VM_NAME: 가상 머신의 이름입니다.
- ALLOYDB_IP: PostgreSQL용 AlloyDB 인스턴스의 IP 주소입니다.
- ALLOYDB_PORT: PostgreSQL용 AlloyDB 인스턴스의 포트 번호입니다.
- SOURCE_AND_DEST_VPC: 소스와 대상이 연결된 VPC 네트워크입니다.
- VM_TIER: 가상 머신 유형입니다.
다음은 업데이트된 파라미터가 있는 명령어 예시입니다.
gcloud compute instances create-with-container \ --zone=us-central1-c ds-tcp-proxy \ --container-image gcr.io/dms-images/tcp-proxy \ --tags=ds-tcp-proxy \ --container-env=SOURCE_CONFIG=10.16.0.5:5432 \ --can-ip-forward \ --network=default \ --machine-type=e2-micro --metadata=startup-script='#! /bin/bash mkdir -p /etc/docker cat <<EOF > /etc/docker/daemon.json {"bridge":"none"} EOF systemctl restart docker'스크립트를 실행하여 다음 입력을 통해 TCP 프록시의 IP 주소를 출력합니다.
gcloud compute instances describe VM_NAME \ --format="yaml(networkInterfaces[].networkIP)" \ --zone=REGION_ID다음을 바꿉니다.
- VM_NAME: 가상 머신 이름입니다.
- REGION_ID: TCP 프록시를 만든 리전입니다.
(선택사항) 인그레스 트래픽을 TCP 프록시로 제한하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --target-tags=dms-tcp-proxy \ --network=SOURCE_VPC \ --action=ALLOW \ --rules=tcp:ALLOYDB_PORT \ --source-ranges=IP_RANGE다음을 바꿉니다.
- FIREWALL_RULE_NAME: 방화벽 규칙 이름입니다.
- SOURCE_VPC: 소스가 연결된 VPC 네트워크입니다.
- ALLOYDB_PORT: PostgreSQL용 AlloyDB 인스턴스의 포트 번호입니다.
- IP_RANGE: 인그레스 트래픽을 제한하려는 IP 주소 범위입니다.
다음은 모든 IP 주소의 인그레스 트래픽을 허용하는 명령어 예시입니다.
gcloud compute firewall-rules create ds-proxy1 \ --direction=INGRESS \ --priority=1000 \ --target-tags=ds-tcp-proxy \ --network=default \ --action=ALLOW \ --rules=tcp:5432
복제를 위한 AlloyDB 구성
AlloyDB 기본 인스턴스에 대해 논리적 디코딩을 사용 설정합니다. 에서 Google Cloud 플래그의 값을
alloydb.logical_decodingON으로 설정합니다. 데이터베이스 플래그를 업데이트하는 방법에 대한 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.동일한 VPC의 모든 VM에서 다음 명령어를 실행하여 TCP 프록시 IP 주소를 사용해 AlloyDB 인스턴스에 연결합니다.
psql -h PROXY_IP \ -U DB_USER \ -d DB_NAME다음을 바꿉니다.
- PROXY_IP: TCP 프록시의 IP 주소입니다.
- DB_USER: AlloyDB 데이터베이스의 사용자 이름입니다.
- DB_NAME: AlloyDB 데이터베이스 이름입니다.
다음 명령어를 실행하여 데이터베이스 사용자에게 복제 권한을 부여합니다.
ALTER USER DB_USER WITH REPLICATION;
게시 만들기. 복제할 테이블에 대해서만 게시를 만드는 것이 좋습니다. 이렇게 하면 Datastream이 관련 데이터만 읽을 수 있고 데이터베이스와 Datastream의 부하가 줄어듭니다.
CREATE PUBLICATION PUBLICATION_NAME FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;
다음을 바꿉니다.
- PUBLICATION_NAME: 게시의 이름입니다. Datastream 스트림 만들기 마법사에서 스트림을 만들 때 이 이름을 제공해야 합니다.
- SCHEMA: 테이블이 포함된 스키마의 이름입니다.
- TABLE: 복제할 테이블의 이름입니다.
데이터베이스의 모든 테이블에 대한 게시를 만들 수도 있습니다. 이 경우 소스 데이터베이스와 Datastream의 부하가 증가합니다.
CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
다음 명령어를 실행하여 복제 슬롯을 만듭니다.
SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');다음을 바꿉니다.
- REPLICATION_SLOT_NAME: 복제 슬롯 이름입니다. Datastream 스트림 만들기 마법사에서 스트림을 만들 때 이 이름을 제공해야 합니다.
Datastream 사용자 만들기
Datastream 사용자를 만들려면 다음 PostgreSQL 명령어를 입력합니다.
CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
다음을 바꿉니다.
- USER_NAME: 만들려는 Datastream 사용자의 이름입니다.
- USER_PASSWORD: 만들려는 Datastream 사용자의 로그인 비밀번호입니다.
자신이 만든 사용자에게 다음 권한을 부여합니다.
GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME; GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME; ALTER DEFAULT PRIVILEGES IN SCHEMA SCHEMA_NAME GRANT SELECT ON TABLES TO USER_NAME;
다음을 바꿉니다.
- SCHEMA_NAME: 권한을 부여할 스키마의 이름입니다.
- USER_NAME: 권한을 부여하려는 사용자입니다.
다음 단계
- Datastream이 PostgreSQL 소스와 어떻게 작동하는지 자세히 알아보세요