redis哨兵模式是redis的高可用架构的一种方式,它的出现是为了解决主从模式下主节点挂了不能自动故障转移的问题,下面是比较简单的哨兵的架构

实际上手搭建过哨兵的同学应该知道,一个哨兵里有个配置sentinel monitor mymaster 35.236.172.131 6379 1,但是也没配置从的ip和其他哨兵的ip,其实他们都是通过主这台机器来进行的关联,主是多么的重要啊
工作流程
1。哨兵 去每隔 1秒钟就像架构中所有的机器去ping一下,如果一台机器距离最后一次ping命令的时间超过
down-after-miliseconds配置的值就会被该哨兵标记为主观下线(SDOWN)
2。如果哨兵标记了主服务器为主观下线,接下来他就会去问问其他的哨兵(sentinelis-masterdown-by-addr 命令询问),喂 我说,主好像挂了,你们怎么 看,其他哨兵:什
么!? 我们去看看
3。当有足够多的哨兵(过半)都认识主挂了,就把主改为客观下线(ODOWN)
4。哨兵们坐在一起开始商量:丫挂了 我们应该选一个代理人出来当主啊,不然我们就是失职了,会被裁掉的,我选择我去做这件事吧。你们同意吗?(哨兵选出leader,is-master-down-by-addr命令询问是否同意我成为主 )
5。哨兵leader来再存活的从里找一个出来成为主,并且进行故障转移
问题(重点)来了,哨兵leader是怎么来选择从成为主呢?
- 过滤故障节点
- 根据优先级进行选择,配置文件slave-priority 配置的信息,默认100 ,值最低成为主
-
选择复制偏移量最大的从为主,这个是在主从复制时,主从都会维护一个自身的偏移量,可以简单理解为消息id
2.jpg - 选择runid最小的从成为主
runid可以通过info命令查看,redis每次重启runid都会变动,值越小说明 重启的时间越靠前
附一张流程图

这里线上使用时几个小细节,
1.redis使用时为了保证数据可靠性一般回开启持久化功能,然而持久化也是要消耗资源的,然而读写最终都是通过主来处理,因此这里建议主不开启持久化,让从开启就好了。
这样即保证了数据的安全性, 也避免持久化对主节点的影响
2.如果是1主多从的情况,使用线性结构,避免使用树形结构
