vlambda博客
学习文章列表

为什么redis哨兵集群只有2个节点无法正常工作?

文章由小编综合整理 

文章来源:

https://blog.csdn.net/u010883383/article/details/77989145 https://blog.csdn.net/qq_25868207/article/details/79147469

由于redis的响应速度快,每秒支持的并发极高(号称10万),现在redis越来越流行了

redis支持的存储有: string, hash(map),list, set, sortset 同时可以使用redis的setnx 来实现分布式锁

首先谈谈redis的哨兵模式:

哨兵支持对主从的监控,并且当主节点挂机之后,可以启动从节点升级为主节点继续提供服务

同时哨兵也支持对客户端提供发现服务,客户端通过连接哨兵从而获取主节点的信息,如果主节点挂机,在升级从节点为主节点之后,客户端通过哨兵可以连接上新的主节点

主节点和从节点之间通过同步写命令来保持数据一致(在启动的时候会立刻先同步主节点的快照,保存主节点的信息)

判断节点是否宕机并且需要重启需要几个哨兵协同判断,当一定数量的哨兵(可配置) 认为主节点宕机才会去升级从节点

接下来谈谈redis的集群模式

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节点哨兵集群

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

Configuration: quorum = 2,majority

如果M1所在机器宕机了,那么三个哨兵还剩下2个,S2和S3可以一致认为master宕机,然后选举出一个来执行故障转移

同时3个哨兵的majority是2,所以还剩下的2个哨兵运行着,就可以允许执行故障转移

推荐阅读