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

s71maibg  于 2023-10-15  发布在  Redis
关注(0)|答案(4)|浏览(238)

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

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

类似于这个问题:如何将elasticache redis集群设置为从集群?
关于这可能如何工作的一个想法:
1.设置Redis使用AOF并同时触发BGSAVE。
1.当BGSAVE完成时,为Elasticache集群提供RDB种子。
1.关闭站点并关闭本地Redis示例。
1.使用aof-replay工具将AOF重放到Elasticache中。
1.再次启动站点,指向Elasticache集群。
我的问题:
1.我如何保证AOF文件的开始点正好是RDB文件的结束点,并且在这之间不会写入任何数据?

  1. Redis的维护者是否支持AOF工具,或者它们都是第三方解决方案,因此(可能)可靠性有问题?*
  • 无意冒犯这些工具的任何作者,我相信他们很棒,我只是觉得使用由同一个团队编写的工具作为产品来避免潜在的兼容性错误更有信心。
w1jd8yoj

w1jd8yoj1#

我只有一个Redis服务器要迁移,大约有3GB的数据
我会暂停,将REDIS保存到S3,然后将其上传到一个新的集群。
我猜10分钟保存文件并将其导入s3。
10分钟就可以从这些数据启动一个elasticache集群。给你10分钟的时间来配置和测试。
但有一个简单的方法可以知道确切的时间。做一个迁移测试。
1.不要停止您的实时系统
1.运行BGSAVE并转储你的Redis(让一切正常运行)
1.移动转储S3
1.为它启动一个Elasticache集群。
做详细的笔记,记下每一步,把命令复制到记事本窗口。
放入一个Word/Excel文档,这样您就有了一个迁移文档。这样你就知道需要多长时间,没有惊喜。告诉我们进展如何。

ftf50wuq

ftf50wuq2#

ElastiCache支持在线迁移。您可以使用start-migration API启动从自管理集群到ElastiCache集群的迁移。

  1. 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集群后,您可以使用完全迁移API停止迁移。此API将停止从自管理群集到ElastiCache群集的复制。

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

在此之后,ElastiCache群集的主服务器将开始接受写入。您可以从应用程序开始使用ElastiCache群集进行读取和写入。
对于这种迁移方法,需要注意以下limitations

  • 现有或新创建的ElastiCache部署应满足以下迁移要求:
  • 使用Redis引擎5.0.5或更高版本时,它的集群模式被禁用。
  • 它没有启用传输中加密或静态加密。
  • 它具有多AZ,并启用了自动调整。
  • 它有足够的内存来容纳EC2示例上Redis的数据。要配置正确的保留内存设置,请参阅管理保留内存。
展开查看全部
dzjeubhm

dzjeubhm3#

有几种方法可以在不停机的情况下迁移数据。但它们更难实现。
1.你可以让你的应用程序同时写入两个redis示例,其中一个在EC上。一旦两个缓存都“热”了,你就可以重新启动你的应用,然后从EC缓存中读取。
1.您可以先迁移到EC2而不是EC。我猜这不是你想听到的这很容易做到,因为你可以将EC2设置为Redis示例的salve。此外,从EC2迁移到EC更容易(数据已经在AWS上),因此对于拥有大量数据集的用户来说是一个好处。
1.理论上,您可以拦截来自客户端的命令并将其发送到EC,从而有效地“复制”。但这需要一些编程(我不相信像这样的工具存在ATM),并会很难与多个,短暂的客户端。

zbdgwd5y

zbdgwd5y4#

你可以尝试一下RedisShake,它就是为了做这样的事情而设计的。
假设你有两个Redis示例:

  • 示例A:127.0.0.1:6379
  • 示例B:127.0.0.1:6380

创建一个新的配置文件shake.toml

  1. [sync_reader]
  2. address = "127.0.0.1:6379"
  3. [redis_writer]
  4. address = "127.0.0.1:6380"

要启动RedisShake,请运行以下命令:

  1. ./redis-shake shake.toml

数据将继续同步,您只需选择适当的时间进行切换。

展开查看全部

相关问题