如何从 Amazon ElastiCache 迁移到 Redis Enterprise 或 Redis Cloud?

最后更新于 2024 年 5 月 22 日

问题

如何从 Amazon ElastiCache 迁移到 Redis Enterprise 或 Redis Cloud?

答案

在从 ElastiCache 迁移到 Redis Enterprise 或 Redis Cloud 之前,您应该评估迁移并考虑最佳选项。我们将描述三种场景。

数据库替换

如果您可以容忍清空所有 Redis 数据,则根本无需迁移数据。您可以通过配置客户端库将应用程序指向新的 Redis Cloud 数据库,然后从一个全新的空数据库开始工作。如果您将 Redis 用作缓存并且可以在没有数据的情况下重新启动,这可能是一个有效选项。但是,在数据重新加载时,性能缓慢可能会影响您的服务,特别是当 Redis 用作缓存时。

离线数据迁移

如果您将 Redis 用于缓存以外的用途,例如会话存储,则无法承受完全数据清空导致的数据丢失或性能问题。为此,提供了持久化选项。接下来,考虑您是否可以处理停机,停机时间可能只有几分钟,具体取决于导出和导入 Redis 数据所需的时间。在您的环境中测试此过程以准确估算停机时间,但要注意 ElastiCache 中常见的内存使用问题。如果停机时间可以接受,我们建议采用离线数据迁移。它很简单,但在将数据从 ElastiCache 传输到 Redis Cloud 期间会导致停机。

在线数据迁移

可以在不停机或不丢失数据的情况下进行在线数据迁移,但这更复杂,需要仔细考虑。此方法使用一个名为 RIOT 的外部工具,该工具由 Redis 专家开发。文档提供了指导,如有需要,还提供专家支持。

优点

  • 将在线 ElastiCache 数据迁移到 Redis Cloud
  • 不停机

缺点

  • 更复杂,可能出现问题
  • 测试期间可能需要调整
  • 可能不适用于大型键(100MB+)
  • 不保证数据一致性
  • CPU 使用率高
  • 可能需要修改 ElastiCache
  • RIOT 支持是尽力而为

我们来看一个执行在线数据迁移的例子。您将需要一些资源来使用迁移工具

  • Redis Cloud 订阅
  • Amazon ElastiCache(单主 EC 的主端点和集群式 EC 的配置端点:请参阅 ElastiCache 文档中的查找连接端点以了解更多信息)
  • 基于 Linux 的 Amazon EC2 实例

使用 SSH 从您的计算机连接到新的 EC2 实例,如下所示

ssh -i “public key” AWS_EC2_INSTANCE

现在安装 redis-cli 工具

$ sudo apt update
$ sudo apt install -y redis-tools

验证与 ElastiCache 数据库的连接

$ redis-cli -h ELASTICACHE_ENDPOINT -p 6379

使用 RIOT 迁移工具。为此,我们建议使用 OpenJDK 11 或更高版本

sudo add-apt-repository ppa:openjdk-r/ppa && sudo apt-get update -q && sudo apt install -y openjdk-11-jdk

最后,完成 RIOT 的安装设置。下载所需的版本。然后解压软件包,并确保 RIOT 二进制文件已就位,如下所示

unzip riot-redis-2.0.8.zip
cd riot-redis-2.0.8/bin/

您可以通过运行以下命令检查 RIOT 的版本

./riot-redis --version
RIOT version "2.0.8"

安装 Java 和 RIOT 后,我们就可以开始迁移过程了。使用以下命令,该命令将数据直接从源(ElastiCache)复制到目标(Redis Cloud)。您可以通过运行以下命令将数据从 ElastiCache 复制到 Redis Cloud

sudo ./riot-redis -r redis://ELASTICACHE_ENDPOINT:6379 replicate -r redis://password@REDIS_CLOUD_ENDPOINT:port --live

ElastiCache 可以通过两种方式配置:集群模式和非集群模式。在集群模式的 ElastiCache 中,您必须在源 ElastiCache 端点之前包含 –cluster 选项。

确定并执行您的迁移方法。迁移到 Redis Cloud 后,您可以探索触发器、函数和自动分层等新功能来管理大型数据集。

参考资料

RIOT