无法向Redis群集添加值 - 群集已关闭

Sah*_*riq 3 cluster-computing redis redis-cluster

我有4个节点,3个是主节点,其中1个是从节点.我试图添加一个简单的字符串set foo bar,但每当我这样做,我得到这个错误:

(error) CLUSTERDOWN The cluster is down
Run Code Online (Sandbox Code Playgroud)

以下是我的群集信息

127.0.0.1:7000cluster info

cluster_state:fail

cluster_slots_assigned:11

cluster_slots_ok:11

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:4

cluster_size:3

cluster_current_epoch:3

cluster_my_epoch:3

cluster_stats_messages_sent:9262

cluster_stats_messages_received:9160
Run Code Online (Sandbox Code Playgroud)

我使用的是Redis-x64-3.0.503.请让我知道如何解决这个问题

群集节点:

87982f22cf8fb12c1247a74a2c26cdd1b84a3b88 192.168.2.32:7000 slave bc1c56ef4598fb4ef9d26c804c5fabd462415f71 1492000375488 1492000374508 3 connected

9527ba919a8dcfaeb33d25ef805e0f679276dc8d 192.168.2.35:7000 master - 1492000375488 1492000374508 2 connected 16380

ff999fd6cbe0e843d1a49f7bbac1cb759c3a2d47 192.168.2.33:7000 master - 1492000375488 1492000374508 0 connected 16381

bc1c56ef4598fb4ef9d26c804c5fabd462415f71 127.0.0.1:7000 myself,master - 0 0 3 connected 1-8 16383
Run Code Online (Sandbox Code Playgroud)

Bas*_*wer 5

只是为了加上并简化@neuront所说的内容.

Redis将数据存储在哈希槽中.为此,您需要了解Hasmaps或Hashtables的工作原理.对于我们的参考,redis有一个16384个槽的常量来分配和分发给所有主服务器.

现在,如果我们查看您发布的节点配置并使用redis文档引用它,您将看到结束数字表示分配给主服务器的插槽.

在你的情况下,这就是它的样子

... slave  ... connected
... master ... connected 16380
... master ... connected 16381
... master ... connected 1-8 16380
Run Code Online (Sandbox Code Playgroud)

因此,所有机器都连接在一起形成集群,但并不是所有的散列槽都被分配来存储信息.应该是这样的

... slave  ... connected
... master ... connected 1-5461
... master ... connected 5462-10922
... master ... connected 10923-16384
Run Code Online (Sandbox Code Playgroud)

你看,现在我们正在分配所有散列槽的范围,如文档所述

slot:哈希槽号或范围.从参数编号9开始,但总共可能有多达16384个条目(从未达到限制).这是此节点提供的散列槽列表.如果条目只是一个数字,则解析为这样.如果它是一个范围,则它的形式为start-end,表示该节点负责从头到尾的所有哈希槽,包括起始值和结束值.

特别是在您的情况下,当您使用密钥foo存储某些数据时,它必须已分配给未在群集中注册的其他某个插槽.

由于您在Windows中,因此您必须手动设置分发.为此你必须做这样的事情(这是在Linux,转换为Windows命令)

for slot in {0..5400}; do redis-cli -h master1 -p 6379 CLUSTER ADDSLOTS $slot; done;
Run Code Online (Sandbox Code Playgroud)

取自本文

希望它有所帮助.

  • Windows powershell 将所有插槽分配给名为 REDMST 的主节点 `for ($slot=0;$slot -le 16383;$slot++) { .\redis-cli.exe -h REDMST CLUSTER ADDSLOTS $slot }` (3认同)