引入

  在主从模型中讲到

  这个缺陷使得系统可用性大大降低。因此Redis专门提供了一个哨兵机制来实现自动故障检测和转移。

什么是哨兵

  哨兵(Sentinel)是一种特殊的Redis实例,与Redis存储实例一样,哨兵同样是基于配置的。

  你可以通过以下两种方式启动哨兵:

    redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel

哨兵需要做什么

  • 监控节点状态
  • 当Master节点故障时,自动提升Replication(Slave)为Master
  • 发送故障通知
  • 配置传播(就是把更新后的集群配置传播给其他哨兵进行更新,保持一致性)

怎么实现

  • 节点监控

      如图(图中S为Sentinel,M为Master,R为Replication即Slave),Sentinel模型集群中的每个Sentinel都在监控着每个节点,每隔一段时间会向每个节点发送PING,通过返回的PONG信息确认节点正常。
![](https://img2018.cnblogs.com/blog/915947/201903/915947-20190324152023792-97329795.png "Sentinel模型")

  Sentinel与监控的节点之间实现了SUB/PUB(发布订阅)机制,每次Sentinel发布PING消息只需要在频道上发布并接收订阅者返回的消息。

  • 故障检测与Failover

      在这里有两个重要概念:主观下线(sdown)以及客观下线(odown)。因为Sentinel的数量>=2,并且每个Sentinel都在监控着每个节点,因此Sentinel与节点之间的连接都存在着主观性,这个主观性取决于Sentinel与节点之间的网络连通性。对于单个Sentinel而言,当其通过PING发现某个节点无反应时,其认为节点为下线状态,由于这个决定是这个Sentinel主观认为的,因此将此决断称为主观下线(sdown)。当Sentinel中认为某个节点主观下线的数量超过某个值时:

    • 1.投票选举Sentinel
    • 2.选出Slave,提升为Master,并将更新后的配置广播给其他Sentinel,Master将同步下属Slave数据

参考文献

  [1]redisLab.[EB/OL]. https://redis.io/topics/sentinel. 2019.01-2019.03.

05-08 15:23