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

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

问题

将 CRDB 数据库从本地迁移到 Redis Cloud 时,有哪些选项可以最大限度地减少停机时间?

回答

RIOT-REDIS 是一款基于 Java 的工具,您可以使用它将数据从不同的源(本地 OSS Redis、本地 Redis Enterprise 软件、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 云)以及端口号
  • --pass <DB_TARGET_PASSWORD> 是目标数据库的密码
  • --mode live 确保在您运行命令后,初始数据集将被复制,以及传入的更改(所有可用模式的列表请点击这里

已知的限制和先决条件

CRDB 数据库不支持RESTORE 命令,RIOT-Redis 使用该命令来复制初始数据集。因此,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