如何将本地部署的 CRDB 迁移到 Redis Cloud CRDB?

上次更新时间 2024年4月18日

问题

将 CRDB 数据库从本地部署迁移到 Redis Cloud 并实现最短停机时间有哪些选项?

答案

RIOT-REDIS 是一个基于 Java 的工具,可用于从不同源(本地部署的 OSS Redis、本地部署的 Redis Enterprise Software、ElastiCache)迁移数据。要安装此工具,您需要在源数据库集群旁创建实例,并确保此实例可访问源数据库和目标数据库。

注意:RIOT-Redis 的另一个替代方案是导入功能。此选项几乎总是需要更长的停机时间,并且涉及将多个 RDB 文件合并为一个的多个手动任务。由于 CRDB 数据库会在集群之间自动同步,因此我们将为源数据库选择一个数据库端点,为目标数据库选择一个。(注意:其余区域数据库将自动追赶,只需将数据导入一个目标数据库即可)。

要安装 RIOT,必须遵循官方RIOT-REDIS 文档

启动迁移的命令

根据您安装 RIOT-Redis 的路径,启动迁移的命令如下所示。您必须在 RIOT-Redis 实例上执行此命令。

./riot-redis --info -h <DB_SOURCE_ENDPOINT> -p <DB_SOURCE_PORT> --pass <DB_SOURCE_PASSWORD> replicate-ds -h <DB_TARGET_ENDPOINT> -p <DB_TARGET_ENDPOINT> --pass <DB_TARGET_PASSWORD> --mode live

以下是命令的细分说明:

  • ./riot-redis 是我安装 RIOT-Redis 的路径
  • --info 提供了关于程序在您触发命令后如何执行的可见性
  • -h <DB_SOURCE_ENDPOINT> -p <DB_SOURCE_PORT> 是源数据库端点和端口号
  • --pass <DB_SOURCE_PASSWORD> 是源数据库的密码
  • replicate-ds 是一种运行复制的方法;如果您使用的是 CRDB,这是唯一的方法(在此阅读更多)
  • -h <DB_TARGET_ENDPOINT> -p <DB_TARGET_ENDPOINT> 是目标数据库 (Redis Cloud) 以及端口号
  • --pass <DB_TARGET_PASSWORD> 是目标数据库的密码
  • --mode live 确保在运行命令后,将复制初始数据集以及传入的更改(所有可用模式的列表在此

已知限制和先决条件

CRDB 数据库不支持 RIOT-Redis 用于复制初始数据集的 RESTORE 命令。因此,RIOT-Redis 中的 replicate 机制将失败。唯一支持 CRDB 的复制机制是 replicate-ds。这里的区别在于,Redis-RIOT 根据键类型对每个键使用读/写命令,而不是 RESTORE 命令。(对于字符串,它将使用 GET foo barSET foo bar,而不是 RESTORE)。要使用 live --mode 复制,必须在源集群和目标集群上执行以下命令: CONFIG SET notify-keyspace-events KA 这是因为 live 方法使用键扫描和键空间通知来跟踪键空间中的更改。

参考

RIOT-REDIS