redis sentinel架构详解

redis sentinel是什么

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

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

来张图说下sentinel的架构:

        首先,你可以把一个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就可以完成)

3.从多个slave中选出一个slave作为新的master

4.通知其余slave成为新的master的slave

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

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

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

猜你喜欢

转载自my.oschina.net/u/3371837/blog/1789790