I am running 6 redis nodes ,3 masters and 3 slaves , every master has 1 slave .
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.17.0.5:6382 to 172.17.0.2:6379
Adding replica 172.17.0.6:6383 to 172.17.0.3:6380
Adding replica 172.17.0.7:6384 to 172.17.0.4:6381
The clustering is running and I can SET and GET Keys.
I shutdown master1 172.17.0.2:6379 , slave1 (172.17.0.5:6382) has became master ,cluster is still running .
I shutdown slave1 (172.17.0.5:6382) , I tried to SET keys I have got this error
(error) CLUSTERDOWN The cluster is down
What I expected when I shutdown master1 and slave1 , cluster will still running and accepts redis operations but the opposite has happened.
What is the reason behind this ?
Is it applicable to solve this problem without starting master1 or slave1 again ?
答案 0 :(得分:1)
由于某些插槽存储在master1和slave1中,如果两个插槽均关闭,则群集中的任何节点将不再覆盖这些插槽。发生这种情况时,默认情况下,群集已关闭。您可以通过更改cluster-require-full-coverage
选项来修改行为。
引用redis.conf
:
默认情况下,Redis群集节点如果检测到,则停止接受查询 至少发现一个哈希槽(没有可用的节点正在服务 它)。这样,如果群集部分关闭(例如, 不再覆盖哈希槽),所有集群最终成为 不可用。它会在所有 插槽再次被盖住。
但是有时您希望集群的一部分工作, 继续接受对键空间部分的查询,即 仍然覆盖。为此,只需设置 将cluster-require-full-coverage选项设置为no。
cluster-require-full-coverage是
更新:
通常,为了确保覆盖所有插槽,您可以使用N
个主服务器和N + 1
个从属服务器设置集群。然后为每个主机分配一个从机,即N -> N
。额外的从站可以从随机主站复制数据。当您的主机之一发生故障时,相应的从机将成为新的主机。然后,您可以使额外的从属服务器从新的主服务器复制数据。
总之,您必须确保每个主机在任何时候都至少具有一个从机。