一.出现的背景:
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. 微信小程序内链微信公众号的方法

    最近接了一个需求,要求在微信小程序内部添加关注微信公众号的方式并给出解决方案,经过几天的翻官网文档,查周边资料,问资深技术员,初步给出两个解决方案: 题外话: 搬砖容易,建设难,搬砖的小伙伴请注明文章 ...

  2. hdoj2037 贪心算法——今年暑假不AC

    所谓“贪心算法”是指:在对问题求解时,总是作出在当前看来是最好的选择.也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明). 经典问题:时间序列问题   ...

  3. 数据库root密码删除

    1 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址   2 打开cmd命令提示符,进入上一步mysql.exe所在的文件夹.   3 输入命令  mysqld --skip-g ...

  4. Codeforces 755B:PolandBall and Game(map+思维)

    http://codeforces.com/problemset/problem/755/B 题意:A可以喊出n个字符串,B可以喊出m个字符串,如果一个字符串之前被喊过,那么它再也不能喊了,A先喊,最 ...

  5. spring boot freemarker 导出word 带echarts图形报表

    创建word文件内容如下 将word导出为xml格式 将文件后缀名改为 .ftl 在springboot项目中添加freemarker依赖 <!-- 导出word文档--> <dep ...

  6. Hash碰撞概率

    计算Hash冲突的概率 虽然已经很多可以选择的Hash函数,但创建一个好的Hash函数仍然是一个活跃的研究领域.一些Hash函数是快的,一些是慢的,一些Hash值均匀地分布在值域上,一些不是.对于我们 ...

  7. 基于C#的机器学习--深层信念网络

    我们都听说过深度学习,但是有多少人知道深度信念网络是什么?让我们从本章开始回答这个问题.深度信念网络是一种非常先进的机器学习形式,其意义正在迅速演变.作为一名机器学习开发人员,对这个概念有一定的了解是 ...

  8. 嵊州D1T4 cf1174E 占梦人

    嵊州D1T4 cf1174E 此题为改编题,原题:cf1174E 占梦人 占梦人一个晚上会做 n 个梦,编号为 1 ∼ n,她可以安排做这 n 个梦的顺序. 假如她第一个做了编号为 x 的梦,那么她的 ...

  9. Java平台调用Python平台已有算法(附源码及解析)

    1. 问题描述 Java平台要调用Pyhon平台已有的算法,为了减少耦合度,采用Pyhon平台提供Restful 接口,Java平台负责来调用,采用Http+Json格式交互. 2. 解决方案 2.1 ...

  10. NOIP最后阶段每日小记

    前言:最后几天了,记录一下每天的经验.教训.启示.大牛路过请补充一点内容…… 2017-10-31 21:32 今天考试打完第一题就知道是AK场,然后就死命搞题,结果第一题手贱多打了一个%,本机无显示 ...