将多个独立的 Redis 实例迁移并合并到 AWS Elasticache 上的新 Redis 集群中

Migrating and merging multiple standalone Redis instances into a new Redis cluster on AWS Elasticache

现在我们将数据拆分为三个独立的 Redis 实例,没有集群或分片。我们正在从当前的云服务提供商切换到 AWS,并希望将所有这些数据存储在一个新的 Elasticache Redis 集群中,以便我们可以水平扩展。

不幸的是,当目标实例处于集群模式时,用于迁移的 AWS-CLI 工具不起作用,我无法在 ElastiCache 中手动使用 SLAVEOF 命令。看起来 dump.rdb 文件只能在您首次启动 redis-server 或首次创建新的 EC 集群时导入。

如能提供有关如何实现此迁移和合并过程的任何指示,我们将不胜感激。有没有办法可以将多个 dump.rdb 文件合并为一个文件?或者以某种方式将每个服务器的数据逐个通过管道传输到配置端点/主节点?

你看过RIOT项目吗:

https://github.com/redis-developer/riot

您可以进行实时迁移。 -- 我不得不承认,我曾经将数据从 Elasticache 迁移到 Redis Cloud,但你可以在任何方向使用它。

这不是一个优雅的解决方案,但这是我所做的。我必须将我们所有的 Redis 数据上传并整合到一个实例中。

启动一个具有足够内存的新 Redis 实例来保存我们所有三个 Redis 实例的数据,然后安装 redis-rdb-tools 允许您解析 dump.rdb 文件并将其转换为不同的格式:

https://github.com/sripathikrishnan/redis-rdb-tools

对于每个 dump.rdb 文件,我 运行 以下命令生成由 Redis 协议组成的文件,这些文件稍后可以通过管道传输到新的 Redis 服务器中:

rdb -c protocol dump1.rdb > dump1.protocol

将每个生成的文件通过管道传输到新的 redis 实例中:

cat dump1.protocol | redis-cli --pipe

完成后,运行 BGSAVE (background save command) 使用 redis-cli 生成单个 dump.rdb 文件。

然后您可以将 dump.rdb 文件上传到 S3 并 select 它在 ElastiCache 中设置新的 Redis 集群时为所有数据播种。