Redis从入门到放弃系列(九) Sentinel

Stella981
• 阅读 713

Redis从入门到放弃系列(九) Sentinel

本文例子基于:5.0.4

Redis Sentinel作为Redis高可用方案,具有监听,通知,自动故障转移等功能.这一切都是依赖主备同步的大前提(参考上一节:Redis从入门到放弃系列(八) 主备同步).

  • 监听: Sentinel会不断检查master节点跟replica节点是否正常工作
  • 通知: 当某个节点运行出现问题的时候,能够通知其他的进程(eg:客户端)
  • 自动故障转移: 当master节点down了,Sentinel会启用故障转移进程,将replica节点提升为master节点,其他的replica节点重新配置新的master节点,并且告知客户端需要重新连接的是哪个master地址.

在互联网应用中,程序如果只是单台部署的话,都会存在单点问题,那么作为Redis高可用方案的Sentinel是如何解决这一问题呢?

欢迎关注微信公众号黑搜丶D(black-search)

启动方式

  • redis-server sentinel配置文件 --sentinel
  • redis-sentinel sentinel配置文件

Sentinel配置

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

以上配置为Sentinel最少配置。

  • sentinel monitor <master-group-name> <ip> <port> <quorm> 监听127.0.0.1地址的6379端口,为其命名为mymaster,当集群有2个Sentinel节点认为mymaster节点down了才客观的下线。

其他Sentinel配置

sentinel <option_name> <master_name> <option_value>
  • down-after-milliseconds 以毫秒为单位,当超过该时间没有心跳,Sentinel则主观认为该节点已经关闭,只有绝大部分Sentinel判定该节点已经关闭,才会启动故障转移(即客观下线)
  • parallel-syncs 指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长(当故障转移的时候,每次只允许该值数量的replica节点同步到新节点,那么如果集群中有比较多的replica节点,就需要耗时长一些,但是设置比较多的replica又会因为RDB造成replica节点短时间不可用)
  • failover-timeout 故障转移超时时间
    • 在先前的故障转移已经由一个给定的Sentinel对同一个主机进行了尝试之后,重新启动故障转移所需的时间是故障转移超时的两倍
    • 使用新的replicate节点作为master节点,并且强制使用新master的数据备份作为其他replica节点的数据的超时时间
    • 取消已在进行中但未产生任何配置更改的故障转移所需的时间(新master节点还没有同步到其他的replica节点)
    • 正在进行的故障转移等待所有replica重新配置为新master服务器副本的最长时间

主观下线 && 客观下线

  • 主观下线: 单个sentinel程序对服务器做出的下线判断
  • 客观下线: 指多于quorm个sentinel程序对服务器做出的下线判断.

sentinel程序会对redis节点发送PING命令,如果redis节点没有正确回复sentinel的请求的话 or 指定时间内没有回复,那么sentinel程序会认为该redis主观下线.

有效回复:

  • +PONG
  • -LOADING
  • -MASTERDOWN

客观下线条件只适用于master节点,对于其他的replica节点,sentinel在将他们判断为主观下线的话即下线. 只有参与了判断客观下线的sentinel程序才有可能参与故障转移操作.

我们在设置sentinel集群程序的时候,不需要在对应的配置文件中设置不同节点的sentinel的配置信息,那么sentinel是如何知道彼此且发送消息的呢?

自动发现sentinel和replica节点

sentinel通过发布/订阅功能来发现其他的sentinel程序,这一功能是通过向频道__sentinel__:hello发送信息来实现的。 发现replica节点是通过询问master节点来获取所有从服务器的信息.

  • 每个sentinel按照2秒一次的频率向被它监听的master跟replica节点的__sentinel__:hello频道发送一条包含sentinel的信息的消息.
  • 每个sentinel都订阅了被它监听的频道,查找没有出现的sentinel,将其加入sentinel列表

搭建sentinel集群

首先要确保已经搭建了master-replica主备

1.copy一份sentinel.conf配置文件,分别修改为sentinel_26379.conf sentinel_26380.conf sentinel_26381.conf.修改如下内容:

//指定端口
port 26379
//设置后台启动
daemonize yes
//设置pidfile
pidfile "/var/run/redis-sentinel_26379.pid"
//设置日志存放地点,方便查看问题
logfile "/var/log/redis-sentinel_26379.log"
//设置监听的master节点
sentinel monitor mymaster 127.0.0.1 6379 2

2.分别执行 redis-sentinel sentinel_26379.conf配置文件启动。 启动sentinel之前需要先准备好redis master-replica主备已经启动~

Redis从入门到放弃系列(九) Sentinel

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Redis从入门到放弃系列(二) Hash
Redis从入门到放弃系列(二)Hash本文例子基于:5.0.4Hash是Redis中一种比较常见的数据结构,其实现为hashtable/ziplist,默认创建时为ziplist,当到达一定量级时,redis会将ziplist转化为hashtableRedis从入门到放弃系列(一)String
Stella981 Stella981
3年前
Redis低成本高可用方案设计
关于Redis高可用方案,看到较多的是keepalived、zookeeper方案。keepalived是主备模式,意味着总有一台浪费着。zookeeper工作量成本偏高。本文主要介绍下使用官方sentinel做redis高可用方案的设计。阅读目录:1.RedisSentinel2.故障转移消息接收的3种方式3.整体流程
Stella981 Stella981
3年前
Redis从入门到放弃系列(四) Set
Redis从入门到放弃系列(四)Set本文例子基于:5.0.4Set是Redis中一种比较常见的数据结构,当存储的member为十进制64位有符号整数范围内的整数的字符串的时候其实现为intset,其他为hashtableRedis从入门到放弃系列(三)List(https://www.osch
Stella981 Stella981
3年前
Redis从入门到放弃系列(十) Cluster
Redis从入门到放弃系列(十)Cluster本文例子基于:5.0.4RedisCluster集群高可用方案,去中心化,最基本三主多从,主从切换类似Sentinel,关于Sentinel内容可以查看编者另外一篇【Redis从入门到放弃系列(九)Sentinel(https://www.o
Stella981 Stella981
3年前
Redis Sentinel 源码:Redis的高可用模型分析
摘要:本文通过对RedisSentinel源码的理解,详细说明Sentinel的代码实现方式。RedisSentinel是Redis提供的高可用模型解决方案。Sentinel可以自动监测一个或多个Redis主备实例,并在主实例宕机的情况下自动实行主备倒换。本文通过对RedisSentinel源码的理解,详细说明Sentinel的代码实
Stella981 Stella981
3年前
Redis从入门到放弃系列(三) List
Redis从入门到放弃系列(三)List本文例子基于:5.0.4List是Redis中一种比较常见的数据结构,其实现为quicklist,quicklist是一个ziplist的双向链表Redis从入门到放弃系列(一)String(https://www.oschina.net/action/
Stella981 Stella981
3年前
Redis从入门到放弃系列(七) 过期、内存淘汰策略
Redis从入门到放弃系列(七)过期、内存淘汰策略本文例子基于:5.0.4过期策略Redis对于设置了过期时间的key的过期策略有两种惰性删除定时随机删除惰性删除惰性删除的时机在于当你要获取该key的时候再去做判断.这里我以String类型
Stella981 Stella981
3年前
Redis从入门到放弃系列(八) 主备同步
Redis从入门到放弃系列(八)主备同步本文例子基于:5.0.4在现在不管啥应用都谈分布式的阶段下(真的有必要???),我们的redis都会做一下主备,唔,如果redis存的数据不重要的话,其实也可以不用做\手动狗头\.为了能进一步上分布式,先让我们来了解一下CAP原理吧~Consis