如今,大多数可用的数据库迁移工具本质上是离线的。它们很复杂,需要手动干预。
例如,如果您想将数据从 Amazon ElastiCache 迁移到 Redis Cloud,通常的流程是将您的 ElastiCache 数据备份到 Amazon S3 存储桶,然后使用 Redis Cloud UI 导入您的数据。此流程可能需要痛苦的停机时间,并可能导致数据丢失。其他可用技术包括创建源 Redis 服务器的特定时间点快照,并将更改应用于目标服务器以保持两个服务器同步。这听起来可能是一个好方法,但当您必须维护数十个脚本来实现迁移策略时,它可能很具有挑战性。
因此,我们提出了一种不同的方法
RIOT 是由 Redis 解决方案架构师 Julien Ruaux 构建的开源在线迁移工具。RIOT 使用生产者/消费者方法实现客户端复制。生产者是密钥和值读取器的组合,它们与 ElastiCache 建立连接。密钥读取器组件使用扫描和键空间通知来识别要复制的密钥。对于每个密钥,值读取器组件执行 DUMP 并将生成的密钥+字节处理到消费者(写入器),后者在 Redis Cloud 连接上执行 RESTORE。
这篇博文将展示如何从 ElastiCache 到 Redis Cloud 无缝执行数据库的在线迁移。
您将需要一些资源来使用迁移工具
您可以创建新的 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>
$ sudo apt update
# sudo apt install -y redis-tools
语法
$ redis-cli -h <Elasticache Primary Endpoint > -p 6379
命令
$ sudo redis-cli -h <elasticache primary endpoint> -p 6379
确保上述命令允许您成功连接到远程 Redis 数据库。
运行以下命令来设置迁移工具。
我们建议使用 OpenJDK 11 或更高版本
sudo add-apt-repository ppa:openjdk-r/ppa && sudo apt-get update -q && sudo apt install -y openjdk-11-jdk
解压缩包并确保 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)。
最后,是时候通过运行以下命令将数据从 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 选项。
如果您正在寻找一种简单易用且无需停机的实时迁移工具,该工具可以帮助您将数据从 Amazon ElastiCache 迁移到 Redis Cloud,那么 RIOT 是一个有希望的选择。