提问者:小点点

以最少的停机时间将Redis迁移到AWSElasticache


让我们从列出一些事实开始:

  • Elasticache不能成为我现有Redis设置的奴隶。真遗憾,那会更有效。
  • 我只有一个Redis服务器要迁移,大约有3gb的数据。
  • 停机时间必须少于10分钟。我假设通常的“停止站点,停止redis,提供带有快照的集群”将需要更长的时间。

类似于这个问题:如何将elasticacheredis集群设置为从集群?

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

  1. 设置Redis使用AOF并同时触发BGSAVE。
  2. 当BGSAVE完成时,为Elasticache集群提供RDB种子。
  3. 停止站点并关闭我的本地Redis实例。
  4. 使用aof-replay工具将AOF重放到Elasticache中。
  5. 再次启动站点,指向Elasticache集群。

我的问题:

  1. 我如何保证我的AOF文件从RDB文件结束的点开始,并且在两者之间不会写入数据?
  2. 是否有Redis维护者支持的AOF工具,或者它们都是第三方解决方案,因此(可能)可靠性有问题?*

*无意冒犯此类工具的任何作者,我相信它们很棒,我只是觉得使用与产品相同的团队编写的工具更有信心,以避免潜在的兼容性错误。


共3个答案

匿名用户

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

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

我猜10分钟保存文件并将其放入s3。
10分钟从该数据启动一个elasticache集群。给你十分钟额外的时间来配置和测试。

但是有一个简单的方法可以确切地知道多长时间。对它进行测试迁移。

  1. 不要停止您的实时系统
  2. 运行BGSAVE并获取Redis的转储(让一切正常运行)
  3. 移动转储S3
  4. 为它启动一个elasticache集群。

记下详细笔记,计时每一步,将命令复制到记事本窗口。

放置Word/excel文档,以便您拥有迁移文档。这样您就知道需要多长时间,并且没有任何惊喜。让我们知道它是如何进行的。

匿名用户

ElastiCache支持在线迁移。您可以使用开始迁移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和自管理集群master的IP和端口。您需要确保IP地址可以从ElastiCache节点访问。(IP地址的一个示例是自管理集群master的私有IP地址)。这API将使ElastiCache集群的master节点在自管理集群的master上调用'SLAVEOF'。这将建立一个复制流,并将开始将数据从自管理集群迁移到ElastiCache集群。在迁移过程中,ElastiCache集群的master将停止接受直接发送给它的写入。您可以从应用程序开始使用ElastiCache集群进行读取。

在ElastiCache集群中拥有所有数据后,您可以使用完全迁移API停止迁移。API将停止从自管理集群到ElastiCache集群的复制。

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

在此之后,ElastiCache集群的主机将开始接受写入。您可以从应用程序开始使用ElastiCache集群进行读写。

此迁移方法需要注意以下限制:

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

匿名用户

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

>

  • 你可以让你的应用程序同时写入两个redis实例,其中一个在EC。一旦缓存都“热”了,你可以重新启动你的应用程序,然后从EC缓存中读取。

    你最初可以迁移到EC2而不是EC。我想这不是你希望听到的。这很容易做到,因为你可以将EC2设置为redis实例的药膏。此外,从EC2迁移到EC稍微容易一些(数据已经在AWS上),所以对拥有大量数据集的用户有好处。

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