文档章节

redis sentinel运行

bitone
 bitone
发布于 2016/03/24 00:20
字数 1208
阅读 94
收藏 2

sentinel 模式以100ms(理想情况下)的速度调用sentinelTimer

1、  执行sentinelCheckTiltCondition判断是否进入tilt模式

  1. 检查当前之间与sentinel.previous_time的时间差值,如果为负值或者大于阀值进入tilt模式,进入tilt模式会发送消息到+tilt频道

2、  执行sentinelHandleDictOfRedisInstances函数

  1. master执行sentinelHandleRedisInstance

i.              尝试重连如果断开连接的话

ii.              发送周期性命令

  1. 10000ms发送一个info命令

  2. a)         异步回复处理策略

i.              判断runnid,更新该masterrunnid如果现在ri->runnid = NULL, 如果非NULL 会比较两次runnid是否一致,如果不一致认为master重启过了,将发送消息到+reboot频道通知该master重启了

ii.               

  1. down_after_period小于1000ms,则在down_after_period时间内发送一个ping命令,否则以1000ms为周期发送

  2. a)         异步回复处理

i.              根据回复修改last_avail_timelast_ping_time last_pong_time

  1. 当回复PONGLOADINGMASTERDOWN时,last_avail_time设置为当前时间,last_ping_time设置为0

  2. Last_pong_time 设置为当前时间

 

  1. 大于2000ms发送一个hello

  2. a)         异步回复处理

i.              修改上次pub时间last_pub_time

iii.              检验tilt模式

  1. 当当前时间减去sentinel.tilt_start_time 大于30ping周期,一共30s时,取消tilt模式,并发送消息到频道-tilt

iv.              检查master是否主观下线

  1. 检验命令线路:当前时间- 命令连接创建时间,并且未收到ok(状态为PONG,LOADING,MASTERDOWN)的ping回复,并且当前时间-last_ping_time 大于 down_after_period/2 ,并且当前时间-last_pong_time 大于 down_after_perod/2。断开连接

  2. 检验pubsub线路:当前时间-pubsub链路建立时间大于最小重连周期15s,并且当前时间-上一次收到消息是3倍的publish周期,则kill掉连接

  3. 如果last_ping_time 不等于0(不等于0表示收到的ping回复不是PONG,LOADDING,MASTERDOWN的任意一种),并且当前时间-last_ping_time的差值大于down_after_peroid并且role_reportedslave,当前时间减去role_reported_time 大于down_after_peroid+2倍的info命令周期,设为主观下线,并发送消息到+sdown频道,否则取消主观下线,发送消息到-sdown频道(即master重新活起来了)

v.              检查master是否客观下线

  1. 首先它得是主观下线状态,如果不是主观下线状态取消客观下线,并发消息到-odown频道。

  2. 如果sentinel认为该master是主观下线,那么计算该master下面的sentinel认为该master是主观下线的个数,如果个数大于该masterquorum,则认为是客观下线,并发送消息到+odown频道

vi.              是否需要故障转移

  1. 前提必须是已经是客观下线状态

  2. 如果当前时间与上一次尝试故障转移的时间的差值小于该masterfailover_timeout2倍,写日志,return

  3. 如果不是以上的两种情况,开始故障转移

  4. a)         设置该masterfailover_state SENTINEL_FAILOVER_STATE_WAIT_START

  5. b)         设置该masterflagSRI_FAILOVER_IN_PROGRESS

  6. c)         发送sentinel is-master-down-by-addr 命令自荐为局部领头sentinel

i.              先到者先得或者请求者纪元大于被请求者的局部领导纪元,请求者将设为被请求者的局部领头sentinel

ii.              请求者收被请求者的应答后更新自己的为响应信息中指定的局部领头(可能是自己也可能是被请求者原来的局部领头sentinel,两者达成一致)

iii.              统计局部领头sentinel的得票数,超过一般为领头sentinel

 

  1. 领头sentinel进入SENTINEL_FAILOVER_STATE_SELECT_SLAVE状态

