转载自 https://blog.csdn.net/yswKnight/article/details/78158540

一.什么是哨兵机制?

答:Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
       监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
       提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

 哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
      每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
      虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel)。
      哨兵(sentinel) 的一些设计思路和zookeeper非常类似

二.哨兵模式的配置修改

实现步骤:
1.拷贝到etc目录
    cp sentinel.conf  /usr/local/redis/etc
2.修改sentinel.conf配置文件
    sentinel monitor mymast  192.168.110.133 6379 1  #主节点 名称 IP 端口号 选举次数

#配置主服务器的密码(如没设置密码,可以省略)  
   sentinel auth-pass mymaster 123456  
3. 修改心跳检测 5000毫秒
    sentinel down-after-milliseconds mymaster 5000
4. 做多多少合格节点

    sentinel parallel-syncs mymaster 2
5. 启动哨兵模式
   ./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
6. 停止哨兵模式

注意:

1.当启动哨兵模式之后,如果你的master服务器宕机之后,哨兵自动会在从redis服务器里面 投票选举一个master主服务器出来;这个主服务器也可以进行读写操作!

2.如果之前宕机的主服务器已经修好,可以正式运行了。那么这个服务器只能进行的操作,会自动跟随由哨兵选举出来的新服务器!

3.大家可以进入./redis-cli,输入info,查看你的状态信息;

三、哨兵(Sentinel)总结

1、Sentinel的作用:

A、Master 状态监测

B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave

C、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

2、Sentinel的工作方式:

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令。

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。

5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令 。

6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次 。

7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。

若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

最后,如果大家看不太懂,推荐大家看两个博客,就明白了!

1.http://blog.csdn.net/zbw18297786698/article/details/52891695
2.http://blog.csdn.net/candy_rainbow/article/details/52842402

===========================================================================

心跳检测

在命令传播阶段,从服务器默认以每秒一次的频率,向主服务器发送命令:

REPLCONF ACK <replication_offset> //replication_offset是从服务器当前的复制偏移量。

心跳检测的作用:检测主服务器的网络连接状态;辅助实现min-slaves选项;检测命令丢失。

检测主从服务器的网络连接状态

通过向主服务器发送INFO replication命令,可以列出从服务器列表,可以看出从最后一次向主发送命令距离现在过了多少秒。

lag的值应该在0或1之间跳动,如果超过1则说明主从之间的连接有故障。

辅助实现min-slaves选项

Redis可以通过配置防止主服务器在不安全的情况下执行写命令

min-slaves-to-write 3

min-slaves-max-lag 10

上面的配置表示:从服务器的数量少于3个,或者三个从服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令。这里的延迟值就是上面INFOreplication命令的lag值。

检测命令丢失

如果因为网络故障,主服务器传播给从服务器的写命令在半路丢失,那么当从服务器向主服务器发送REPLCONF ACK命令时,主服务器将发觉从服务器当前的复制偏移量少于自己的复制偏移量,然后主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区里面找到从服务器缺少的数据,并将这些数据重新发送给从服务器。

主服务器向从服务器补发缺失数据这一操作的原理和部分重同步操作的原理非常相似,它们的区别在于:补发缺失数据操作在主从服务器没有断线的情况下执行,而部分重同步操作则在主从服务器断线并重连之后执行。

微信扫一扫---打赏

Redis的哨兵机制 或者心跳机制 模式 原理详解相关推荐

  1. 动态复权(真实价格)模式原理详解!

    动态复权(真实价格)模式原理详解! 如果没有意外,你之前一直在使用前复权价格做回测,使用前复权价格回测存在未来函数(未卜先知,提前使用未来的数据),因此你的回测结果都是错的. Tell me why? ...

  2. lvs-dr模式原理详解和可能存在的“假负载均衡”

    原文地址: http://blog.csdn.net/lengzijian/article/details/8089661 lvs-dr模式原理 转载注明出处:http://blog.csdn.net ...

  3. java心跳机制_Java 心跳机制实现 DOM

    心跳机制 心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制. 大部分CS的应用需要心跳机制.心跳机制一般在Server和Client都要实现,两者实现原理 ...

  4. java tcp 心跳机制_java 心跳机制

    心跳机制:就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开. 心跳包 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定 ...

  5. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  6. SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解

    SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解 SpringBoot默认包扫描机制 标注了@Component和@Component的衍生注解如@Controller ...

  7. 我的世界做计算机原理,我的世界计分板运算机制原理详解

    我的世界里面计分板的制作对新手玩家来说可能比较困难,特别是各种运算机制需要对电子电路比较了解,下面是计分板的计算机制和原理详解,看明白的话不妨自己试着制作计分板. 计分板运算机制原理详解 输入12 加 ...

  8. Redis基础及原理详解

    Redis基础及原理详解 前言:以下是最近学习redis的一些笔记总结,文中如有不当的地方欢迎批评指正,重在记录与学习,笔芯~~ Nosql概述 演进历史 单机mysql Memcached(缓存)+ ...

  9. 【Android架构师java原理详解】二;反射原理及动态代理模式

    前言: 本篇为Android架构师java原理专题二:反射原理及动态代理模式 大公司面试都要求我们有扎实的Java语言基础.而很多Android开发朋友这一块并不是很熟练,甚至半路初级底子很薄,这给我 ...

最新文章

  1. Ubuntu16.04 安装
  2. 阿里官方Redis开发规范!
  3. UC 伯克利华人一作:卷积让视觉 Transformer 性能更强,ImageNet 继续刷点!
  4. python datetime计算时间差_用datetime计算时间差
  5. GuGuFishtion(2018 Multi-University Training Contest 7)
  6. echart vue 图表大小_vue之将echart封装为组件
  7. Ansible初级应用
  8. JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决
  9. 回顾|腾讯AI打败王者荣耀职业队,AI训练一天等于人类440年
  10. Ubuntu16.04中安装Moveit教程及示例教程
  11. 如何对 List集合进行排序
  12. “十四五”新一代信息技术产业发展
  13. Nescafé2 月之谜 题解
  14. u盘量产linux pe,WinPE U盘量产ISO
  15. 凡客的面试:Web前端开发
  16. Windows10动态壁纸Wallpaper软件
  17. How-To Geek正在寻找远程全职技术作家
  18. Faster RCNN原理篇(二)——RoIPooling和RoIAlign的学习和理解
  19. C++ 覆盖方法与重载方法
  20. 开源在线excel编辑器_【技能】十个在线小工具,科研amp;工作必备神器!

热门文章

  1. nginx系列之二:配置文件解读
  2. 什么时候使用Shell
  3. cocos2d-x游戏实例(6)-A星算法(2)
  4. VC获取父进程PID
  5. OpenCV 中的绘制功能
  6. Android 图形系统之图形缓冲区分配
  7. JS组件系列——表格组件神器:bootstrap table
  8. 垃圾回收机制和菜单栏工具栏
  9. 知乎云敲钟、比特币可购买特斯拉、用户隐私收集新规五一生效、 软件疯长等|Decode the Week...
  10. 唐敏豪:我给MSU评测打9分