本文档提供了一个分步指南,介绍如何使用我们的 实时迁移 策略将数据库从 AWS RDS Postgres 实例迁移到 Timescale,以实现低应用程序停机时间(几分钟的级别)。

实时迁移的复制机制从根本上基于 Postgres 的逻辑解码功能。但是,在本指南中,无需深入了解逻辑解码。

注意

在迁移的上下文中,您现有的生产数据库称为“源”数据库,而您打算将数据迁移到的新 Timescale 数据库称为“目标”数据库。

在开始迁移过程之前,您需要

  1. 收集有关您的 RDS 实例的信息。
  2. 为实时迁移准备您的 RDS 实例。
  3. 准备一台中间机器。

您需要有关您的 Postgres RDS 实例的以下信息

  • 端点
  • 端口
  • 主用户名
  • 主密码
  • VPC
  • DB 实例参数组

要收集所需的信息,请导航到“数据库”面板并选择您的 RDS 实例。

RDS instances

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

Record endpoint, port, VPC details
Record master username and DB parameter group

要将您的 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 实例参数组”下列出的值。

Know your DB parameter group

让我们创建一个 DB 参数组,修改“wal_level”和“old_snapshot_threshold”字段的值。我们将基于现有的“prod-pr-group”创建此组,以便我们可以保持其他字段不变,只更改我们需要的字段。

重要

如果您的 AWS RDS 服务是多可用区 DB 集群部署,那么您需要使用“DB 集群参数组”而不是“DB 参数组”。

  1. 使用侧边栏导航到“参数组”面板。

    Navigate to parameter group panel
  2. 复制 RDS 实例中处于活动状态的参数组。

    重要

    如果您的 RDS 实例的“DB 参数组”显示“default.postgres15”,则您需要创建一个新的 DB 参数组。为此,请选择“创建参数组”,并在“参数组族”字段中选择“postgres15”。

    Copy your existing parameter group
  3. 重命名参数组,提供说明,然后单击“创建”。

    Rename the new parameter group
  • 您将在“参数组”面板中找到新的参数组。通过单击它打开新创建的参数组。
    Open the new parameter group
  1. 单击“编辑”。

    Edit the new parameter group
  2. 使用搜索框找到“rds.logical_replication”,将其值从 0 调整为 1。接下来,找到“old_snapshot_threshold”,将其值设置为 -1。完成这些更改后,请务必单击“保存更改”。

    Modify rds.logical_replication field
    Modify old_snapshot_threshold field
  3. 导航回到您的 RDS 实例并单击“修改”。

    Navigate back to your RDS instance
  4. 导航到“其他配置”部分,将“DB 参数组”值更改为包含更新参数值的新 DB 参数组。完成此更改后,单击页面底部的“继续”。

    Modify DB parameter group
  5. 验证了新的参数组值后,选择“立即应用”,然后单击“修改 DB 实例”。

    Apply DB parameter group
    重要

    配置新的参数组不会导致您的数据库重新启动。在下一步中,您将手动重启数据库。

  6. 您的 RDS 服务将短暂处于“修改”状态,之后,您应该看到参数组处于“待重启”状态,并且必须重新启动才能应用。

  7. 手动重启您的服务以应用更改。在“操作”下拉菜单中,单击“重启”,然后单击“确认”。

  8. 服务重新启动后,请确保 RDS 实例中应用了新的“DB 参数组”。

    Ensure the new DB parameter group on your RDS instance
  9. 重新连接到您的 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 实例。

  1. 在 AWS 搜索中,键入“EC2”,然后在服务下选择“EC2”选项。

    Search for EC2 services
  2. 单击“启动实例”。

    Launch EC2 instance
  3. 配置您的 EC2 实例。

    a. 对于“应用程序和操作系统映像”,请选择 Ubuntu Server LTS。

    b. 对于“实例类型”,至少使用 2 个 CPU 和 8 GB 内存。如果您的迁移涉及更大的数据库,您应该相应地选择。

    Configure instance type

    c. 对于“密钥对”,您可以选择使用现有密钥对或创建一个新的密钥对。当从本地机器连接到 EC2 实例时,这将是必要的。

    d. 对于“网络设置”,选择与您的 RDS 实例位于同一 VPC。此外,将安全组的“源类型”修改为“我的 IP”,以便您的本地机器可以连接到 EC2 实例。

    Configure network

    e. 对于“配置存储”部分,调整卷大小以匹配*数据库大小的 1.5 倍*。如有必要,您应该在卷上启用加密。

    Configure storage
  4. 查看实例摘要,然后单击“启动实例”。

    Review EC2 instance

要为低停机时间迁移准备您的 EC2 实例

  1. 导航到您的 EC2 实例,然后单击“连接”。

    Navigate to your EC2 instance
  2. 选择“SSH 客户端”选项卡。

    Connect to your EC2 using SSH client
  3. 使用创建 EC2 实例时收到的“密钥对”连接到您的 EC2 实例。

chmod 400 <key-pair>.pem
ssh -i "<key-pair>.pem" ubuntu@<EC2 instance's Public IPv4>
  1. 要允许 EC2 实例连接到 RDS 实例,您需要修改与您的 RDS 实例关联的安全组。

    a. 记下您的 EC2 实例的私有 IPv4 地址。

    Note the private IPv4 address

    b. 转到与您的 RDS 实例关联的安全组,然后选择“编辑入站规则”。

    Edit the security group

    c. 单击“添加规则”。在“类型”字段中,选择“PostgreSQL”。对于“源”,选择“自定义”,并输入您的 EC2 实例的私有 IPv4 地址。为此规则添加一个合适的说明。最后,单击“保存规则”以应用更改。

    Add new rule
  2. 验证从您的 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 上编辑此页面