迁移自托管 Redis 集群数据至 Amazon ElastiCache

简介

在本课程中,您将学习如何使用 Amazon ElastiCache 将自托管 Redis 集群迁移到全托管集群。首先,我们介绍为什么要使用 ElastiCache 来管理 Redis 集群。然后介绍如何将现有 Redis 集群迁移至 ElastiCache。学习完本课程后,您应能够轻松将现有集群迁移至 ElastiCache。

 时长

30-45 分钟

为什么使用 ElastiCache?

ElastiCache 是一项全托管服务,用于在 Amazon Web Services (AWS) 中实现内存数据存储。Redis 和 Memcached 等内存数据存储可以用来存储各种工作负载,包括查询缓存和会话存储。内存数据存储的延迟是亚毫秒级,因而支持高速、低延迟工作负载。

使用 ElastiCache 后,由 AWS 负责管理您的集群运维工作,让您的团队能够全身心投入创新。在本课程实验中,我们将使用 ElastiCache for Redis,该服务支持集群扩展、实例故障转移、数据备份和软件更新。

课程内容

在本课程中,您将学习如何将自托管 Redis 集群迁移至 Amazon ElastiCache 上的全托管集群。本课程实验分为四个步骤。

1. (可选)在 Amazon EC2 中创建源 Redis 集群

如果您还没有实验用的源数据库,需要新建一个源数据库,请前往 Amazon EC2 控制台。点击 Launch instance(启动实例),启动 Amazon EC2 实例创建向导。

Amazon EC2 实例创建向导的第一步是选择 Amazon 机器镜像 (AMI)。选择默认 x86 架构的 Amazon Linux 2 AMI,然后点击 Select(选择)。

在下一页面上,为您的 Amazon EC2 实例选择实例类型。在本实操教程中,可以使用默认的 t2.micro 实例类型。AWS 免费套餐支持这种实例类型的实例。点击 Review and Launch(查看并启动)。

下一页面显示了 Amazon EC2 其余设置的默认选项。在此实验使用场景中,我们使用这些默认选项。点击 Launch(启动)继续。

在点击 Launch(启动)后显示的页面中,指定密钥对,用于通过 SSH 访问该新建 Amazon EC2 实例。从下拉列表中选择 Create a new key pair(创建新密钥对),新建密钥对。然后,将密钥对命名为 elasticache-migration,并点击 Download Key Pair(下载密钥对),将该密钥对下载到您的计算机上。最后,点击 Launch Instances(启动实例),创建实例。

弹出页面显示您的实例正在启动。点击 View Instances(查看实例),查看该 Amazon EC2 实例信息。

实例初始化时,实例的 Instance State(实例状态)显示为 pending(待处理)。请耐心等待,直到 Instance State(实例状态)显示为 running(正在运行)。

当 Instance State(实例状态)显示为 running(正在运行)时,便可以通过 SSH 访问实例了。

复制 IPv4 Public IP(IPv4 公网 IP)对应的值,然后在终端上运行以下命令,通过 SSH 访问该实例。

chmod 600 /path/to/elasticache-migration.pem
ssh -i /path/to/elasticache-migration.pem ec2-user@<实例 IPv4 公网 IP>

请务必在命令中指定您下载的 elasticache-migration.pem 文件的正确路径和正确的实例 IPv4 公网 IP 地址。

如果您无法连接到该 Amazon EC2 实例,请参阅使用 SSH 连接到 Linux 实例排查问题。

如果连接成功,终端输出应如下所示。

 

在终端上执行以下命令来安装 Redis。

sudo yum -y install gcc make
wget http://download.redis.io/releases/redis-5.0.6.tar.gz
tar xvzf redis-5.0.6.tar.gz
cd redis-5.0.6
make
sudo make install

安装 Redis 需要几分钟才能完成,因为系统会下载 Redis 源代码并根据您的机器编译 Redis。

Redis 编译完成后,在终端上运行以下命令,启动一个 Redis 集群。

redis-server --daemonize yes --protected-mode no

注意:在此演示中,我们在禁用保护模式下运行 Redis 集群。在生产使用场景中,请启用保护模式。

命令运行成功后,显示的输出内容表示 Redis 集群正在启动中。您可以在终端运行 ping 命令,测试访问 Redis 集群。

redis-cli PING

此命令应返回 PONG 响应。

如果返回 PONG,说明 Redis 集群已在 Amazon EC2 实例上启动。

最后,将一些示例数据加载到 Redis 集群中,用于测试数据迁移。在终端上运行以下命令,将 10 个键插入 Redis 集群。

redis-cli DEBUG POPULATE 10 test 10000

