我试图在集群故障转移期间测试我的软件行为,因此我想配置一个最简单的集群:一个主节点和两个从节点。我有以下内容的树文件 7000.conf - 7002.conf:
port 7000
cluster-config-file nodes.7000.conf
appendfilename appendonly.7000.aof
dbfilename dump.7000.rdb
pidfile /var/run/redis_7000.pid
include cluster.conf
cluster.conf的内容:
cluster-enabled yes
appendonly yes
maxclients 100
daemonize yes
cluster-node-timeout 2000
cluster-slave-validity-factor 0
然后我配置了 7000 运行从 0 到 16383 的所有槽,7001 和 7002 是 7000 的副本:
XXX 127.0.0.1:7002 slave YYY 0 1511389011347 4 connected
YYY 127.0.0.1:7000 myself,master - 0 0 4 connected 0-16383
ZZZ 127.0.0.1:7001 slave YYY 0 1511389011246 4 connected
然后我尝试通过 shutdown
命令或通过终止进程来摆脱 7000。其中一个奴隶应该将自己提升为主人,但没有人这样做:
ZZZ 127.0.0.1:7001 slave YYY 0 0 3 connected
YYY 127.0.0.1:7000 master,fail? - 1511389104442 1511389103933 4 disconnected 0-16383
XXX 127.0.0.1:7002 myself,slave YYY 0 1511389116543 4 connected
我等了几分钟,我的奴隶不想成为主人。如果我通过 cluster failover takeover
强制一个 slave 成为 master,它会非常乐意这样做(如果我重新启动 master,它就会变成 slave),但不是自动的。
我试过使用 cluster-node-timeout
- 没有帮助。
我做错了什么吗? Redis版本为3.2.11。
最佳答案
问题是 redis-cluster 的最小大小为 3 个主节点才能使自动故障转移正常工作。主节点相互监视并检测故障转移,因此在集群中只有一个主节点时,没有正在运行的进程能够检测到您的主节点已关闭。最少三个,是为了确保在任何节点宕机的情况下,整个集群的大多数都需要同意,所以至少你需要 3 个节点,仍然有超过一半的节点达到多数失败时查看。
Redis 集群教程在以下部分提到了这一点:https://redis.io/topics/cluster-tutorial#creating-and-using-a-redis-cluster
"Note that the minimal cluster that works as expected requires to contain at least three master nodes."
关于Redis 集群故障转移 : slave won't become master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47444797/