一文了解Redis哨兵模式( 二 )


哨兵节点的启动有两种方式,二者作用是完全相同的:
redis-sentinel sentinel-26379.confredis-server sentinel-26379.conf --sentinel 
按照上述方式配置和启动之后,整个哨兵系统就启动完毕了 。可以通过redis-cli连接哨兵节点进行验证,如下图所示:可以看出26379哨兵节点已经在监控mymaster主节点(即192.168.92.128:6379),并发现了其2个从节点和另外2个哨兵节点 。

一文了解Redis哨兵模式

文章插图
图片
此时如果查看哨兵节点的配置文件,会发现一些变化,以26379为例:
一文了解Redis哨兵模式

文章插图
图片
其中,dir只是显式声明了数据和日志所在的目录(在哨兵语境下只有日志);known-slave和known-sentinel显示哨兵已经发现了从节点和其他哨兵;带有epoch的参数与配置纪元有关(配置纪元是一个从0开始的计数器,每进行一次领导者哨兵选举,都会+1;领导者哨兵选举是故障转移阶段的一个操作,在后文原理部分会介绍) 。
3.  演示故障转移哨兵的4个作用中,配置提供者和通知需要客户端的配合,本文将在下一章介绍客户端访问哨兵系统的方法时详细介绍 。这一小节将演示当主节点发生故障时,哨兵的监控和自动故障转移功能 。
(1)首先,使用kill命令杀掉主节点:
一文了解Redis哨兵模式

文章插图
图片
(2)如果此时立即在哨兵节点中使用info Sentinel命令查看,会发现主节点还没有切换过来,因为哨兵发现主节点故障并转移,需要一段时间 。
一文了解Redis哨兵模式

文章插图
图片
(3)一段时间以后,再次在哨兵节点中执行info Sentinel查看,发现主节点已经切换成6380节点 。
一文了解Redis哨兵模式

文章插图
图片
但是同时可以发现,哨兵节点认为新的主节点仍然有2个从节点,这是因为哨兵在将6380切换成主节点的同时,将6379节点置为其从节点;虽然6379从节点已经挂掉,但是由于哨兵并不会对从节点进行客观下线(其含义将在原理部分介绍),因此认为该从节点一直存在 。当6379节点重新启动后,会自动变成6380节点的从节点 。下面验证一下 。
(4)重启6379节点:可以看到6379节点成为了6380节点的从节点 。
一文了解Redis哨兵模式

文章插图
图片
(5)在故障转移阶段,哨兵和主从节点的配置文件都会被改写 。
对于主从节点,主要是slaveof配置的变化:新的主节点没有了slaveof配置,其从节点则slaveof新的主节点 。
对于哨兵节点,除了主从节点信息的变化,纪元(epoch)也会变化,下图中可以看到纪元相关的参数都+1了 。
一文了解Redis哨兵模式

文章插图
图片
4.  总结哨兵系统的搭建过程,有几点需要注意:
(1)哨兵系统中的主从节点,与普通的主从节点并没有什么区别,故障发现和转移是由哨兵来控制和完成的 。
(2)哨兵节点本质上是redis节点 。
(3)每个哨兵节点,只需要配置监控主节点,便可以自动发现其他的哨兵节点和从节点 。
(4)在哨兵节点启动和故障转移阶段,各个节点的配置文件会被重写(config rewrite) 。
(5)本章的例子中,一个哨兵只监控了一个主节点;实际上,一个哨兵可以监控多个主节点,通过配置多条sentinel monitor即可实现 。

【一文了解Redis哨兵模式】


推荐阅读