顺风车运营研发团队 方波
sentinel是redis的高可用解决方案,由一个或多个sentinel实例组成的系统可以同时监听多组master-slave实例(后面简称一组),当发现master进入下线状态时进行故障转移。
一:启动并初始化
redis-server /path/sentinel.conf --sentinel
redis-sentinel /path/sentinel.conf
1 初始化服务器, sentinel是一个运行在特殊模式下的redis服务器,使用了简要的命令表。
2 将普通redis服务器使用的代码替换成sentinel专用代码,sentinelcmds作为服务器命令表
3 初始化sentinel状态
4 使用配置文件初始化sentinel监听的主服务器列表,比如客观下线的投票数,故障转移时同时进行同步的slave数量等
5 向主服务器创建链接,命令链接和订阅链接

二:

1 获取master-slave信息,sentinel通过info命令来获取master和slave信息,并创建实例,创建命令和订阅链接,info命令频率为十秒一次。

2 sentinel向master-slave发送订阅信息,_s表示自己的信息,_m表示监视的master信息,同时接收来自别的sentinel发送的订阅信息,并根据ip port 运行ID等八个参数进行对比更新sentinel字典

3 sentinel发现了新的sentinel,将会在sentinel字典中创建对应的实例,还会创建命令链接,新的sentinel也会创建同样的链接,此时形成了互相链接的网络,对于监视同一组master-slave的sentinel会以每两秒的频率给监视服务器的__sentinel__:hello频道发送消息,表示自己的存在,同时也会接收别的sentinel发送的消息,按需要更新sentinel列表,并创建命令链接

4 检测主观下线状态,sentinel以每秒一次的频率给master slave sentinel实例发送ping,根据回复判断实例是否在线,当超过指定时常时,sentinel将这个实例判断为主观下线,此时sentinel会向监视这个实例的其他sentinel进行询问,是否同意这个服务器进入主观下线状态,当收到指定数量的下线判断后,sentinel将服务器判定为客观下线,并进行一次故障转移。

5故障转移步骤

1)sentinel挑选某个slave升级为master
2) sentinel给slave发送新的复制命令,使新的master成为slave的主服务器,所有服务器都开始复制新的master时,故障转移完成
3) sentinel监视下线的master,当他再次加入时将成为新master的slave

6 选举领头sentinel

1) 每个在线的sentinel被选举为leader的概率是均等的
2) 每次进行选举之后,所有sentinel的配置纪元都会自增一次,不论成功与否
3) 每一个配置纪元里面,所有sentinel都有一次将某个sentinel设置为局部leader,并且在这个配置纪元里面一旦设定就不会再更改
4) 每个发现主服务器进入客观下线的sentinel都可以要求其他sentinel将自己设为局部leader
5) 当一个sentinel(源)向另一个sentinel(目标)发送SENTINELi is-master-down-by-addr命令,且命令中的runid不是*而是源sentinel的运行ID时,表示要求目的sentinel将源sentinel设置为局部leader,并且遵循先到先得原则,后到的命令将被拒绝,并返回局部leader的runid和leader_epoch给源sentinel,源sentinel接收后对比是否是自己。
6) 如果一个sentinel被半数以上的sentinel设置为局部leader,那么这个sentinel就是新的leader
7) 如果在给定的时间内没有选举出leader,那么在一段时间后再次进行选举,直到选举出leader为止

             (runid, leader_epoch)

