redis sentinel架构详解

redis sentinel是什么

这篇文章只来讲说redis哨兵是什么,前面在说redis主从架构里反复提到了一个高可用,即当咱们的master节点宕机挂掉,咱们会选举一个slave来晋升master来保证咱们服务的可用性。 redis sentinel是redis官方提供的一个解决redis高可用的实现,其功能就是咱们上述提到的,它能够对咱们的节点进行监控,以及上述所提到的进行一个完美的迁移流程,以及通知咱们客户端。redis

        例如当master宕机,咱们在某台slave上执行slaveof no one命令让这个从节点再也不属于任何master,本身成为master,其他slave执行slaveof new master命令来对这个新master进行同步,但这里会有个问题,咱们不知道什么时候master节点会不可用,没法及时手动去解决,并且出现这种问题咱们容易手忙脚乱。还有当master发生改变时,如何通知咱们的客户端?这时就能够使用redis sentinel了。架构

来张图说下sentinel的架构:spa

        首先,你能够把一个sentinel想象是一个redis的进程,不一样的是sentinel不负责存储数据,它是负责对redis的一个故障判断、故障转移以及通知客户端的功能。另外,由上图能够看出sentinel不是一个而是多个,这样一来能够保证咱们判断故障的一个公平性(后面能够设置几个sentinel认为节点有故障才算数),同时也保证了咱们的高可用(即当一个sentinel节点挂了,仍然能够保证咱们这个sentinel机制是完美的)。进程

        那对客户端来讲就不再会直接从redis中获取信息,也就是说在咱们客户端中不会记录redis的地址(某个IP),而是记录sentinel的地址,这样咱们能够直接从sentinel获取的redis地址,由于sentinel会对全部的master、slave进行监控,它是知道到底谁才是真正的master的,例如咱们故障转移,这时候对于sentinel来讲,master是变了的,而后通知客户端。而客户端根本不用关心到底谁才是真正的master,只关心sentinel告知的master。资源

redis sentinel故障转移的步骤

1.多个sentinel发现并确认master有问题。同步

2.选举出一个sentinel做为领导。(由于故障转移一系列操做只须要一个sentinel就能够完成)ast

3.从多个slave中选出一个slave做为新的master监控

4.通知其他slave成为新的master的slave高可用

5.通知客户端主从变化(这样客户端就不会有读取失败的问题)im

6.等待老的master复活成为新的master的slave(sentinel依然会对老的master进行监控是否复活)

这里简单提一下:咱们的一套sentinel是能够监听多套master+slave的组合,这样能够有效节省资源,其中每套master+slave会使用一个master-name做为一个标识。

相关文章
相关标签/搜索