学习

使用 RIOT 将在线数据库从 Amazon ElastiCache 迁移到 Redis Cloud

Ajeet Raina
作者
Ajeet Raina, Redis 前开发者增长经理

如今,大多数可用的数据库迁移工具本质上是离线的。它们很复杂,需要手动干预。

例如,如果您想将数据从 Amazon ElastiCache 迁移到 Redis Cloud,通常的流程是将您的 ElastiCache 数据备份到 Amazon S3 存储桶,然后使用 Redis Cloud UI 导入您的数据。此流程可能需要痛苦的停机时间,并可能导致数据丢失。其他可用技术包括创建源 Redis 服务器的特定时间点快照,并将更改应用于目标服务器以保持两个服务器同步。这听起来可能是一个好方法,但当您必须维护数十个脚本来实现迁移策略时,它可能很具有挑战性。

因此,我们提出了一种不同的方法

介绍 RIOT#

RIOT 是由 Redis 解决方案架构师 Julien Ruaux 构建的开源在线迁移工具。RIOT 使用生产者/消费者方法实现客户端复制。生产者是密钥和值读取器的组合,它们与 ElastiCache 建立连接。密钥读取器组件使用扫描和键空间通知来识别要复制的密钥。对于每个密钥,值读取器组件执行 DUMP 并将生成的密钥+字节处理到消费者(写入器),后者在 Redis Cloud 连接上执行 RESTORE。

这篇博文将展示如何从 ElastiCache 到 Redis Cloud 无缝执行数据库的在线迁移。

先决条件#

您将需要一些资源来使用迁移工具

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

步骤 1 - 设置 Amazon EC2 实例#

您可以创建新的 EC2 实例或利用现有的 EC2 实例。在我们的示例中,我们将首先在 Amazon Web Services (AWS) 上创建实例。最常见的情况是从同一 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon EC2 实例访问 ElastiCache 集群。我们为此设置使用了 Ubuntu 16.04 LTS,但您可以选择您选择的 Ubuntu 或 Debian 发行版。

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

ssh -i “public key” <AWS EC2 Instance>

步骤 2 - 安装 redis-cli 工具#

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

验证与 ElastiCache 数据库的连接#

语法

$ redis-cli -h <Elasticache Primary Endpoint > -p 6379

命令

$ sudo redis-cli -h <elasticache primary endpoint> -p 6379

确保上述命令允许您成功连接到远程 Redis 数据库。

步骤 3 - 使用 RIOT 迁移工具#

运行以下命令来设置迁移工具。

先决条件:#

安装 Java

我们建议使用 OpenJDK 11 或更高版本

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

安装 RIOT

解压缩包并确保 RIOT 二进制文件已就位,如以下所示

wget https://github.com/Redislabs-Solution-Architects/riot/releases/download/v2.0.8/riot-redis-2.0.8.zip
unzip riot-redis-2.0.8.zip
cd riot-redis-2.0.8/bin/

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

./riot-redis --version
RIOT version "2.0.8"
bin/riot-redis --help
Usage: riot-redis [OPTIONS] [COMMAND]
  -q, --quiet         Log errors only
  -d, --debug         Log in debug mode (includes normal stacktrace)
  -i, --info          Set log level to info
  -h, --help          Show this help message and exit.
  -V, --version       Print version information and exit.
Redis connection options
  -r, --redis=<uri>   Redis connection string (default: redis://localhost:6379)
  -c, --cluster       Connect to a Redis Cluster
  -m, --metrics       Show metrics
  -p, --pool=<int>    Max pool connections (default: 8)
Commands:
  replicate, r  Replicate a source Redis database in a target Redis database
  info, i       Display INFO command output
  latency, l    Calculate latency stats
  ping, p       Execute PING command

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

步骤 4 - 迁移数据#

最后,是时候通过运行以下命令将数据从 ElastiCache 复制到 Redis Cloud 了

sudo ./riot-redis -r redis://<source Elasticache endpoint>:6379 replicate -r redis://password@<Redis Cloud endpoint>:port --live

ElastiCache 允许您以两种方式配置:集群和非集群。在下表中,第一行显示了您应该为非集群方案执行的命令,而第二行显示了具有特定数据库命名空间的集群方案的命令

如您所见,只要您有 ElastiCache 集群,您就需要在指定源 ElastiCache 端点之前传递 –cluster 选项。

重要说明#

  • 在生产中使用迁移之前,请执行迁移的用户验收测试。
  • 迁移完成后,请确保应用程序流量成功重定向到 Redis Cloud 端点。
  • 在流量较低的时期执行迁移过程,以最大程度地减少数据丢失的可能性。

结论#

如果您正在寻找一种简单易用且无需停机的实时迁移工具,该工具可以帮助您将数据从 Amazon ElastiCache 迁移到 Redis Cloud,那么 RIOT 是一个有希望的选择。

最后更新时间 2024 年 2 月 22 日