同步PostgreSQL的数据至Hologres时,您需要参考本文,在数据源中完成网络、白名单及权限等相关配置,为后续执行数据同步方案做好网络环境及账号权限的准备。
前提条件
配置数据源之前,请确保已完成以下规划与准备工作。
- 准备数据源:已购买来源数据源PostgreSQL、去向数据源Hologres。
- 资源规划与准备:已购买独享数据集成资源组,并完成资源配置。详情可参见资源规划与配置。
- 网络环境评估与规划:进行数据集成前,您需根据业务情况,打通数据源、独享数据集成资源组之间的网络,网络联通后参考本文进行交换机、白名单等网络环境下的访问配置。
- 如果数据源和独享数据集成资源组均处于同地域的同一VPC网络中,数据源与资源组间的网络天然联通。
- 如果数据源和独享数据集成资源组均处于不同的网络环境中,您需要通过VPN网关等方式,将数据源与资源组间的网络打通。
背景信息
将来源数据源的数据同步至去向数据源时,您需要保障数据源与DataWorks的数据集成资源组在网络上是联通的,且不存在账号权限的访问限制。
- 网络白名单以下以使用同一VPC网络环境为例,您需要将数据集成资源组所在的VPC网段添加至白名单中,保障数据集成资源组可访问数据源。
- 账号权限
您需要规划一个可访问数据源的账号,用于后续数据集成过程中访问数据源并进行数据提取、写入的同步操作。
- 查看当前使用的数据库版本是否为DataWorks数据集成实时同步任务所支持的版本。
目前仅支持配置PostgreSQL数据源为PostgreSQL
10
、11
、12
、13
14
版本。您可以通过如下语句查看PostgreSQL数据库的版本。show server_version
使用限制
数据集成实时同步任务存在如下约束与限制:
- 数据集成对
ADD COLUMN
进行了特别支持:- 约束:
ADD COLUMN
时不能有ADD COLUMN
和DROP COLUMN
或者其他DDL的组合。重要ADD COLUMN
时其他DROP COLUMN、 RNAME COLUMN
等ALTER COLUMN
的行为将使数据同步任务不能正常工作。 - 限制:除了
ADD COLUMN
外,无法识别用户的其他DDL操作。
- 约束:
- 不支持
ALTER TABLE/CREATE TABLE
。 - 不支持TEMPORARY表、UNLOGGED表和Hyper表复制,PostgreSQL数据库没有提供机制对这两种类型的表进行log解析订阅。
- 不支持Sequences复制(
serial/bigserial/identity
)。 - 不支持TRUNCATE操作。
- 不支持大对象复制(Bytea)。
- 不支持视图、物化视图、外部表复制。
操作步骤
- 配置白名单。将独享数据资源组所在的VPC网段添加至PostgreSQL的白名单中,操作如下:
- 创建账号并配置账号权限。您需要规划一个数据库的登录账号用于后续执行操作,此账号需要拥有数据库的
REPLICATION、 LOGIN
权限。说明实时同步只支持逻辑复制机制,逻辑复制使用发布和订阅模型,其中一个或多个订阅者订阅发布者节点上的一个或多个发布。订阅者从他们订阅的发布中提取数据。
表的逻辑复制通常从对发布者数据库上的数据进行快照并将其复制到订阅者开始。完成后,发布者上的更改会实时发送给订阅者。
- 检查是否支持备库。
SELECT pg_is_in_recovery()
目前仅支持主库,预期返回结果为False,返回True时表示是备库,实时同步不支持备库,需修改数据源配置信息为主库的信息,请参见配置PostgreSQL数据源。
- 检查
wal_level
是否为logical
。show wal_level
wal_level
指定了wal_log
的级别,预期返回结果为logical,否则不支持逻辑复制机制。 - 检查是否可以启动
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
进程来给订阅者发送日志。 - 对于每一个需要同步的表,需要手动执行
ALTER TABLE [tableName] REPLICA IDENTITY FULL
语句进行授权,否则实时同步任务会报错。 - PostgreSQL实时同步任务启动后,会在数据库中自动创建slot、publications,slot名称格式为:
di_slot_ + 解决方案ID
,publication名称格式为:di_pub_ + 解决方案ID
,当实时同步任务停止或下线后,需手动删除,否则可能会导致PostgreSQL WAL 持续增长。