Redis-ha(sentinel)
redis的sendtinel 是用来管理多个redis服务器的
- 作用
• 监控:监控主从服务器是否运作正常(通过给服务器发送心跳包的方式)
• 提醒:当某个Redis服务器出现异常时,可以通过api发送通知给管理员
• 自动故障转义:当主服务器失效时他会执行故障转移,他会将失效的主服务器标识为不可用,然后通过选举协议 在失效的主服务器中的从节点中选出来一个新的master,告诉其他的从服务器从新的master复制,当客户端连接master服务器时,sentinel也会将新的master地址告诉客户端(从这个地方可以看出,客户端要连接master,要从sentinel那里获取master的真实地址)
- 启动sentinel
redis-server /path/to/sentinel.conf --sentinel (使用redis-server 后面必须带上 --sentinel)
或者
src/redis-sentinel sentinel.conf
启动sentinel服务,必须要指定他的配置文件,系统会通过配置文件记录sentinel状态,当sendtinel重启,再通过配置文件还原sentinel状态
如果没有指定配置文件,或者指定的配置文件不可写,那么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 monitor resque 192.168.1.3 6380 4 //
sentinel down-after-milliseconds resque 10000 //
sentinel failover-timeout resque 180000 //
sentinel parallel-syncs resque 5 //
• sentinel monitor mymaster 127.0.0.1 6379 2: 指定sentinel所监控的主服务器:127.0.0.1,服务器的端口号:6379,将这个服务器判断为失效至少需要2个sentinel同意。(注意:无论设置多少个sentinel·同意,同意执行sentinel的数量必须要大于 所有sentinel数量的一半)才会执行故障转移
• sentinel down-after-milliseconds mymaster 60000:指定了sentinel 认为主服务断线的毫秒数,如果在给定的时间内,主服务器没有返回sentinel ping命令的回复,或者回复个错误,那么sentinel就认为服务挂了,这时该sentinel会将服务标记为sdown(主观下线),当大多数sentinel也认为服务挂掉时,会标记这个服务为(odown)客观下线。将主服务器标记为客观下线的sentinel数量,由主服务器的配置决定
• sentinel parallel-syncs:在执行故障转移时,最多有几个从服务器同时对新的master做同步数据请求,这个值越小指定故障转移的时间就越长。
如果从服务器允许使用过期数据,可能你不想同时所有的从服务器都向new master发送同步请求,虽然在复制的过程中大多数步骤不会堵塞从服务器,但是从服务器在载人new master过来的rdb文件时,任然会有短时间不能处理命令请求,所以如果所有从服务器同时发送同步请求,可能短时间所有的服务将都不可访问。
所以可以将这个值设置:1 。每次都只有一个从服务同步数据(不能处理请求命令)
- 主观下线和客观下线
• 主观下线:单个sentinel实例对master 做出下线判断
如果master在【sentinel down-after-milliseconds mymaster】这个配置的时间内,没有对向他发送ping命令的sentinel一个有效的回复,那么这个sentinel就会标识这个服务为主观下线
• 客观下线:大多数sentinel实例对master 做出主观下线判断
他们是通过【SENTINEL is-master-down-by-addr】命令来交流判断得出master是否下线。也就是说一个sentinel 可以通过【SENTINEL is-master-down-by-addr】命令,向另一个sentinel 询问他所监控的master是否下线
master对ping命令的有效回复是下面三个:
• 返回 +PONG 。
• 返回 -LOADING 错误。
• 返回 -MASTERDOWN 错误。
如果在给定的时间没有回复 或者 不是上面的三种回复,sentinel都认为是无效回复。
注意:master必须在【sentinel down-after-milliseconds mymaster】这个配置的时间内,一直给sentinel返回无效回复,sentinel才会给master标记为主观下线。例如:【sentinel down-after-milliseconds mymaster】配置时间为30秒,那么只要master在29秒之内有一次返回的是有效回复,那么就不会标记为主观下线。
当sentinel 从其他sentinel收集到足够数量的主观下线的报告后,就会将master置为客观下线,并开始执行故障转移
- 每个sentinel都需要定期执行的任务
• 每个sentinel都会以每秒一次的频率向它所知的master,salve,其他 sentinel 发送ping 命令
• 如果master 在 【sentinel down-after-milliseconds mymaster】这个配置的时间内 没有回复给监控它的sentinel 回复一个有效的ping 回复,那么master就会被监控的它的sentinel标记为主观下线
• 如果master被标记为主观下线,那么监控它的所有sentinel 都将会以每秒一次的频率确认
• 主服务器是否进入主观下线状态
• 如果master被确认为主观下线 并有一定数量(配置文件配置)sentinel 都同意这一次判断,那么master将切换到客观下线状态
• 一般情况下,没个sentinel 会向他所知的master和slave 以10秒一次的频率发送info指令;当master被标记为客观下线时 这个频率会改到一秒一次
• 当在【sentinel down-after-milliseconds mymaster】这个配置的时间内 没有一定数量的sentinel同意master下线时,客观状态就会移除,再切换到主观状态,当主服务器从新向sentinel返回有效的ping 回复时,master就会移除主观下线状态
参考文档:http://www.redis.cn/topics
Redis-ha(sentinel)的更多相关文章
- 【Redis】使用Redis Sentinel实现Redis HA
阅读目录 1 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 18000 sent ...
- Redis for OPS 05:哨兵HA Sentinel
写在前面的话 上一节的主从环境能够解决我们保证数据安全性的问题,但是却无法解决我们在主节点挂掉的时候服务继续使用的问题,同时也不能自动切换新的主. 我们运维的目的肯定是希望即使主库挂掉一个,服务依旧能 ...
- 使用Spring-data-redis操作Redis的Sentinel
介绍 Spring-Data-Redis项目(简称SDR) 是对Redis的Key-Value数据存储操作提供了更高层次的抽象,提供了一个对几种主要的redis的Java客户端(例 如:jedis,j ...
- redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用
目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...
- Redis集群部署(redis + cluster + sentinel)
概述说明 说明:本次实验采用c1.c2.c3三台虚拟机完成,每台服务器上都部署一个master.一个slave和一个sentinel.当某主节点的挂了,相应的从节点替位:当某主节点及主节点对应的从节点 ...
- Java代码操作Redis的sentinel和Redis的集群Cluster操作
总共四台机器,crxy99,crxy98分别是主节点和从节点. crxy97和crxy96是两个监控此主从架构的sentinel节点. 看代码: import org.junit.Test; im ...
- Redis之Sentinel高可用安装部署
背景: 之前通过Redis Sentinel 高可用实现说明和Redis 复制.Sentinel的搭建和原理说明大致已经介绍了sentinel的原理和实现,本文再次做个简单的回顾.具体的信息见前面的两 ...
- Redis学习-Sentinel
Redis的Sentinel系统用于管理多个Redis服务器(instance), 该系统执行以下三个任务: 监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正 ...
- redis cluster + sentinel详细过程和错误处理三主三备三哨兵
redis cluster + sentinel详细过程和错误处理三主三备三哨兵1.基本架构192.168.70.215 7001 Master + sentinel 27001192.168.70. ...
- redis哨兵(Sentinel)、虚拟槽分区(cluster)和docker入门
一.Redis-Sentinel(哨兵) 1.介绍 Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,r ...
随机推荐
- Android内存优化2 了解java内存分配 2
JVM内存模型 Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区. ...
- [UML] UML中类之间的几种关系
类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalizatio ...
- tez是什么?
[Apache Tez是什么?] http://dongxicheng.org/mapreduce-nextgen/apache-tez/ 浅谈Apache Tez中的优化技术 http://dong ...
- Linux pci驱动源码
#include <linux/kernel.h>#include <linux/errno.h>#include <linux/module.h>#include ...
- UML分析设计顺序
1.用例图:最简单的模型,与设计无关 2.活动图:类似流程图 3.用例图:对1的细化,分解后的Actor及Use Case 4.用例图:分解后的Actor及抽取的数据实体 5.类图:数据结构图 6.顺 ...
- 【java】Could not find or load main class
https://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-mean A comm ...
- transport.js报hasOwnProperty对象不支持此属性
ECShop transport.js错误 这次出现的问题是transport.js在IE下提示对象不支持该用法.出现错误位置为608行的下面的代码: if(this.hasOwnProperty(k ...
- 计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件)
文本文件是可以看到的字符, 二进制文件是不可视字符,如图片. 二进制文件: 包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件.计算机文件基本上分为二种:二进制文件和 ASCII( ...
- 记一则Linux病毒的处理
今天某项目经理反馈学校的某台服务器不停的向外发包,且CPU持续100%,远程登录后查看发现有一长度为10的随机字符串进程,kill掉,会重新生成另外长度为10的字符串进程.删除文件也会重复生成,非常痛 ...
- Linux-Vim常用操作
vim wangyunpeng.txt 创建一个wangyunpeng.txt文件 输入"i"进入插入模式 显示行号,需要在命令模式下输入":se nu" cp ...