PostgreSQL용 AlloyDB 데이터베이스 구성

다음 섹션에서는 PostgreSQL용 AlloyDB 데이터베이스를 구성하는 방법을 설명합니다.

Datastream과 AlloyDB 간의 연결 설정

Datastream이 AlloyDB 인스턴스에 연결할 수 있도록 하려면 소비자 프로젝트에서 TCP 프록시를 설정해야 합니다. TCP 프록시 이미지가 모든 고객에게 공개적으로 제공됩니다.

  1. 프록시 컨테이너를 실행합니다.

    1. 소비자 프로젝트에서 Cloud Shell을 활성화합니다.
    2. 다음 스크립트를 실행하여 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
    

    다음을 바꿉니다.

    • 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
    
  2. 스크립트를 실행하여 다음 입력을 통해 TCP 프록시의 IP 주소를 출력합니다.

    gcloud compute instances describe VM_NAME \
      --format="yaml(networkInterfaces[].networkIP)" \
      --zone=REGION_ID
    

    다음을 바꿉니다.

    • VM_NAME: 가상 머신 이름입니다.
    • REGION_ID: TCP 프록시를 만든 리전입니다.
  3. (선택사항) 인그레스 트래픽을 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 구성

  1. AlloyDB 기본 인스턴스에 대해 논리적 디코딩을 사용 설정합니다. Google Cloud에서 alloydb.logical_decoding 플래그 값을 ON으로 설정합니다. 데이터베이스 플래그를 업데이트하는 방법에 대한 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.

  2. 동일한 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 데이터베이스 이름입니다.
  3. 다음 명령어를 실행하여 데이터베이스 사용자에게 복제 권한을 부여합니다.

    ALTER USER DB_USER WITH REPLICATION;
    
  4. 게시 만들기. 복제할 테이블에 대해서만 게시를 만드는 것이 좋습니다. 이렇게 하면 Datastream이 관련 데이터만 읽을 수 있고 데이터베이스와 Datastream의 부하가 줄어듭니다.

    CREATE PUBLICATION PUBLICATION_NAME
    FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;

    다음을 바꿉니다.

    • PUBLICATION_NAME: 게시의 이름입니다. Datastream 스트림 만들기 마법사에서 스트림을 만들 때 이 이름을 제공해야 합니다.
    • SCHEMA: 테이블이 포함된 스키마의 이름입니다.
    • TABLE: 복제할 테이블의 이름입니다.

    스키마의 모든 테이블에 대한 게시를 만들 수 있습니다. 이 방식을 사용하면 이후에 만들 테이블을 포함하여 지정된 스키마 목록에 있는 테이블의 변경사항을 복제할 수 있습니다.

    CREATE PUBLICATION PUBLICATION_NAME
    FOR TABLES IN SCHEMA1, SCHEMA2;

    데이터베이스의 모든 테이블에 대한 게시를 만들 수도 있습니다. 이 경우 소스 데이터베이스와 Datastream의 부하가 증가합니다.

    CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
    
  5. 다음 명령어를 실행하여 복제 슬롯을 만듭니다.

    SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
    

    다음을 바꿉니다.

    • REPLICATION_SLOT_NAME: 복제 슬롯 이름입니다. Datastream 스트림 만들기 마법사에서 스트림을 만들 때 이 이름을 제공해야 합니다.

Datastream 사용자 만들기

  1. Datastream 사용자를 만들려면 다음 PostgreSQL 명령어를 입력합니다.

    CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
    

    다음을 바꿉니다.

    • USER_NAME: 만들려는 Datastream 사용자의 이름입니다.
    • USER_PASSWORD: 만들려는 Datastream 사용자의 로그인 비밀번호입니다.
  2. 자신이 만든 사용자에게 다음 권한을 부여합니다.

    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: 권한을 부여하려는 사용자입니다.