首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在启用群集模式时,redis-cli -管道产量会在批量上载到Elasticache时移动错误。

在启用群集模式时,redis-cli -管道产量会在批量上载到Elasticache时移动错误。
EN

Stack Overflow用户
提问于 2022-04-07 15:46:07
回答 1查看 751关注 0票数 1

我正在尝试使用redis-cli -管道将一些命令大容量上传到我的AWS Elasticache中,用于redis集群。这些命令来自通过自定义awk命令解析文件,这有助于生成一些HSET命令。awk命令位于自定义shell脚本中。当我的redis服务器的Elasticache禁用了集群模式时,执行以下操作就像一种魅力:

代码语言:javascript
复制
sh script_containing_awk.sh $FILE_TO_PARSE | redis-cli -h <Primary_endpoint> -p <port> --tls --cacert <path/to/cert> --pipe

由于内部项目的需求,在启用集群模式的情况下,重新创建了Redis服务器的Elasticache,因此我将-c标志添加到上面的命令中以指定为此。

在尝试使用启用集群模式的Redis服务器的Elasticache时,我看到了以下结果:

  • 我可以通过配置端点连接到集群,没有问题!
  • 单个命令上载工作(即:redis-cli -h <config_endpoint> -p <port> -c --tls --cacert <path/to/certs> SET key value)

从我的脚本到cli的管道输出将非常方便:

代码语言:javascript
复制
sh script_containing_awk.sh $FILE_TO_PARSE | redis-cli -h <config_endpoint> -p <port> -c --tls --cacert <path/to/cert> --pipe

但是,添加--pipe标志会导致“移动”错误。

我尝试修改脚本以包含{} (例如:HSET {user1}:hash field1 val1 field2 val2 ...括号,试图将键强制放到同一个集群插槽中,但我仍然会得到“移动”错误,并且我正在尝试批量上传数百万个键,因此我认为它们都不适合放在同一个位置。

是否有人有经验让--pipe使用启用集群模式的Redis/Elasticache?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-29 13:16:30

我相信您理解禁用群集模式与启用群集模式之间的核心区别在于,您的总键槽中存在分裂。

仅在上下文中;CMD -假设我们有4个节点集群,其中包含1个主副本和3个副本。如果我们有100个密钥插槽-所有的100个密钥插槽将在所有节点中。其中3个为只读命令服务,1个节点为所有命令服务。

CME -假设我们有4个节点被分割成两个碎片-一个副本和一个主节点。我们可以把它们看作逻辑子类,即。他们将有不同的关键插槽。理想的情况是50比50的分裂。

现在,移动的消息不一定是一个错误。当您连接到配置端点时,默认情况下您将连接到一个主节点(最初是随机选择的)。当您发出命令时,客户端发送该命令,主节点决定它是否有正确的哈希槽来服务该命令。

正如解释过的这里一样,如果节点没有您的客户端正在寻找的散列槽,它将使用移动消息重定向您。

因此,我假设移动消息在CME集群中有一定的期望。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71785191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档