导入和导出概览

本页面介绍了导入和导出在 Memorystore for Redis 中的工作原理。

导入和导出功能使用 Redis 的原生 RDB 快照功能将数据导入 Memorystore for Redis 实例中或从中导出数据。使用原生 RDB 格式可以防止锁定,并且可以非常轻松地在 Google Cloud 内外移动数据。导入和导出使用 Cloud Storage 存储分区来存储 RDB 文件。

Memorystore for Redis 实例在导出期间的行为与开源 Redis 中的 BGSAVE 命令非常相似。Memorystore for Redis 通过将 RDB 文件复制到实例的数据目录进行导入。

如需了解如何导入和导出 RDB 文件,请参阅将数据导入 Redis 实例从 Redis 实例中导出数据

如需了解如何使用 Cloud Scheduler 安排 RDB 导出,请参阅使用 Cloud Scheduler 安排 Memorystore for Redis 数据库导出

导入功能的行为

  • 为了实现最佳性能,您应该从 Redis 实例所在区域中的 Cloud Storage 存储分区导入数据。

  • Redis 实例在导入操作期间不可用。导入操作完成后,实例将转为可用状态。

  • 如果导入成功,则实例中的现有数据将会被 RDB 文件中的数据覆盖。

  • 如果导入因任何原因失败,则实例会恢复在线状态,但数据可能会被完全清空。您可以使用同一个 RDB 文件重试导入操作,也可以使用其他 RDB 文件恢复数据。

  • Memorystore for Redis 实例可从同一个 Redis 版本以及从旧版 Redis 导入 RDB 文件,但它无法从新版本导入 RDB 文件。

  • 可以取消导入操作,但请注意,取消操作会导致实例恢复为缓存已被完全清空的状态。基本层级和标准层级实例就是其中的一个例子。

  • 实例只能从旧版 Redis 导入备份。运行 Redis 5.0 的实例可以导入从 Redis 4.0 导出的 RDB,但运行 Redis 4.0 的实例无法从 Redis 5.0 导入 RDB。

导出功能的行为

  • 您可以在导出操作期间对 Redis 实例执行数据读写操作;但是,您无法执行任何管理员操作,例如扩缩、更新或配置实例。

  • 您的实例在导出期间可能会发生延迟时间增加的情况。

  • 为了实现最佳性能,您应该将 RDB 备份导出至 Redis 实例所在区域中的 Cloud Storage 存储分区。

  • 在导出期间,RDB 文件将保存到您选择的 Cloud Storage 存储桶中。

  • 您可以随时取消导出操作。取消操作不会影响实例的数据或可用性。

    • 取消导出将会删除正在写入 Cloud Storage 存储桶的 RDB 文件,并释放 BGSAVE 程序使用的内存。
  • 使用 Google Cloud Console 时,导出可能会覆盖同名的现有文件,而无需额外权限。要在导出操作中使用 gcloud 覆盖现有文件,用户帐号需要 storage.objects.delete 权限。

在写入负载较高的情况下导出

如果您在写入负载较高的时段内运行导出操作,则实例内存用量可能会增加到 2 倍,从而导致导出操作失败。您应该在写入负载较低的期间执行导出操作。要监控实例中存储的 Redis 数据量,您可以创建信息中心以监控内存用量并使用 Google Cloud 的运维套件监控实例内存用量指标

Memorystore for Redis 导出作业使用 Redis 的 BGSAVE 功能为实例中的数据截取快照。执行 BGSAVE 时,Redis 会创建新子进程的分支以截取快照。Redis 在此过程中会使用写入时复制

这意味着初始分支分配的额外内存最少,但会复制由 Redis 服务器写入流量更改的任何页面。因此,在写入负载较高的期间,最糟糕的情况是 Redis 占用的内存量翻倍,从而导致导出操作失败。

在 BGSAVE 操作期间进行导出

无法在运行 BGSAVE 操作时导出数据。标准层级 Memorystore for Redis 实例有时会运行完整重新同步操作(即“完整同步”),以确保主实例和副本保持同步。完整重新同步使用 BGSAVE 命令,这会阻止 Memorystore 执行导出操作。

