如何实现主从的自动切换?我们的思路:

创建一台监控服务器来监控所有Redis 服务节点的状态,比如,master 节点超过一定时间没有给监控服务器发送心跳报文,就把master 标记为下线,然后把某一个slave变成master。应用每一次都是从这个监控服务器拿到master 的地址。

问题是:如果监控服务器本身出问题了怎么办?那我们就拿不到master 的地址了,应用也没有办法访问。

那我们再创建一个监控服务器,来监控监控服务器……似乎陷入死循环了,这个问题怎么解决?这个问题先放着。

Redis 的Sentinel 就是这种思路:通过运行监控服务器来保证服务的可用性。

官网:
https://redis.io/topics/sentinel

从Redis2.8 版本起,提供了一个稳定版本的Sentinel(哨兵),用来解决高可用的问题。它是一个特殊状态的redis 实例。

我们会启动一个或者多个Sentinel 的服务(通过src/redis-sentinel),它本质上只是一个运行在特殊模式之下的Redis,Sentinel 通过info 命令得到被监听Redis 机器的master,slave 等信息。

为了保证监控服务器的可用性,我们会对Sentinel 做集群的部署。Sentinel 既监控所有的Redis 服务,Sentinel 之间也相互监控。

注意:Sentinel 本身没有主从之分,只有Redis 服务节点有主从之分。

概念梳理:master,slave(redis group),sentinel,sentinel 集合

Redis中的可用性保证之Sentinel 原理相关推荐

  1. Redis中的可用性保证之Sentinel的Ratf 算法

    在分布式存储系统中,通常通过维护多个副本来提高系统的可用性,那么多个节点之间必须要面对数据一致性的问题.Raft 的目的就是通过复制的方式,使所有节点达成一致,但是这么多节点,以哪个节点的数据为准呢? ...

  2. Redis中的可用性保证之Sentinel服务下线

    Sentinel 默认以每秒钟1 次的频率向Redis 服务节点发送PING 命令.如果在down-after-milliseconds 内都没有收到有效回复,Sentinel 会将该服务器标记为下线 ...

  3. Redis中的可用性保证之Sentinel故障转移

    如果master 被标记为下线,就会开始故障转移流程. 既然有这么多的Sentinel 节点,由谁来做故障转移的事情呢? 故障转移流程的第一步就是在Sentinel 集群选择一个Leader,由Lea ...

  4. 【转】Redis 分布式——可用性保证之 Sentinel(实战篇)

    前言 在上个篇章我们阐述了Sentinel的原理,可能大家还是云里雾里,需要来点实战性的东西,那这个篇章我们来个实战篇吧-话不多说,我们开始今天的吹牛皮- 正文 Sentinel 实战 Sentine ...

  5. Redis中布隆过滤器的使用及原理

    <玩转Redis>系列文章主要讲述Redis的基础及中高级应用.本文是<玩转Redis>系列第[11]篇,最新系列文章请前往公众号"zxiaofan"查看, ...

  6. redis中使用GeoHash

    redis中使用GeoHash 1.GeoHash底层原理 2. 基本使用 1.GeoHash底层原理 1.Redis3.2开始提供GEO模块,该模块使用了GeoHash算法 2.核心思想:GeoHa ...

  7. Redis:哨兵模式(Sentinel)原理

    1. 前言 Redis主从复制模式不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复.Redis哨兵模式就解决了Redis主从复制模式 ...

  8. Redis中的Sentinel 配置

    为了保证Sentinel 的高可用,Sentinel 也需要做集群部署,集群中至少需要三个Sentinel 实例(推荐奇数个,防止脑裂). hostname IP 地址 节点角色&端口 mas ...

  9. redis缓存数据库中zset数据结构底层算法实现原理:ziplist 和 skiplist

    有序集合对象是有序的.与列表使用索引下标作为排序依据不同,有序集合为每个元素设置一个分数(score)作为排序依据. ①.编码 有序集合的编码可以是 ziplist 或者 skiplist. zipl ...

最新文章

  1. Sharepoint之升级篇
  2. crf linux使用教程,Linux下CRF++的使用
  3. XMLHttpRequest、fetch的ajax请求
  4. spring mvc使用html页面,使用Spring MVC的纯HTML页面应用程序
  5. Linux 获取屏幕分辨率与窗口行列数(c/c++)
  6. 基于SSM + Redis的Shiro权限管理项目
  7. 吴恩达深度学习神经网络基础编程作业Python Basics with Numpy
  8. 人工智能凉凉了?中国 AI 人才缺口高达 12113 个!
  9. 学习动态性能表 第五篇--V$SESSION
  10. C语言中的`sprintf`和`sscanf`两个函数介绍
  11. java.lang.ClassNotFoundException解决办法
  12. 查找农历生日与阳历生日属于同一天的次数和年份
  13. 关于词嵌入(Word Embedding)的一些总结
  14. java 流计算_Java 流收集器 ( Stream Collectors ) ( 一 ) - 统计计算
  15. java实现一个简单的计算器的加减乘除
  16. 把照片唱给你听 | 腾讯AI Lab国际领先技术邀你「趣」体验
  17. Tikz学习笔记(一)
  18. uploadify3.2上传插件案例
  19. 卢伟冰:Redmi K50是2022年度骁龙8旗舰性价比之王
  20. pythonlist是什么意思_python中的list是什么意思

热门文章

  1. Git.之.最小化配置
  2. GitLab的安装及使用教程
  3. javasript中var、let和const区别
  4. 【BZOJ4269】再见Xor 高斯消元
  5. CSS3+JS切割轮播图
  6. Atitit RSA非对称加密原理与解决方案
  7. 模板载入与模板继承的区别
  8. [资料]PHP中的__call使用
  9. 大话设计模式—外观模式
  10. React入门-9.redux你好