如何在两个 Elasticache Redis 实例之间同步数据

问题描述 投票:0回答:2

我有两个 AWS Elasticache 实例,其中一个实例(比如说

instance A
)具有非常重要的数据集和连接,停机时间是不可接受的。由于这种情况,我没有进行正常的迁移(例如阻止源数据进行新写入、对其进行转储,然后将其恢复到新数据),而是尝试将
instance A
的数据同步到另一个 Elasticache 实例(让说
instance B
)。正如我所说,这个过程应该是
downtime-free
。为了做到这一点,我尝试了RedisShake,但由于AWS限制用户运行某些命令
bgsave
config
replicaof
slaveof
sync
等),RedisShake无法工作使用 AWS Elasticache。它给出了以下错误。

2022/04/04 11:58:42 [PANIC] invalid psync response, continue, ERR unknown command `psync`, with args beginning with: `?`, `-1`, 
[stack]: 
    2   github.com/alibaba/RedisShake/redis-shake/common/utils.go:252
            github.com/alibaba/RedisShake/redis-shake/common.SendPSyncContinue
    1   github.com/alibaba/RedisShake/redis-shake/dbSync/syncBegin.go:51
            github.com/alibaba/RedisShake/redis-shake/dbSync.(*DbSyncer).sendPSyncCmd
    0   github.com/alibaba/RedisShake/redis-shake/dbSync/dbSyncer.go:113
            github.com/alibaba/RedisShake/redis-shake/dbSync.(*DbSyncer).Sync
        ... ...

我已经尝试过rump,但它没有足够的稳定性来处理任何重要的过程。首先,它不是作为后台进程运行,当第一次同步完成时,它会被

signal: exit done
关闭,因此在第一次完成后它不会得到持续的更改。 其次,它在每次运行中识别创建/修改的
key/values
,例如,在第一次运行中键
apple
等于
pear
,它按原样同步到目的地,但是当我删除键
apple
并且它在源中的值并再次运行
rump
同步脚本,它没有在目标中被删除。所以基本上它并不是真正同步源和目标。另外,最后一次提交
rump
github 存储库是大约 3 年前。对我来说,这似乎有点过时的项目。

在所有这些信息和尝试之后,我的问题是,有没有办法同步两个

Elasticache for Redis
实例,正如我所说,在我的情况下没有停机的空间。如果有此类经验的你们能提出可靠的建议,我将不胜感激。我尝试过,但不幸的是没有找到。

非常感谢,

致以诚挚的问候。

amazon-web-services redis data-migration amazon-elasticache
2个回答
0
投票

如果这两个 Elasticache Redis 集群存在于同一账户但不同区域中,您可以考虑使用 AWS Elasticache global-datastore。

它对区域、节点类型有一些限制,并且两个集群在节点数量等方面应具有相同的配置

限制 - https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Redis-Global-Datastores-Getting-Started.html

否则,有一个简单的暴力机制,我相信你可以自己编写代码。

  1. 从 EC Redis 实例 A 创建客户端 EC2(我们称之为同步器)发布-订阅通道。
  2. 每当有新数据时,Sync-er 就会在 EC Redis 实例 B 上发出 WRITE 命令。

注意 - 您必须确保集群位于可连接的 VPC 中。 Elasticache 仅适用于 VPC 内的资源。如果您的实例 A 和实例 B 位于不同的 VPC 中,您必须对它们进行对等或通过 TransitGateway 连接它们。


0
投票

RedisShake的文档已经针对这种情况进行了解释:

首选

sync_reader
。 AWS ElastiCache 和 MemoryDB 未启用 默认情况下使用 PSync 协议,但您可以请求启用 PSync 通过提交票证进行协议。 AWS将提供更名的PSync 工单中的命令,例如
xhma21yfkssync
nmfu2bl5osync
。 该命令与
psync
命令效果相同,只是多了一个 不同的名字。用户只需修改
aws_psync
RedisShake配置文件中的配置项。对于单个 例如,写一对
ip:port@cmd
。对于集群实例, 全部写下
ip:port@cmd
,用逗号分隔。

不方便提交工单时,可以使用

scan_reader
。 值得注意的是,
scan_reader
会给 源数据库。

我建议您尝试提交支持票。

或者,您可以尝试在扫描模式下启用KSN支持来获取增量数据。

© www.soinside.com 2019 - 2024. All rights reserved.