如需验证 BGSAVE 操作是否正在进行,请使用 Metrics Explorer 查看 redis.googleapis.com/persistence/rdb/bgsave_in_progress API 端点。

如需使用 Metrics Explorer 查看受监控资源的指标,请执行以下操作:

  1. 转到 Google Cloud Console 中的 Monitoring 或使用下面的按钮:
    转到 Monitoring
  2. 在 Monitoring 导航窗格中,点击 Metrics Explorer
  3. 在工具栏中,选择浏览器标签页。
  4. 选择配置标签页。
  5. 展开选择指标菜单,然后使用子菜单选择资源类型和指标。例如,如需绘制虚拟机的 CPU 利用率图表,请执行以下操作:
    1. (可选)如需减少显示的菜单选项,请在过滤栏中输入部分指标名称。在此示例中,请输入 utilization
    2. 活跃资源菜单中,选择虚拟机实例
    3. 活跃指标类别菜单中,选择实例
    4. 活跃指标菜单中,选择 CPU 利用率

或者,您也可以使用自己的命令行 API 工具。

执行导入和导出操作所需的权限

用户需要配置足够的 IAM 权限才能导入或导出 RDB 文件。最简单的权限设置是将 Cloud Memorystore Redis AdminStorage Admin IAM 角色应用于用户帐号,但此设置可能不适用于某些用户帐号,因为这样做会授予其权限来创建、修改或删除他们不应访问的资源。如需了解如何设置受限程度最低的权限,请参阅授予受限权限以执行导入和导出操作

导入和导出的时长

导入或导出的时长取决于实例大小以及实例中数据集的大小。导入和导出所需的时间因大小而异,从几分钟到几小时不等。

例如,如果您导入或导出一个已用内存为 8 GB 而大小为 10 GB 的实例,则该操作可能需要 5 分钟。如果您导入或导出一个已用内存为 100 GB 而大小为 120 GB 的实例,则该操作可能需要 1 小时。

停止导入或导出操作

要停止导入或导出操作,请参阅以下页面:

监控操作的进度

导入和导出操作正在进行时无法提供完成时间的估算值。您可以通过检查实例详情页面来检查操作是否正在进行。要查看实例详情页面,请在 Memorystore for Redis 的实例列表页面上点击您的实例 ID。

您还可以通过运行以下命令来监控导入操作的进度:

gcloud redis instances describe [INSTANCE_ID] --region=[REGION]

其中:

  • [INSTANCE_ID] 是 Memorystore for Redis 实例的 ID。
  • [REGION] 是您的实例所在的区域。

该命令会输出 state: IMPORTINGstate: READY 作为说明字段之一。

不受支持的 Cloud Storage 存储分区

Memorystore 导入和导出作业不支持请求者付款功能的 Cloud Storage 存储分区。

保护 Cloud Storage 存储分区

您应该确保 Cloud Storage 存储桶具有适当的限制,以防止别人未经授权访问其中包含的 Redis RDB 备份。请参阅 Cloud Storage 的访问权限控制选项,了解如何保护 Cloud Storage 存储分区。

确保有足够的内存来完成导出

为防止导出操作导致内存不足,在导出过程中,实例中应具备 50% 的可用内存。根据您的写入负载而定,并非始终都需要 50% 的可用内存,但如果在导出过程中涉及了多个页面,则拥有 50% 的可用内存可确保有足够的可用空间来应对“写入时复制”开销。

要了解实例当前的内存用量,请设置 Google Cloud 的运维套件提醒,以便在内存用量达到可自定义的阈值时获取通知。此外,您还应该使用 Google Cloud 的运维套件设置内存监控信息中心。这些措施可让您了解实例内存使用模式。通过了解内存使用模式,您可以在定期导出时正确调整实例的大小。

导出和导入启用了读取副本的实例

对于所有 Redis 实例(包括已启用读取副本的实例),数据都会从主节点导出。

对于启用了读取副本的实例,导出操作可能会增加主节点上的 CPU 负载和内存占用量。

将数据导入启用了读取副本的实例时,主节点会在导入操作期间重启,并且只有在新数据完全加载到数据库中后,实例才可用。

后续步骤