一.出现的背景:
Redis 主从复制模式下一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用这种场景的这种故障处理方式是非常浪费人力的。为了提供Redis主从的高可用性,Redis从2.8版本开始提供Redis Sential(哨兵)架构来解决问题。
 
二.架构图:
 
三.Redis Sentinel的高可用方案主要介绍:
由上图可以看到Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识,如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时他们会选举出一个Sentinel节点来完成自动故障转移的工作,选举出新的主节点,将老的主节点降级为从节点,同时会将这个变化实时通知给Redis应用方。
 
四.基本实现原理:
1.执行三个定时任务用于获取及同步各端(主节点、从节点、Sentinel节点)信息:
   A.每隔10秒获得主从节点信息;(通过info命令)
   B.每隔2秒同步主节点及当前sentinel节点信息; (通过redis的订阅功能)
   C.每隔1秒各个Sentinel节点实现同其他端之间的心跳检测;(通过ping命令)
 
2.下线有问题的节点:
   主观下线:每个Sentinel节点会每隔1秒对主从节点及其他Sentinel节点发送ping命令做心跳检测,当这些节点超过down-after-milliseconds没有进行有效回复时Sentinel节点会对该节点做失败判定,这个行为即主观下线。(该主观下线的判定是当前一个Sentinel的判定所以也存在误判的可能,比如刚好那时的网络问题)
    客观下线:当Sentinel接待主观下线的是主节点时,该Sentinel会通过sentinel is-master-down-by-addr命令其他Sentinel节点询问对主节点的判断,当超过quorum(判定主节点最终不可达所需的票数)个数时,Sentinel节点会认为该主节点确实有问题,这时Sentinel节点会做出客观下线的决定。
 
3.领导者Sentinel节点选举(Raft算法)用于去做故障转移的leader(即选谁去领导这次故障转移,现实中一般是谁先发现了这个故障谁就成为leader的可能性最大,而且这个选举的过程很快)。
   该选举过程主要包含:
    (1)每个在线的Sentinel节点都有资格成为领导者,当它确认主观下线时会向其他Sentinel节点发送sentinel is-master-down-by-addr命令,要求将自己设置为领导着。
    (2)收到命令的Sentinel节点如果没同意过其他Sentinel节点的sentinel is-master-down-by-addr命令,则将统一改请求,否则拒绝。
    (3)如果该Sentinel节点发现自己的票数已经大于等于max(quorum,num(sentinels)/2+1),那么它将成为领导者。(现实中一旦一个Sentinel节点获得了max(quorum,num(sentinels)/2+1) 的票数,其他Sentinel节点再去确认已经没有意义因为每个Sentinel节点只有一票)
    (4)如果此过程没有选举出领导者,则将进入下一次类似这样的选举。
 
4.故障转移:
   (1).Sentine领导者节点从从节点列表中选出一个节点作为新的主节点,选择过程如下图:
           
   (2).Sentinel领导者节点会对第一步选出来的从节点执行slaveof no one命令让其成为主节点。
   (3).Sentinel领导者节点会向剩余的从节点发送命令,并让他们成为新主节点的从节点。
   (4)Sentinel节点集合将原来的主节点更新为从节点,并保持对其关注,当其回复后命令它去复制新的主节点数据。 

Redis Sentinel基本实现原理的更多相关文章

  1. Redis Sentinel中的机制与原理详解

    序言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案.实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署. 它的主要功能有以 ...

  2. Redis Sentinel实现的机制与原理详解

    序言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案.实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署. 它的主要功能有以 ...

  3. Redis Sentinel 高可用实现说明

    背景:      前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...

  4. Redis Sentinel:集群Failover解决方案(转载)

    本文转载自:http://shift-alt-ctrl.iteye.com/blog/1884370 文中的配置例子,还有failover过程中触发的订阅事件具有很好的参考价值. Redis sent ...

  5. redis高可用之REDIS SENTINEL

    1. Redis主从配置 1.1. 设置主从复制 Master <= Salve 10.24.6.5:6379 <= 10.24.6.7:6379 1.2.   取消主从复制 1.3.   ...

  6. Redis Sentinel哨兵集群

    Redis Sentinel(哨兵集群)是一种高可用的redis部署方案.在集群中的redis-master服务挂掉时,无需人为干预,即可通过哨兵集群的自我调整,实现redis服务的持续可用. 哨兵集 ...

  7. (转)基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

    转载自:http://warm-breeze.iteye.com/blog/2020413 本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedi ...

  8. 基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

    本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在 ...

  9. Redis Sentinel主从高可用方案

    Redis Sentinel主从高可用方案 本文介绍一种通过Jed和Sentinel实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上 ...

随机推荐

  1. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream

    目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...

  2. html更改弹窗样式(原创,转载需声明)

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  3. SQL 对float类型列进行排序引发的异常

    车祸现场 要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面 可以明显看到,完成时间为4.1号的记录排在了3.27号前面. 事故原因 float 表示近似数值,存在精度损 ...

  4. code forces 1173 C. Nauuo and Cards

    本文链接:https://www.cnblogs.com/blowhail/p/10990833.html Nauuo and Cards 原题链接:http://codeforces.com/con ...

  5. 前端摸爬滚打之路(一)之 JavaScript 基础

    前言:这是我第一次在博客上记录自己的前端学习过程,以往都是在桌面右侧开个 onenote 小窗,记录自己在学习过程中获得的知识.通常都是记录的满满当当,然后心满意足的关闭窗口,但是记录不代表学会.这些 ...

  6. leetcode的Hot100系列--461. 汉明距离

    求两个数的二进制位不同的位置,最先想到的就是异或操作, 异或:按位运算,相同为0,不同为1. 比如: a = 6 对应的二进制表示为: 0 0 1 1 1 ​ b = 9 对应的二进制表示为: 0 1 ...

  7. 生产追溯系统-Raspberry Pi帮助我们节省大量硬件成本,助力信息化建设

    初识 Raspberry Pi 竟然有这么小的电脑主机?只有手掌这么大?电源线竟然跟手机数据线一样?当我第一次看到Raspberry Pi的时候,在脑海中产生了一连串的疑问,带着这些疑问逐渐开始研究这 ...

  8. 【Aizu - 0118】Property Distribution

    -->Property Distribution 原文是日语,算了算了,直接上我大中华母语吧  Descriptions: 在H * W的矩形果园里有苹果.梨.蜜柑三种果树, 相邻(上下左右)的 ...

  9. [奇思异想]使用RabbitMQ实现定时任务

    背景 工作中经常会有定时任务的需求,常见的做法可以使用Timer.Quartz.Hangfire等组件,这次想尝试下新的思路,使用RabbitMQ死信队列的机制来实现定时任务,同时帮助再次了解Rabb ...

  10. android布局几点随想

    1. 正式布局界面时,先在纸上画出整个布局,并考虑用什么布局比较适合: 2. 布局界面先做出框架,并用不同的背景颜色标记出来,确保大的布局框架式正确的: 3. 接着在每个大的布局框架内布局小的布局: ...