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