high-concurrent-cache
  • Introduction
  • Redis
    • redis常用命令
      • 生产环境谨慎使用keys命令
      • Redis 命令参考
    • redis客户端
      • Jedis使用指南
      • redisson
      • redis连接池
      • jedisCluster详解
      • jedisCluster+SpringMVC整合
    • redis主从模式
      • 配置方式
      • 一主多从读写分离架构
    • redis持计划机制的讲解
      • 持久化
      • RDB详解
      • AOF详解
      • RDB与AOF异同比较
    • 哨兵机制详解(sentinel)
      • 哨兵使用架构(sentinel)
      • 哨兵工作原理/哨兵如何监控redis
      • 哨兵如何高可用
      • 哨兵内部通讯原理/自动发现 Sentinel 和从服务器
      • 基于哨兵的redis高可用架构
    • redisCluster集群
      • 架构分析
      • 搭建高可用集群
      • 分区存储详解
      • java客户端使用redisCluster
    • 实战场景
      • 高性能分布式缓存
      • 实现定时消息通知
      • 简单高速队列的实现与应用
      • 实现去重幂等性
      • 数据计数/订单号生成
      • 基于redis实现分布式锁
      • 排行榜
      • 使用Redis bitmaps进行快速、简单、实时统计
      • 利用Redis集合(Set)统计新增用户和次日留存率
    • Redis回收进程如何工作的? Redis回收使用的是什么算法?
    • Redis持久化数据和缓存怎么做扩容?
    • Redis 分区的优势、不足以及分区类型
    • Redis 大量数据插入
    • redis实现简单延时队列
    • 使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别?
    • Redis的bitmap讲解
    • 分布式锁的漫画教程
  • Memcached
    • Memcached概念
    • 安装配置
      • Linux安装
      • Windows安装
    • 集群搭建
    • 常用场景
    • 客户端命令
      • 客户端连接命令
      • Memcached 存储命令
        • Memcached set 命令
        • Memcached add 命令
        • Memcached replace 命令
        • Memcached append 命令
        • Memcached prepend 命令
        • Memcached CAS 命令
      • Memcached 查找命令
        • Memcached get 命令
        • Memcached gets 命令
        • Memcached delete 命令
        • Memcached incr 与 decr 命令
      • Memcached 统计命令
        • Memcached stats 命令
        • Memcached stats items 命令
        • Memcached stats slabs 命令
        • Memcached stats sizes 命令
        • Memcached flush_all 命令
    • Java客户端
    • memcached特点与redis区别
    • 一致性哈希算法原理
    • Memcache 高可用集群之magent实现主从
  • 互联网缓存架构设计
    • 常见的缓存架构方案
    • 缓存雪崩的解决方案
    • 缓存穿透的解决方案
    • 缓存击穿的解决方案
Powered by GitBook
On this page

Was this helpful?

  1. Redis
  2. 哨兵机制详解(sentinel)

哨兵工作原理/哨兵如何监控redis

Previous哨兵使用架构(sentinel)Next哨兵如何高可用

Last updated 5 years ago

Was this helpful?

Sentinel 通过配置文件发现Master,如下:

Sentinel 通过向Master发送 INFO 命令来自动获得所有Slave的地址

跟Master一样,Sentinel 会与每个被发现的Slave创建命令连接和订阅连接

Sentinel 会通过命令连接向被监视的主从服务器发送 HELLO 信息,该消息包含 Sentinel 的 IP、端口号、ID 等内容,以此来向其他 Sentinel 宣告自己的存在。与此同时,Sentinel 会通过订阅连接接收其他 Sentinel 的HELLO 信息,以此来发现监视同一个Master的其他 Sentinel

Sentinel 之间会互相创建命令连接,用于进行通信。

因为已经有主从服务器作为发送和接收 HELLO 信息的中介,所以 Sentinel之间不会创建订阅连接。

Sentinel 使用 PING 命令来检测实例的状态:如果实例在指定的时间内没有返回回复,或者返回错误的回复,那么该实例会被 Sentinel 判断为SDOWN(subjectively down,主观下线)。

注意:只有一台Sentinel将服务器标记为SDOWN不会触发Failover。只有一定数量的Sentinel都将该服务器标记为SDOWN后,服务器才会被标记为ODOWN(objectively down,客观下线),这时才会触发Failover过程。

参数down-after-milliseconds指定了 Sentinel 认为服务器已经断线所需的毫秒数。

参数quorum用来控制Sentinel投票数

注意:源码中SDOWN对应PFAIL消息,ODOWN对应FAIL消息

Automatic Failover

在下线Master的所有Slave中,选出一个数据状态最接近Master的Slave,选择的条件包括:Slave未下线、主从之间的连接断开时间最短,等等。

Sentinel 向被选中的Slave发送 SLAVEOF NO ONE ,将它升级为Master。

向其他Slave发送 SLAVEOF 命令,让它们复制新的Master。

image
image
image
image
image
image
image
image
image
image