如何将本地 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 bar
和 SET foo bar
而不是 RESTORE)。要使用live --mode
复制,您必须在源集群和目标集群上执行以下命令。CONFIG SET notify-keyspace-events KA
这是因为 live 方法使用键扫描和键空间通知来跟踪键空间中的更改。