Redis 集群故障转移 : slave won't become master

标签 redis cluster-computing failover

我试图在集群故障转移期间测试我的软件行为,因此我想配置一个最简单的集群:一个主节点和两个从节点。我有以下内容的树文件 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/

相关文章:

node.js - 如何让客户端下载一个非常大的动态生成的文件

ubuntu - 无法在 ubuntu 18.04 上安装 redis-server

c++ - 使用 sge 集群在 Matlab 下运行 C++ 代码?

java - 防止 ActiveMQ 重新连接失败时自动退出

amazon-web-services - AWS 替代 DNS 故障转移?

lua - Redis 链式命令

mysql - 在 Ubuntu 上启动 mysql 集群管理节点 (ndb_mgmd) 时出错

mysql - Percona Xtradb集群 : Error while getting data from donor node

linux - Keepalived 跟踪多个接口(interface)

redis - 仅当 Redis 存在 key 时如何进行 HSET?