【问题标题】:Redis cluster failover: slave won't become masterRedis集群故障转移:slave不会成为master
【发布时间】:2019-01-28 03:19:58
【问题描述】:

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

然后我尝试摆脱 7000 - 通过shutdown 命令,或通过终止进程。其中一个奴隶应该将自己提升为主人,但没有一个:

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 强制一个从属设备成为主控设备,这样做非常高兴(如果我重新启动主控设备,它就会成为从属设备),但不是自动的。

我尝试过使用cluster-node-timeout - 没有帮助。

我做错了吗? Redis 版本是 3.2.11。

【问题讨论】:

    标签: redis cluster-computing failover


    【解决方案1】:

    问题在于 redis-cluster 的最小大小为 3 个 master 才能使自动故障转移正常工作。主节点相互监视并检测故障转移,因此集群中只有一个主节点,没有运行进程能够检测到您的一个主节点已关闭。最少三个,是为了确保在任何节点宕机的情况下,整个集群的大多数人都需要同意,所以至少需要 3 个节点,仍然有超过一半的节点才能达到多数出现故障时查看。

    Redis-cluster 教程在以下部分中提到了这一点: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."
    

    【讨论】:

      【解决方案2】:

      请注意,即使有 3 个主节点,如果集群中发生如下故障,也不能保证自动故障转移:(M-Master / S-Slave)

      节点 1:M1 S3

      节点 2:M2 S1

      节点 3:M3 S2

      现在如果node 3出现故障,那么它在Node-1中的slave S3会自动提升为Master。Node-3恢复后一切正常,如下状态:

      Node-1: M1 M3

      节点 2:M2 S1

      Node-3: S3 S2

      现在您可能认为集群将继续轻松处理故障,因为此设置中有 3 个主节点。但是,如果 Node-1 发生故障,集群会因为 quorum 不满足而关闭,并且除非我们进行一些手动调整,否则永远不会启动。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2020-06-16
        • 1970-01-01
        • 2016-11-03
        • 2011-03-29
        • 2016-03-19
        • 2014-06-14
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多