学习

ElastiCache 迁移到 Redis Cloud

迁移到 Redis Cloud 之前,您应评估迁移并考虑最佳选项。请阅读本指南,以确定哪种迁移策略适合您

离线数据迁移#

创建具有适当权限的 S3 存储桶#

  1. 1.打开 Amazon S3 控制台
  2. 2.创建新的 S3 存储桶以存储 Elasticache 备份。
  3. 3.选择 Permissions
  4. 4.Access control list (ACL) 下,选择 Edit
  5. 5.点击 Add grantee,然后输入以下 Elasticache 规范 ID(这允许 Elasticache 服务将备份写入此 S3 存储桶):
540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353

6. 对于对象,选择 List 和 Write。

7. 对于存储桶 ACL,选择 Read 和 Write。

8. 点击 Save changes。

9. 将以下 JSON 添加到存储桶策略中。将 UNIQUE-BUCKET-NAME 替换为您的存储桶名称

{
    "Version": "2012-10-17",
    "Id": "MyBucketPolicy",
    "Statement": [
        {
            "Sid": "RedisCloudBackupsAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::168085023892:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:getObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::UNIQUE-BUCKET-NAME/*"
        }
    ]
}

10. 在账户级别和存储桶级别禁用“阻止所有公共访问”。

11. 仍在 Permissions 选项卡中,编辑 Block public access (bucket settings)

12. 取消勾选 Block all public access。

13. 在账户级别禁用“阻止所有公共访问”。

14. 在 S3 导航窗格中,点击 此账户的阻止公共访问设置

15. 取消勾选 Block all public access。

创建手动 Elasticache 备份并导出到 S3#

  1. 1.打开 ElastiCache 控制台
  2. 2.在导航窗格中,选择 Redis OSS caches。
  3. 3.选择您的 Redis 数据库
  4. 4.在 Actions 下拉按钮中,选择 Backup
  5. 5.输入备份名称,然后点击 Create Backup
  6. 6.在导航窗格中,在 Resources 下选择 Backups
  7. 7.从备份列表中,选择您的备份。
  8. 8.在 Actions 下拉菜单中,选择 Export
  9. 9.Target S3 location 下拉列表中,选择您创建的 S3 存储桶。
  10. 10.点击 Export
  11. 11.在 S3 中找到您的备份 RDB 文件并编辑权限。
  12. 12.Permissions 选项卡中点击 Edit
  13. 13.对于 Authenticated users group (anyone with an AWS account),在 Object 下勾选 Read。

将 RDB 文件导入 Redis Cloud#

  1. 1. Redis Cloud 控制台中,从数据库列表中选择目标数据库。
  2. 2.选择 Import
  3. 3.输入 RDB 文件的详细信息:
  4. 4.源类型 - 选择 AWS S3
  5. 5.源路径 - 输入上一步中 RDB 文件的 S3 URI:s3://bucketname/[path/]filename.rdb
  6. 6.对于具有多个 RDB 文件分片数据库,选择 Add source 添加另一个 RDB 文件。
  7. 7.选择 Import
  8. 8.验证您的迁移,并将应用程序的流量重定向到新的 Redis Cloud 端点。

实时数据迁移#

AWS 不允许直接访问 ElastiCache 实例。必须从具有适当权限的 EC2 实例访问您的 ElastiCache 实例。以下指南假定可以通过 EC2 实例从互联网访问您的 ElastiCache 实例。

注意:ElastiCache serverless 不支持实时数据迁移。

修改您的 ElastiCache 参数组#

默认情况下,ElastiCache 禁用键空间通知。RIOT 实时模式需要此功能。您需要创建一个自定义参数组来修改 ElastiCache 的配置值。如果您的 ElastiCache 已有自定义参数组,您可以跳到第 5 步编辑 notify-keyspace-events 参数。

  1. 1.打开 ElastiCache 控制台并选择 Parameter groups
  2. 2.点击 Create parameter group。
  3. 3.命名您的参数组,添加描述,并在 Family 下选择 Redis 版本。
  4. 4.点击 Create
  5. 5.Parameter groups 页面上,点击您刚刚创建的参数组,点击 Edit parameter values
  6. 6.在 Find parameters 中输入 keyspace,以过滤 notify-keyspace-events 参数。
  7. 7.对于 Value,输入 KEA。
  8. 8.如果您的 ElastiCache 已启用集群模式,您还需要修改 cluster-enabled 参数。
  9. 9.点击 Save changes

