将Redis迁移到AWS Elasticache,停机时间最短

时间:2016-06-13 10:55:59

标签: amazon-web-services redis data-migration

让我们首先列出一些事实:

  • Elasticache不能成为我现有Redis设置的奴隶。真正的耻辱,那会更有效率。
  • 我只有一台要迁移的Redis服务器,大约有3GB的数据。
  • 停机时间必须少于10分钟。我认为通常的“停止站点,停止redis,使用快照配置群集”将花费更长的时间。

与此问题类似:How do I set an elasticache redis cluster as a slave?

关于这可能如何运作的一个想法:

  1. 将Redis设置为使用AOF并同时触发BGSAVE。
  2. 当BGSAVE完成时,为Elasticache集群配置RDB种子。
  3. 停止该网站并关闭我当地的Redis实例。
  4. 使用aof-replay工具将AOF重播为Elasticache。
  5. 再次启动该站点,指向Elasticache集群。
  6. 我的问题:

    1. 我如何保证我的AOF文件在RDB文件结束的时候开始,并且不会写入任何数据?
    2. 是否有Redis维护人员支持的AOF工具,或者它们都是第三方解决方案,因此(可能)可靠性有问题吗?*
    3. *对于此类工具的任何作者都没有违法行为,我确信它们非常棒,我只是对使用同一团队编写的工具更有信心,以避免潜在的兼容性错误。

3 个答案:

答案 0 :(得分:3)

  

我只有一台要迁移的Redis服务器,大约有3GB的数据

我会停止,将REDIS保存到S3,然后将其上传到新的群集。

我猜10分钟保存文件并将其输入s3 从该数据中启动弹性缓存集群需要10分钟。 给你十分钟的时间进行配置和测试。

但是有一种简单的方法可以确切知道多长时间。 做一次测试迁移。

  1. 不要停止你的直播系统
  2. 运行BGSAVE并获取Redis的转储(让一切正常运行)
  3. 移动转储S3
  4. 为它启动弹性缓存集群。
  5. 详细说明,每步操作一次,将命令复制到记事本窗口。

    放置Word / Excel文档,以便拥有迁移文档。这样你知道它需要多长时间,并没有惊喜。让我们知道它是怎么回事。

答案 1 :(得分:1)

ElastiCache具有联机迁移支持。您可以使用start-migration API开始从自我管理群集到ElastiCache群集的迁移。

aws elasticache start-migration --replication-group-id <ElastiCache Replication Group Id> --customer-node-endpoint-list "Address='<IP Address>',Port=<Port>"

API的输入是您的ElastiCache复制组ID以及自我管理群集的主服务器的IP和端口。您需要确保可以从ElastiCache节点访问该IP地址。 (示例IP地址将是您自己管理的群集的主服务器的专用IP地址)。此API将使ElastiCache集群的主节点在您自己管理的集群的主节点上调用“ SLAVEOF”。这将建立复制流,并将开始将数据从自我管理群集迁移到ElastiCache群集。在迁移期间,ElastiCache群集的主服务器将停止接受直接发送给它的写入。您可以从应用程序开始使用ElastiCache集群进行读取。

一旦所有数据都存储在ElastiCache集群中,就可以使用complete-migration API停止迁移。该API将停止从自我管理群集到ElastiCache群集的复制。

aws elasticache complete-migration --replication-group-id <ElastiCache Replication Group Id>

此后,ElastiCache群集的主服务器将开始接受写入。您可以从应用程序开始使用ElastiCache集群进行读取和写入。

此迁移方法要注意的以下limitations

  • 现有或新创建的ElastiCache部署应满足以下迁移要求:
  • 使用Redis引擎5.0.5或更高版本禁用集群模式。
  • 它未启用加密传输或静态加密。
  • 它具有启用了自动故障转移的多可用区。
  • 它具有足够的内存来容纳来自EC2实例上Redis的数据。要配置正确的保留内存设置,请参阅管理保留内存。

答案 2 :(得分:0)

有几种方法可以在不停机的情况下迁移数据。但它们很难实现。

  1. 您可以让您的应用同时写入两个redis实例 - 其中一个将在EC上。一旦缓存都“热”,您就可以重新启动应用程序,并从EC缓存中读取。

  2. 您最初可以迁移到EC2而不是EC。我想,并不是你真正希望听到的。这很容易做到,因为您可以将EC2设置为redis实例的salve。此外,从EC2迁移到EC更容易一些(数据已经在AWS上),因此对于拥有大量数据的用户来说有一个好处。

  3. 理论上,您可以拦截来自客户端的命令并将其发送给EC,从而有效地“复制”。但是这需要一些编程(我不相信像这样的工具存在ATM)并且对于多个短暂的客户端会很难。