同步PostgreSQL的数据至Hologres时,您需要参考本文,在数据源中完成网络、白名单及权限等相关配置,为后续执行数据同步方案做好网络环境及账号权限的准备。

前提条件

配置数据源之前,请确保已完成以下规划与准备工作。
  • 准备数据源:已购买来源数据源PostgreSQL、去向数据源Hologres。
  • 资源规划与准备:已购买独享数据集成资源组,并完成资源配置。详情可参见资源规划与配置
  • 网络环境评估与规划:进行数据集成前,您需根据业务情况,打通数据源、独享数据集成资源组之间的网络,网络联通后参考本文进行交换机、白名单等网络环境下的访问配置。
    • 如果数据源和独享数据集成资源组均处于同地域的同一VPC网络中,数据源与资源组间的网络天然联通。
    • 如果数据源和独享数据集成资源组均处于不同的网络环境中,您需要通过VPN网关等方式,将数据源与资源组间的网络打通。

背景信息

将来源数据源的数据同步至去向数据源时,您需要保障数据源与DataWorks的数据集成资源组在网络上是联通的,且不存在账号权限的访问限制。
  • 网络白名单
    以下以使用同一VPC网络环境为例,您需要将数据集成资源组所在的VPC网段添加至白名单中,保障数据集成资源组可访问数据源。网络联通vpc
  • 账号权限

    您需要规划一个可访问数据源的账号,用于后续数据集成过程中访问数据源并进行数据提取、写入的同步操作。

  • 查看当前使用的数据库版本是否为DataWorks数据集成实时同步任务所支持的版本。

    目前仅支持配置PostgreSQL数据源为PostgreSQL1011121314版本。您可以通过如下语句查看PostgreSQL数据库的版本。

    show server_version

使用限制

数据集成实时同步任务存在如下约束与限制:
  • 数据集成对ADD COLUMN进行了特别支持:
    • 约束:ADD COLUMN时不能有ADD COLUMNDROP COLUMN或者其他DDL的组合。
      重要 ADD COLUMN时其他DROP COLUMN、 RNAME COLUMNALTER COLUMN的行为将使数据同步任务不能正常工作。
    • 限制:除了ADD COLUMN外,无法识别用户的其他DDL操作。
  • 不支持ALTER TABLE/CREATE TABLE
  • 不支持TEMPORARY表、UNLOGGED表和Hyper表复制,PostgreSQL数据库没有提供机制对这两种类型的表进行log解析订阅。
  • 不支持Sequences复制(serial/bigserial/identity)。
  • 不支持TRUNCATE操作。
  • 不支持大对象复制(Bytea)。
  • 不支持视图、物化视图、外部表复制。

操作步骤

  1. 配置白名单。
    将独享数据资源组所在的VPC网段添加至PostgreSQL的白名单中,操作如下:
    1. 查看并记录独享数据资源组所在的VPC网络。
      1. 登录DataWorks控制台
      2. 在左侧导航栏,单击资源组列表
      3. 独享资源组页签下,单击目标数据集成资源组后的查看信息
      4. 复制对话框中的EIP地址网段至数据库白名单。查看EIP地址和网段
      5. 独享资源组页签下,单击目标数据集成资源组后的网络设置
      6. 专有网络绑定页签,查看交换机网段并将其添加至数据库的白名单中。查看交换机网段
    2. 将上述步骤中记录的独享数据集成资源组的EIP地址和网段添加至PostgreSQL实例的白名单中。
  2. 创建账号并配置账号权限。
    您需要规划一个数据库的登录账号用于后续执行操作,此账号需要拥有数据库的REPLICATION、 LOGIN权限。
    说明

    实时同步只支持逻辑复制机制,逻辑复制使用发布和订阅模型,其中一个或多个订阅者订阅发布者节点上的一个或多个发布。订阅者从他们订阅的发布中提取数据。

    表的逻辑复制通常从对发布者数据库上的数据进行快照并将其复制到订阅者开始。完成后,发布者上的更改会实时发送给订阅者。

    1. 创建账号。
      操作详情请参见创建账号和数据库
    2. 配置权限。
      检查账号是否有replication权限。

      select userepl from pg_user where usename='xxx'

      预期返回结果为True,返回False则表示无权限,您可以通过如下语句进行授权。

      ALTER USER <user> REPLICATION;

  3. 检查是否支持备库。
    SELECT pg_is_in_recovery()

    目前仅支持主库,预期返回结果为False,返回True时表示是备库,实时同步不支持备库,需修改数据源配置信息为主库的信息,请参见配置PostgreSQL数据源

  4. 检查wal_level是否为logical
    show wal_level

    wal_level指定了wal_log的级别,预期返回结果为logical,否则不支持逻辑复制机制。

  5. 检查是否可以启动wal_sender进程。
    -- 查询 max_wal_senders
    show max_wal_senders;
    
    -- 查询 pg_stat_replication 数量
    select count(*) from pg_stat_replication

    max_wal_senders不为空,且max_wal_senders值大于pg_stat_replication数量时,则表示有空闲可用的wal_sender进程。PostgreSQL数据库会为同步数据程序启动wal_sender进程来给订阅者发送日志。

  6. 对于每一个需要同步的表,需要手动执行ALTER TABLE [tableName] REPLICA IDENTITY FULL语句进行授权,否则实时同步任务会报错。
  7. PostgreSQL实时同步任务启动后,会在数据库中自动创建slot、publications,slot名称格式为:di_slot_ + 解决方案ID ,publication名称格式为:di_pub_ + 解决方案ID,当实时同步任务停止或下线后,需手动删除,否则可能会导致PostgreSQL WAL 持续增长。