运行成功后,终端上应显示 OK 响应。这说明已将 10 个键加载到了 Redis 集群中。每个键都有一个 test 前缀。

在本模块中,您创建了一个自托管的源 Redis 集群。下面,您可以测试如何将此集群迁移至 ElastiCache。在下一个模块中,您需要创建一个 ElastiCache 集群。

2. 创建 ElastiCache 集群

在本模块中,您将创建一个 ElastiCache 集群,作为联机迁移现有数据的目的地主集群。

首先,前往 ElastiCache 控制台。在左侧导航栏,选择 Redis,然后点击 Create(创建),新建一个集群。

在 ElastiCache 集群创建向导中,选择 Redis 作为 Cluster engine(集群引擎)。不要勾选 Cluster Mode enabled(启用集群模式),因为集群模式不支持联机迁移。

设置 Redis 集群名称和描述,并选择集群节点的实例类型。

在 Advanced Redis settings(高级 Redis 设置)中,为 Redis 集群创建一个子网组。子网组是指 Redis 集群所在的 Amazon Virtual Private Cloud (Amazon VPC) 中的一组网络子网。

在 Security(安全性)部分中,选择与 Amazon EC2 上的源 Redis 集群相同的安全组。不要启用静态加密或传输中加密,因为在联机迁移期间不支持这些功能。

其他选项保留默认设置即可。滚动到页面底部,点击 Create(创建)。

点击 Create(创建)后,您应该会在 ElastiCache 控制面板中看到您的集群。集群在初始化期间,其 Status(状态)会显示为 creating (正在创建)。

在等待 ElastiCache 集群创建期间,前往 Amazon EC2 控制台的 Security Groups(安全组)模块。找到并选中 Amazon EC2 实例和 ElastiCache 集群的安全组。

在安全组详细信息页面,点击 Edit inbound rules(编辑入站规则)。

在安全组中添加一条入站规则,允许安全组中的所有实例通过 6379 端口的 TCP 入站流量。这样,您的 ElastiCache 集群便可以访问运行在您的 Amazon EC2 实例上的自托管 Redis 集群。

页面应如下所示。

添加规则后,点击 Save rules(保存规则),确认更改。

返回 ElastiCache 控制台。您应当会看到创建的 Redis 集群。当集群的 Status(状态)变为 available(可用)后,就可以继续下一个模块了。

在本模块中,您使用 ElastiCache 创建了一个全托管的 Redis 集群。另外,还在安全组中添加了入站规则,允许您的 ElastiCache 节点访问运行在 Amazon EC2 上的自托管 Redis 集群。

在下一个模块中,将自托管 Redis 集群中的现有数据联机迁移至 ElastiCache。

如果您在生产环境中使用 ElastiCache,最好使用 AWS CloudFormation,利用基础设施即代码原则管理您的资源。通过创建 CloudFormation 堆栈,可以创建 ElastiCache 集群、ElastiCache 子网组、安全组以及相关的网络基础设施。

3. 将现有 Redis 集群数据迁移至 ElastiCache 集群

在本模块中,您将执行联机迁移,将数据从现有的自托管 Redis 集群迁移至 ElastiCache 上的全托管 Redis 集群。

联机迁移会将一个 ElastiCache 节点配置为自托管 Redis 集群的副本。数据复制完成后,您可以将应用程序切换为直接使用 ElastiCache 集群,并停止迁移。

在配置迁移时,您需要使用 Amazon EC2 上自托管 Redis 集群的私有 IP 地址,所以先获取该 IP 地址。前往 Amazon EC2 控制台,找到托管 Redis 集群的实例。在实例详情页,复制并保存 Private IPs(私有 IP)的值,供下一步使用。

前往 ElastiCache 控制台,开始联机迁移。选中您的 ElastiCache 集群,然后从 Actions(操作)下拉列表中选择 Migrate Data from Endpoint(从端点迁移数据)。

在弹出的配置窗口中,输入 Amazon EC2 实例的私有 IP 地址作为 Source Redis Endpoint(源 Redis 端点)。然后点击 Start Migration(开始迁移)。

如果您更喜欢使用 AWS 命令行界面 (AWS CLI) 启动联机迁移,可以使用 start-migration 命令。

aws elasticache start-migration \
    --replication-group-id <replicationGroupId> \
    --customer-node-endpoint-list ‘[
            {
                        “Address”: “<privateIPOfEC2Instance>”,
                        “Port”: 6379
            }
    ]’

务必将 <replicationGroupId> 和 <privateIPOfEC2Instance> 替换为您自己的配置值。

