为何redis哨兵集群只有2个节点没法正常工做?

因为redis的响应速度快,每秒支持的并发极高(号称10万),如今redis愈来愈流行了
redis支持的存储有: string, hash(map),list, set, sortset 同时可使用redis的setnx 来实现分布式锁
首先谈谈redis的哨兵模式:redis

哨兵支持对主从的监控,而且当主节点挂机以后,能够启动从节点升级为主节点继续提供服务
同时哨兵也支持对客户端提供发现服务,客户端经过链接哨兵从而获取主节点的信息,若是主节点挂机,在升级从节点为主节点以后,客户端经过哨兵能够链接上新的主节点
主节点和从节点之间经过同步写命令来保持数据一致(在启动的时候会马上先同步主节点的快照,保存主节点的信息)
判断节点是否宕机而且须要重启须要几个哨兵协同判断,当必定数量的哨兵(可配置) 认为主节点宕机才会去升级从节点
接下来谈谈redis的集群模式markdown

redis集群从多主多从共同支撑,至少须要三个主节点才能启动集群
每一个集群包含 16384个槽 ,每个主(从节点负责同步主节点的数据)负责存储其中的某一个槽,redis 经过对key的hash 肯定存储在哪个槽上面,
当须要加入新的节点或者删除节点的时候 ,redis 会去维护不一样主节点上面的槽,从而从新分配槽的所属
为何redis哨兵集群只有2个节点没法正常工做?并发

哨兵集群必须部署2个以上节点
若是哨兵集群仅仅部署了个2个哨兵实例,quorum=1分布式

+----+         +----+
| M1 |---------| R1 |
| S1 |         | S2 |
+----+         +----+

Configuration: quorum = 1
master宕机,s1和s2中只要有1个哨兵认为master宕机就能够还行切换,同时s1和s2中会选举出一个哨兵来执行故障转移
同时这个时候,须要majority,也就是大多数哨兵都是运行的,2个哨兵的majority就是2(2的majority=2,3的majority=2,5的majority=3,4的majority=2),2个哨兵都运行着,就能够容许执行故障转移
可是若是整个M1和S1运行的机器宕机了,那么哨兵只有1个了,此时就没有majority来容许执行故障转移,虽然另一台机器还有一个R1,可是故障转移不会执行
经典的3节点哨兵集群ide

+----+
       | M1 |
       | S1 |
       +----+
          |
+----+    |    +----+
| R2 |----+----| R3 |
| S2 |         | S3 |
+----+         +----+

Configuration: quorum = 2,majority
若是M1所在机器宕机了,那么三个哨兵还剩下2个,S2和S3能够一致认为master宕机,而后选举出一个来执行故障转移
同时3个哨兵的majority是2,因此还剩下的2个哨兵运行着,就能够容许执行故障转移
https://mp.weixin.qq.com/s/o1BSWnFO-PGBrK8HwfA7Ywcode