【Redis学习笔记】2018-06-14 Redis源码学习之sentinel相关推荐

  1. Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)

    Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...

  2. Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...

    Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4) 今天再次分析了Eva的源码,也看 ...

  3. Ui学习笔记---EasyUI的EasyLoader组件源码分析

    Ui学习笔记---EasyUI的EasyLoader组件源码分析 技术qq交流群:JavaDream:251572072   1.问题1:为什么只使用了dialog却加载了那么多的js   http: ...

  4. Kubernetes学习笔记之Calico CNI Plugin源码解析(一)

    女主宣言 今天小编为大家分享Kubernets Calico CNI Plugin的源码学习笔记,希望对正在学习k8s相关部分的同学有所帮助: PS:丰富的一线技术.多元化的表现形式,尽在" ...

  5. Kubernetes学习笔记之Calico CNI Plugin源码解析(二)

    女主宣言 今天小编继续为大家分享Kubernetes Calico CNI Plugin学习笔记,希望能对大家有所帮助. PS:丰富的一线技术.多元化的表现形式,尽在"360云计算" ...

  6. NODEMCU学习笔记-01 esp8266 WIFI杀手 源码上传版

    NODEMCU学习笔记-01 esp8266WIFI杀手 动手前的准备 NODEMCU和ESP8266 ARDUINO IDE GITHUB CSDN 让我们开始吧 连接开发板并安装驱动 安装ardu ...

  7. Delphi-IOCP学习笔记九======性能测试和IOCP源码下载5000个连接数

    刚刚的测试,服务端上图 开了5个客户端<每个客户端1000>进行测试. 内存视乎不是很多.客户端的发过来的数据包大小在4096+88字节左右. 测试Echo测试线程 procedure T ...

  8. MyBatis源码学习笔记(从设计模式看源码)

    文章目录 1.源码分析概述 ①.Mybatis架构分析 ②.门面模式 ③.设计模式的原则 2.日志模块分析 ①.适配器模型 ②.动态代理 ③.日志模块分析 3.数据源模块分析 ①.工厂模式 ②.数据源 ...

  9. go语言学习笔记(2)命令源码文件

    1.源码文件分类 环境变量GOPATH指向的是一个或多个工作区,而且每个工作区都会有以代码包为基本组织形式的源码文件. 源码文件分为三种,即:命令源码文件.库源码文件和测试源码文件. 2.什么是命令源 ...

  10. FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析

    在看FreeRTOS源码的时候,各个函数相互调用,各种参数相互传递,看的人云里雾里,越看越糊涂.为了搞清楚各个函数之间的相互关系,就边看源码,边画思维导图,用文字将函数功能描述出来,搞清楚整个函数框架 ...

最新文章

  1. 招聘|追觅科技VSLAM​、CV算法实习生招聘
  2. JQ无法修改input的type属性的替代解决方法
  3. hbase coprocessor的分析
  4. HTTPS访问站点,出现证书问题解决
  5. 魔方机器人需要特制魔方吗_解魔方的机器人攻略18 – 魔方快速算法
  6. POI的入门:绘制图形
  7. object-c 代理反向传值
  8. 当选院士!兰州大学教授斩获美国该领域最高荣誉!
  9. 先写一点informix的
  10. 20175320 2018-2019-2 《Java程序设计》第6周学习总结
  11. Eclipse中好用的快捷键
  12. DIV+CSS布局总结
  13. select2多选框无法手动排序问题[转载]
  14. 25.211 -- 物理层信道
  15. 一点经验:从五星填数中所学到的
  16. Python中import的用法总结
  17. 【弹子兵法】四国军棋棋盘、棋子与记谱【基础篇】
  18. CART回归树原理及示例
  19. 多任务学习(MTL)--学习笔记
  20. 五脚18.8数码管显示

热门文章

  1. [Node.js] 模块化 -- express模块
  2. numpy.random模块常用函数
  3. linux分区label,label英文什么意思单词讲解(Linux中为一个分区设定label)
  4. 7-84 点赞狂魔 (25 分)
  5. excel表中怎么插入visio_快速制作组织架构图,还在用Visio就out了,Excel简单三步搞定...
  6. java socket 读取文件_Java中Socket下载一个文本文件
  7. mysql5.1安装失败_解决MySQL5.1安装时出现Cannot create windows service for mysql.error:0
  8. font-weight属性
  9. ARM处理器详解(2)-Cortex R系列
  10. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...