10. 在左侧导航窗格中,点击 Redis OSS caches 并选择您的 ElastiCache 实例。

11. 点击 Modify,在 Parameter groups 下选择您的新参数组。

12. 点击 Preview changes,然后点击 Modify 确认更改。

设置与 ElastiCache 的计算连接#

  1. 1.打开 ElastiCache 控制台并选择您的 Redis OSS 缓存。
  2. 2.Actions 下拉按钮中,选择 Set up compute connection
  3. 3.创建新的 EC2 实例或选择同一 VPC 中的现有实例。
  4. 4.首选 Ubuntu,如果使用 Amazon Linux,可能需要额外步骤。
  5. 5.点击 Setup,这将创建一个新的 ENI 和安全组,以允许您的实例访问 ElastiCache。

安装 redis-tools、Java 和 RIOT#

1. 使用 Instance Connect 或 SSH 连接到新的 EC2 实例

ssh -i “public key” AWS_EC2_INSTANCE

2. 安装 redis-cli 工具

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

3. 验证与 ElastiCache 实例的连接,将 ELASTICACHE_ENDPOINT 替换为您的 ElastiCache 端点。如果未启用 TLS,移除 --tls 选项。

redis-cli --tls -h ELASTICACHE_ENDPOINT -p 6379

4. 安装 Java,建议使用 OpenJDK 21 或更高版本

sudo apt install -y openjdk-21-jdk

5. 安装 RIOT。下载所需的版本。然后,解压包,确保 RIOT 二进制文件已到位,如下所示

wget https://github.com/redis/riot/releases/download/v4.2.3/riot-4.2.3.tar && tar -xvf riot-4.2.3.tar && cd riot-4.2.3/bin/

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

./riot --version
响应
------------------------------------------------------------
riot 4.2.3
------------------------------------------------------------
Build time:   2025-02-16 18:35:57Z
Revision: 	d7a319522e4e72a2b5277e5a15bd715d557dedb6
JVM:      	21.0.6 (Ubuntu 21.0.6+7-Ubuntu-124.04.1)
------------------------------------------------------------

将 ElastiCache 复制到 Redis Cloud#

安装 Java 和 RIOT 后,您就可以开始迁移过程了,该过程直接将数据从源(ElastiCache)复制到目标(Redis Cloud)。

  1. 1.登录 Redis Cloud 控制台
  2. 2.点击您的迁移目标并记下:公共端点、用户名和密码
  3. 3.回到您的 EC2 实例,运行以下命令:

sudo ./riot replicate rediss://ELASTICACHE_ENDPOINT:port redis://username:password@REDIS_CLOUD_ENDPOINT:port --mode live

4. 如果您从 ElastiCache 集群迁移,必须包含 --source-cluster 选项

5. 如果您迁移到 Redis Cloud 集群,必须包含 --target-cluster 选项。

6. 如果您的 ElastiCache 集群未启用 TLS,将 rediss:// 替换为 redis://。

7. 验证您的迁移,并将应用程序的流量重定向到新的 Redis Cloud 端点。

注意

实时复制机制不能保证数据一致性。Redis 通过 pub/sub 发送键空间通知,这不提供保证交付。例如,在网络故障时,RIOT 可能会遗漏一些通知。

此外,根据源上数据结构的类型、大小和变化速率,RIOT 可能无法跟上变化流。例如,如果一个大型集合重复更新,RIOT 需要在每次更新时读取整个集合并将其传输到目标数据库。对于足够大的集合,RIOT 可能会落后,内部队列可能会满,导致更新丢失。

对于那些潜在有问题的迁移,建议结合 Redis 统计信息和 bigkeys/memkeys 以及 --mem-limit 进行一些初步大小调整。如果您需要帮助,请联系您的 Redis 客户团队。

更多信息,请参阅