本文档提供了一个分步指南,介绍如何使用我们的 实时迁移 策略将数据库从 AWS RDS Postgres 实例迁移到 Timescale,以实现低应用程序停机时间(几分钟的级别)。
实时迁移的复制机制从根本上基于 Postgres 的逻辑解码功能。但是,在本指南中,无需深入了解逻辑解码。
注意
在迁移的上下文中,您现有的生产数据库称为“源”数据库,而您打算将数据迁移到的新 Timescale 数据库称为“目标”数据库。
在开始迁移过程之前,您需要
- 收集有关您的 RDS 实例的信息。
- 为实时迁移准备您的 RDS 实例。
- 准备一台中间机器。
您需要有关您的 Postgres RDS 实例的以下信息
- 端点
- 端口
- 主用户名
- 主密码
- VPC
- DB 实例参数组
要收集所需的信息,请导航到“数据库”面板并选择您的 RDS 实例。

从“连接性和安全性”选项卡中记下 **端点**、**端口**和 **VPC** 的详细信息,以及从“配置”选项卡中记下 **主用户名** 和 **DB 实例参数组**。请务必使用在创建 Postgres RDS 实例时提供的 **主密码**。


要将您的 RDS 实例用作实时迁移的源数据库,并确保复制过程顺利运行,请设置以下配置参数
配置 | 所需值 |
---|---|
wal_level | 逻辑 |
old_snapshot_threshold | -1 |
您可以检查上述配置参数的值
postgres=> show wal_level;wal_level-----------minimal(1 row)postgres=> show old_snapshot_threshold;old_snapshot_threshold------------------------0(1 row)
如果返回值与所需值不匹配(在本例中),您需要调整它们。
重要
修改这两个参数中的任何一个都需要重新启动 PostgreSQL,这将导致您的数据库暂时不可用。在您对数据库重启感到满意时,请确保进行以下配置更改。
对于用户进行修改,RDS 需要创建一个具有所需配置值的参数组。
“DB 参数组”可以被视为一组键值对,它们充当数据库的配置设置。要查找您的 RDS 实例正在使用的当前 DB 参数组,请转到您的 RDS 服务的“配置”选项卡,并查找“DB 实例参数组”下列出的值。

让我们创建一个 DB 参数组,修改“wal_level”和“old_snapshot_threshold”字段的值。我们将基于现有的“prod-pr-group”创建此组,以便我们可以保持其他字段不变,只更改我们需要的字段。
重要
如果您的 AWS RDS 服务是多可用区 DB 集群部署,那么您需要使用“DB 集群参数组”而不是“DB 参数组”。
使用侧边栏导航到“参数组”面板。
复制 RDS 实例中处于活动状态的参数组。
重要
如果您的 RDS 实例的“DB 参数组”显示“default.postgres15”,则您需要创建一个新的 DB 参数组。为此,请选择“创建参数组”,并在“参数组族”字段中选择“postgres15”。
重命名参数组,提供说明,然后单击“创建”。
- 您将在“参数组”面板中找到新的参数组。通过单击它打开新创建的参数组。
单击“编辑”。
使用搜索框找到“rds.logical_replication”,将其值从 0 调整为 1。接下来,找到“old_snapshot_threshold”,将其值设置为 -1。完成这些更改后,请务必单击“保存更改”。
导航回到您的 RDS 实例并单击“修改”。
导航到“其他配置”部分,将“DB 参数组”值更改为包含更新参数值的新 DB 参数组。完成此更改后,单击页面底部的“继续”。
验证了新的参数组值后,选择“立即应用”,然后单击“修改 DB 实例”。
重要
配置新的参数组不会导致您的数据库重新启动。在下一步中,您将手动重启数据库。
您的 RDS 服务将短暂处于“修改”状态,之后,您应该看到参数组处于“待重启”状态,并且必须重新启动才能应用。
手动重启您的服务以应用更改。在“操作”下拉菜单中,单击“重启”,然后单击“确认”。
服务重新启动后,请确保 RDS 实例中应用了新的“DB 参数组”。
重新连接到您的 RDS 实例,并验证配置参数值。
postgres=> show wal_level;wal_level-----------logical(1 row)postgres=> show old_snapshot_threshold ;old_snapshot_threshold-------------------------1(1 row)
实时迁移必须从专用机器执行。实时迁移工具连接到源数据库和目标数据库,所有数据将在源数据库和目标数据库之间的专用机器之间流动。此实例必须能够访问您的 RDS 服务,并且理想情况下位于与您的 Timescale 实例相同的区域。我们将在与 RDS 服务相同的 VPC 中设置一个 EC2 实例。
在 AWS 搜索中,键入“EC2”,然后在服务下选择“EC2”选项。
单击“启动实例”。
配置您的 EC2 实例。
a. 对于“应用程序和操作系统映像”,请选择 Ubuntu Server LTS。
b. 对于“实例类型”,至少使用 2 个 CPU 和 8 GB 内存。如果您的迁移涉及更大的数据库,您应该相应地选择。
c. 对于“密钥对”,您可以选择使用现有密钥对或创建一个新的密钥对。当从本地机器连接到 EC2 实例时,这将是必要的。
d. 对于“网络设置”,选择与您的 RDS 实例位于同一 VPC。此外,将安全组的“源类型”修改为“我的 IP”,以便您的本地机器可以连接到 EC2 实例。
e. 对于“配置存储”部分,调整卷大小以匹配*数据库大小的 1.5 倍*。如有必要,您应该在卷上启用加密。
查看实例摘要,然后单击“启动实例”。
要为低停机时间迁移准备您的 EC2 实例
导航到您的 EC2 实例,然后单击“连接”。
选择“SSH 客户端”选项卡。
使用创建 EC2 实例时收到的“密钥对”连接到您的 EC2 实例。
chmod 400 <key-pair>.pemssh -i "<key-pair>.pem" ubuntu@<EC2 instance's Public IPv4>
要允许 EC2 实例连接到 RDS 实例,您需要修改与您的 RDS 实例关联的安全组。
a. 记下您的 EC2 实例的私有 IPv4 地址。
b. 转到与您的 RDS 实例关联的安全组,然后选择“编辑入站规则”。
c. 单击“添加规则”。在“类型”字段中,选择“PostgreSQL”。对于“源”,选择“自定义”,并输入您的 EC2 实例的私有 IPv4 地址。为此规则添加一个合适的说明。最后,单击“保存规则”以应用更改。
验证从您的 EC2 实例到 RDS 服务的连接。请注意,系统将提示您输入主密码。这应该与创建 AWS RDS 服务时使用的密码相同。
# psql -h <rds_endpoint> -p <rds_port> -U postgres -c "select 1"psql -h aws-rds-low-downtime-migration-db.c8tzn206yp6f.us-west-2.rds.amazonaws.com -p 5432 -U postgres -c "select 1"Password for user postgres:?column?----------1(1 row)
提示
如果您遇到困难,可以通过打开支持请求获得帮助,或者将您的问题提交到 社区 Slack 中的 #migration
频道,此迁移方法的开发人员将为您提供帮助。
您可以直接从 Timescale 控制台 打开支持请求,也可以通过电子邮件发送至 support@timescale.com。
从 RDS Postgres 实例到 Timescale 的低停机时间数据迁移的剩余步骤与“实时迁移”文档中从 步骤 1 开始提到的步骤相同。您应该按照提到的步骤成功完成迁移过程。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面。