博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis高可用 - sentinel
阅读量:5923 次
发布时间:2019-06-19

本文共 2100 字,大约阅读时间需要 7 分钟。

sentinel简介

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)没有实现自动进行主备切换。而Redis-sentinel是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

它的主要功能有以下几点:

  1. 不时地监控redis是否按照预期良好地运行;
  2. 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
  3. 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
  4. Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

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 的客观下线状态就会被移除。
  8. 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除

主观下线和客观下线:

  • 主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。
  • 客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.

通俗来讲就是sentinel就是用来管理多个redis服务器的,可以实现一个功能上实现HA的集群。该系统主要执行四个任务:

  1. 监控( Monitoring ): Redis Sentinel实时监控主服务器和从服务器运行状态。
  2. 提醒(notification): 当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知。
  3. 自动故障转移:如果一个master不正常运行了,哨兵可以启动一个故障转移进程,将一个slave升级成为master,其他的slave被重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。
  4. 配置提供者:哨兵作为Redis客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master的地址。如果发生故障,哨兵将报告

sentinel集群

很显然,只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,这样有几个好处:

  1. 即使有一些sentinel进程宕掉了,依然可以进行redis集群的主备切换;
  2. 如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
  3. 如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。

##############

转载于:https://www.cnblogs.com/amunote/p/10381415.html

你可能感兴趣的文章
ARC下带CF前缀的类型与OC类型转换
查看>>
CSS控制文本超出指定宽度显示省略号和文本不换行效果的实现
查看>>
【转】Zookeeper 安装和配置
查看>>
《剑指offer》-连续子数组的最大和
查看>>
Docker入门系列8
查看>>
CF 291E. Tree-String Problem [dfs kmp trie图优化]
查看>>
json转字符串 —— jsonObj.toJSONString()与JSON.stringify(jsonObj)
查看>>
mysql linux下表名忽略大小写注意事项
查看>>
springmvc的声明式事务管理类型讲解
查看>>
Unable to cast object of type 'System.Int32' to type 'System.Array'.
查看>>
Linux下双网卡绑定bond0【转】
查看>>
Mybatis(一) mybatis入门
查看>>
EM 算法 实例
查看>>
深入理解javascript闭包【整理】
查看>>
Color Schema 配色随笔
查看>>
spring-cloud: eureka之:ribbon负载均衡配置(一)
查看>>
英语语法总结---一、英语中定语放在哪
查看>>
[转]npm、 cnpm、yarn
查看>>
净推荐值(NPS):用户忠诚度测量的基本原理及方法
查看>>
我终于开通了微信公众号
查看>>