Redis集群主从模式 - 无法添加键

12

我已经设置了Redis的主从配置,在同一台机器上有一个主服务器(端口为6379)和3个从服务器(端口为6380、6381、6382)。通过运行info命令,看起来集群已经正确设置,以下是输出结果:

# Replication
role:master
connected_slaves:3
slave0:ip=127.0.0.1,port=6380,state=online,offset=29,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=29,lag=1
slave2:ip=127.0.0.1,port=6382,state=online,offset=29,lag=1
master_repl_offset:43
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:42

但无论我在哪里尝试在主分支中添加新的密钥,都会收到以下错误提示:

(error) CLUSTERDOWN Hash slot not served

在 Mac OS X Yosemite 中使用 redis-3.0.7。


当您运行redis-cli -p 6379 cluster nodes时,会得到什么?看起来有一个哈希槽未被分配,这会导致整个集群崩溃。 - Rabea
你曾经解决过这个问题吗? - Eduardo
5个回答

11

9
修复插入时的槽位问题:
redis-cli --cluster fix localhost:6379

1

有一个哈希槽没有分配给任何主节点。通过查看以下命令的输出中的第9列来检查哈希槽(如果该节点没有哈希槽,则第9列将为空):

redis-cli -h masterIP -p masterPORT CLUSTER NODES

哈希槽可以通过以下命令分配。
redis-cli -h masterIP -p masterPORT CLUSTER ADDSLOTS SLOTNNUMBER

但是这必须针对每个槽号单独完成,不能遗漏。使用批处理脚本将其包含在for循环中。类似于以下内容:

for /L %a in (0,1,5400) Do redis-cli -h 127.0.0.1 -p 7001  cluster addslots %a

此外,在分配从节点到主节点之前,可以使用此命令。在完成设置并进行 ADDSLOTS 步骤后,SET 和 GET 命令可以正常工作。记得在 SET 前使用 -c 以启用 cluster support


1

您可以使用与redis捆绑的ruby脚本来创建集群,如下所述:

/usr/local/redis-3.2.11/src/redis-trib.rb create --replicas  1 192.168.142.128:7001  192.168.142.128:7002 192.168.142.128:7003  192.168.142.128:7004  192.168.142.128:7005 192.168.142.128:7006

0

问题出现在一个或多个Redis节点损坏,无法再提供其配置的哈希槽时。

您需要重新引导集群,以确保各节点同意要提供的哈希槽。

如果Redis节点包含数据库0中的数据或键,则必须在重新运行引导之前清除此数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接