当迁移任务开始后,您的 Redis 集群的 Status(状态)会显示为 modifying(正在修改),表示正在将其添加到现有集群。

您的 ElastiCache 集群成功连接到您的自托管 Redis 集群后,Status(状态)应显示为 migrating(正在迁移)。

您可以通过多种方法检查 ElastiCache 联机迁移的状态。

第一种方法是,可以查看主节点的监控项。选中您的 ElastiCache 集群,之后界面会显示集群的节点。选中主节点,在 ElastiCache 控制面板中查看该节点的 Amazon CloudWatch 监控项。

滚动到 Master Link Health Status(主链接健康状态)图表。此图表的值为 1 时,说明您的 ElastiCache 集群正在从您的自托管 Redis 集群复制数据。

检查 ElastiCache 联机迁移状态的第二种方法是,连接到 ElastiCache 集群本身。

在 ElastiCache 控制台中找到您的 ElastiCache 集群的主端点。复制主机名,但不要包含末尾的端口号。

如果您连接自托管 Amazon EC2 实例的 SSH 连接仍保持着,则可以从该实例连接到您的 ElastiCache 集群。

在终端上运行以下命令,连接到该集群。

redis-cli -h <yourPrimaryEndpoint>

务必将 <yourPrimaryEndpoint> 替换为上一步中获得的 ElastiCache Redis 集群主机名。执行此命令后,将连接到您的 ElastiCache Redis 集群。

然后,保持与 Redis 集群的连接,并执行以下命令。

KEYS *

您应当会看到之前添加到自托管 Redis 集群的 10 个测试键。

下图展示了连接到 Redis 集群并执行 KEYS 命令后的终端输出。

如果联机迁移没有将这些键复制到全托管 ElastiCache 集群,您可以在导航窗格中选择 Events(事件),调试该进程。

Event(事件)页面显示了迁移相关信息,包括开始时间、完成时间以及成功与否。如果迁移失败,此页面会显示失败的相关信息。

在本模块中,您在 ElastiCache 中开始了联机迁移,将数据从 Amazon EC2 中的自托管 Redis 集群复制到 ElastiCache 中的全托管 Redis 集群。这种方法能够安全可靠地将数据迁移到 ElastiCache。

在下一个模块中,您将完成迁移并清理资源。

4. 完成迁移并清理资源

如果您严格按照本课程中的所有步骤进行操作,那么现在您应该在 ElastiCache 中创建了一个新的全托管 Redis 集群,并将现有数据从自托管 Redis 集群迁移到了新的 Redis 集群。在最后一个模块中,您将学习如何完成迁移,以及如何清理资源。

初始迁移完成且所有数据都同步至新的 Redis 集群后,就可以将您的应用程序工作负载迁移到新的 Redis 集群了。在您的应用程序配置中,将现有的 Amazon EC2 实例端点更改为您的 ElastiCache 端点。

可以在 ElastiCache 控制台中查看 ElastiCache 集群的 Primary Endpoint(主端点)。

当您将配置切换到新的 ElastiCache 集群,并验证迁移结果完全符合预期后,可以停止迁移。

在控制台中选中您的 ElastiCache 集群,然后从 Actions(操作)下拉列表中选择 Stop Data Migration(停止数据迁移)。

这会从自托管 Redis 集群中移除 ElastiCache 这个副本节点。

当 ElastiCache 节点作为副本节点从自托管 Redis 集群中移除后,ElastiCache 集群的 Status(状态)显示为 available(可用)。

接下来,可以删除托管自托管 Redis 集群的 Amazon EC2 实例。务必在确认迁移已成功完成并且不再需要现有实例时,才删除该实例。

前往 Amazon EC2 控制台。选中您的 Amazon EC2 实例,然后从 Actions(操作)下拉列表中依次选择 Instance State > Terminate(实例状态 > 终止)。

如果您的 ElastiCache 集群仅用于当前实验,现在也可以删除它了。前往 ElastiCache 控制台。选择您的 ElastiCache 集群,然后从 Actions(操作)下拉列表中选择 Delete(删除)。

几分钟后,您的 ElastiCache 集群应该就会被删除。

在本模块中,您学习了如何迁移应用程序到新的全托管 Redis 集群。另外,还学习了如何停止从自托管 Redis 集群至全托管 ElastiCache 集群的迁移任务,以及如何删除 Amazon EC2 上的自托管 Redis 集群。

总结

总的来说,在本课程中,您成功地将在运行在 Amazon EC2 上的自托管 Redis 集群迁移至了 ElastiCache 上的全托管 Redis 集群。您成功地使用 ElastiCache 联机迁移操作将数据安全可靠地复制到了新集群。