配置 AlloyDB for PostgreSQL 数据库

以下各部分介绍了如何配置 AlloyDB for PostgreSQL 数据库。

在 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 \
      --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:AlloyDB for PostgreSQL 实例的 IP 地址。
    • ALLOYDB_PORT:AlloyDB for PostgreSQL 实例的端口号。
    • 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'
    
  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:AlloyDB for PostgreSQL 实例的端口号。
    • 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. 使用 TCP 代理 IP 地址连接到 AlloyDB 实例,方法是运行 从同一 VPC 上的任意虚拟机运行以下命令:

      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:您要向其授予权限的用户。