i.              找出有效的slave

  1. slave不能是SRI_S_DOWN|SRI_O_DOWN|SRI_DISCONNECTED的任意一个

  2. slave->slave_priority 不能为0

  3. slave->last_avail_time不能大于5sentinel ping 周期即5s

  4. slave->info_refresh时间必须是在3sentinel info时间周期内,即30s

  5. slave->master_link_down_time 不能大于(现在的时间-减去主观down的时间+10down_after_prioid

ii.              对有效的slave进行快速排序,对比slavepriority

iii.              第一个为推荐的slave

iv.              如果没有找到推荐的slave,清除failover标记,重新尝试

  1. 进入SENTINEL_FAILOVER_STATE_SEND_SLAVEOF_NOONE

i.              发送slaveof no one 命令给推荐的slave,使得其进入完成slavemaster的转换

  1. 进入SENTINEL_FAILOVER_STATE_WAIT_PROMOTION状态

i.              等待slave完成转换,检查当前时间与刚进入该状态的时间差值,当这个差值超过failover_time时,重置failover状态,重新尝试

ii.              通过向slave发送info命令,发现该slaverole变为master,说明完成slavemaster的转换,进入SENTINEL_FAILOVER_STATE_RECONF_SLAVES状态

  1. 进入SENTINEL_FAILOVER_STATE_RECONF_SLAVES状态

i.              slave发送slave of promoted_slave’s ip  prmmoted_slave’s port完成其他slavemaster为新的master

ii.              检查所有的slave状态是否完成指向新的master,所有以完成,这些状态信息来自于法案送info消息给slave,进入SENTINEL_FAILOVER_STATE_UPDATE_CONFIG状态。

  1. 进入SENTINEL_FAILOVER_STATE_UPDATE_CONFIG状态

重置信息


© 著作权归作者所有

bitone
粉丝 3
博文 11
码字总数 11963
作品 0
杭州
程序员
私信 提问
redis的哨兵(sentinel)配置和python程序应用示例

一、Sentinel概述: 当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,...

青苗飞扬
2017/10/19
0
0
Redis高可用方案之Sentinel

很多网站都使用Redis作为自己的缓存系统,网站要做到高可用,它使用的缓存系统自然也必须支持高可用,这里就介绍一下Redis的高可用方案Sentinel。 Sentinel是Redis官方提供的一种高可用方案(...

fifadxj
2016/02/05
902
0
Redis Sentinel机制与用法(一)

Sentinel spring 集群配置: 见下方留言代码。 概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的...

洋哥6
2015/10/06
14.4K
5
[喵咪Redis]Redis-Sentinel

[喵咪Redis]Redis-Sentinel 前言 redis-Sentinel 是我们这次来一同学习 redis 的重点,在我们现在的系统已经离不开 redis 的时候 , redis 挂掉了或者是一些其他问题都是致命的 , 那么怎么做到...

喵了_个咪
2016/06/29
77
0
Redis Sentinel(Redis集群监控管理软件)

Redis Sentinel(Redis集群监控管理软件) # Redis-Sentinel的官网地址:http://redis.io/topics/sentinel # 注意:Redis-Sentinel官网提供不是稳定版!个人感觉这个比keepalived+redis来切换好...

epiclight
2015/05/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Guava RateLimiter + AOP注解实现单机限流、统计QPS

1、基于springboot项目pom.xml添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency><d......

铁骨铮铮
54分钟前
3
0
龙芯版办公软件下载

金山wps office   rpm包:http://ftp.loongnix.org/os/loongnix/1.0/os/Packages/w/wps-office-10.8.0.6472-1.a20p1.mips64el.rpm   deb包:http://packages.deepin.com/loongson/pool/......

gugudu
59分钟前
3
0
BI报表分析和数据可视化,推荐这三个开源工具!

开源篇 一、Superset 1、技术架构:Python + Flask + React + Redux + SQLAlchemy 2、使用人群: (1)开发/分析人员做好看板,业务人员浏览看板数据 (2)业务人员可自行编辑图表,查看满足...

飓风2000
今天
4
0
CountDownLatch

CountDownLatch的概念 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程...

少年已不再年少
今天
2
0
centos7 新手阿里云服务器安装mongodb

简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 MongoDB特点 模式自由 :可以把不同结构的文档存...

醉雨
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部