为什么需要 Redis 哨兵?
在说哨兵之前,我们先说下主从复制,Redis 的主从复制模式,一旦主节点出现故障无法提供服务,需要人工介入手工将从节点调整为主节点,同时应用端还需要修改新的主节点地址,这种故障转移的方式对于很多应用场景是不能容忍的。正式由于这个问题,Redis 提供了 Sentinel(哨兵) 架构来解决这个问题。
Redis Sentinel 是一个分布式的架构,它本身也是一个独立的 Redis 节点,只不过它不存储数据,只支持部分命令,它能够自动完成故障发现和故障转移,并通知应用方,从而实现高可用。Redis Sentinel 包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其他 Sentinel 节点进行监控,当发现节点异常时,会对节点做下线标识,如果被标识的是主节点,此时会与其他Sentinel 节点进行协商,当大多数Sentinel 节点都人为主节点不可达时候,会发起选举,选出一个 Sentinel 节点来完成自动故障转移的工作,同时会将这个变化通知给 Redis 的应用方。这个过程是完全自动化的,无需人工干预。Sentinel 主要提供以下几个功能:
- 监控:定期检测Redis 数据节点、其他 Sentinel 节点是否可达。
- 通知:将故障转移的结果通知给应用方。
- 主节点故障转移:实现从节点晋升为主节点,并维护后续正确的主从关系
- 配置提供者:客户端在初始化的时候连接 Sentinel 节点集合,从中获取主节点信息。
多个 Sentinel 节点来共同判断故障,可以有效防止误判,同时如果个别 Sentinel 节点不可用,整个 Sentinel 节点集合依然是高可用的。
部署说明3 个 Sentinel 节点 、1 个主节点 、2 个从节点。部署数据节点

部署 sentinel 节点sentinel 默认 的端口是 26379,这里我们创建三个 sentinel 节点,端口分别是 26379、26380、26381。

部署 sentinel 节点sentinel 默认 的端口是 26379,这里我们创建三个 sentinel 节点,端口分别是 26379、26380、26381。

配置说明:
sentinel monitor
- port 指定 sentinel 节点的端口
sentinel monitor master-name 是给要监控的节点起一个名字,ip 和 port 表示监控一个主节点,quorum 表示要判断主节点最终不可达所需要的票数。同时这个参数还与选举领导者有关,至少需要max(quorum,num/2+1)个节点参与选举,才能选出领导者 sentinel,从而完成故障转移。比如总共有 5 个 sentinel 节点,quorum =4 ,name 至少需要 4 个sentinel 节点才可以进行领导者的选举。
当所有节点启动时候,配置文件会发生变化,包括:
- sentinel 自动发信了从节点以及其他 sentinel 节点。
- 去掉里面默认配置,例如 parallel-sync failover-timeout 参数。
- 添加了配置 纪元相关参数。
sentinel down-after-milliseconds配置

每个 sentinel 节点都要定期发送 ping 命令来判断 redis 数据节点和其他 sentinel 节点是否可达,如果超过了down-after-milliseconds 配置的时间且没有有效回复,则判断节点不可达。times 单位是毫秒。down-after-milliseconds虽然以为参数,但实际上对 Sentinel节点、主节点、从节点的失败判定同时有效。sentinel parallel-syncs配置:

当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs 就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数。如果这个参数配置的比较大,那么多个从节 点会向新的主节点同时发起复制操作,尽管复制操作通常不会阻塞主节点, 但是同时向主节点发起复制,必然会对主节点所在的机器造成一定的网络和 磁盘IO开销。
sentinel failover-timeout配置:

failover-timeout通常被解释成故障转移超时时间,但实际上它作用于故障转移的各个阶段:
- 选出合适从节点;
- 晋升选出的从节点为主节点;
- 命令其余从节点复制新的主节点;
- 等待原主节点恢复后命令它去复制新的主节点。
failover-timeout的作用具体体现在四个方面:
如果Redis Sentinel对一个主节点故障转移失败,那么下次再对该主 节点做故障转移的起始时间是failover-timeout的2倍;
在晋升选出的从节点为主节点阶段时,如果Sentinel节点向a)阶段选出来的从节点执行slaveof no one一直失败(例如该从节点此时出现故障),当此过程超过 failover-timeout时,则故障转移失败;
在晋升选出的从节点为主节点阶段如果执行成功,Sentinel节点还会执行info命令来确认a) 阶段选出来的节点确实晋升为主节点,如果此过程执行时间超过failover- timeout时,则故障转移失败;
如果命令其余从节点复制新的主节点阶段执行时间超过了failover-timeout(不包含复制时间), 则故障转移失败。注意即使超过了这个时间,Sentinel节点也会最终配置从 节点去同步最新的主节点。
部署注意事项
- sentinel 节点不应该部署在同一台物理机上;
- 至少要部署三个以上的奇数 sentinel 节点;
- 选一套还是多套 sentinel,如果选一套可以一定程度降低维护成本,但是如果 sentinel 节点出现异常,可能会多多个 redis 数据节点造成影响,如果是多套,会造成资源浪费,但是每套 sentinel 都彼此隔离。
文章参考自公众号阿文CSDN
为什么需要 Redis 哨兵?的更多相关文章
- Redis 哨兵模式实现主从故障互切换
200 ? "200px" : this.width)!important;} --> 介绍 Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 S ...
- redis哨兵配置
redis哨兵配置主从 redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在 ...
- redis哨兵配置主从
redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在redis的配置文件中添加鉴 ...
- redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用
目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...
- Redis哨兵
Redis Sentinel Redis哨兵为Redis提供高可用.这就意味着你用哨兵可以创建一个Redis部署,在没有人为干预的情况下抵抗某些失败.(PS:自动故障转移) Redis哨兵还提供其他的 ...
- redis哨兵架构的基础知识及部署和管理
一.前言 1.哨兵的介绍 sentinal,中文名是哨兵 哨兵是redis集群架构中非常重要的一个组件,主要功能如下 ()集群监控,负责监控redis master和slave进程是否正常工作 ()消 ...
- Redis 哨兵
作用 Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入. 主要提供了配置提供者,通知,哨兵的监控和自动故障转移功能.哨兵的核心功能是主节点的自动故障转移. 下面是Red ...
- SpringBoot整合redis哨兵主从服务
前提环境: 主从配置 http://www.cnblogs.com/zwcry/p/9046207.html 哨兵配置 https://www.cnblogs.com/zwcry/p/9134721. ...
- redis 哨兵模式 Connection refused
spring整合redis哨兵,修改了bind ,protected 任然连接拒绝,是因为哨兵的mastername 和spring里面的名称不一致..导致拒绝了...... 哨兵模式配置文件 属性 ...
- redis 哨兵(sentinel)
redis哨兵 哨兵自动故障转移 自动通知应用最新master信息 无需担心,master挂了,程序不需要修改IP啥的,由哨兵自动完成 修改sentinel.conf protected-mode n ...
随机推荐
- Redis Sentinel 高可用部署实践集群
一.Redis Sentinel 介绍 1.Sentinel 数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...
- HashMap、HashTable与ConcurrentHashMap的区别
1.HashTable与HashMap (1)HashTable和HashMap都实现了Map接口,但是HashTable的实现是基于Dictionary抽象类. (2)在HashMap中,null可 ...
- 对javascript中call()方法的理解
call ( thisObj [, arg1 [, arg2 [, [, argN] ] ] ]) call()方法:官方介绍是,调用一个对象的一个方法,以另一个对象替换当前对象. call()方法 ...
- Django-04-路由系统
1. 概述 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及 2. path转换器 在django2.0 以上的版本中,默认使用的是path转换器,我们首先以此 ...
- C语言:求π
1835: 圆的面积 本题的关键在于如何求π: 今天先给给大家介绍一种针对本题的方法——利用反三角函数求π. 在高数中arcsin(0)=arccos(1)=π,不过编译器中并没有arcsin和arc ...
- Spark之RDD弹性特性
RDD作为弹性分布式数据集,它的弹性具体体现在以下七个方面. 1.自动进行内存和磁盘数据存储的切换 Spark会优先把数据放到内存中,如果内存实在放不下,会放到磁盘里面,不但能计算内存放下的数据,也能 ...
- Etcd 使用入门
etcd简介 etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语 ...
- Chrome 谷歌开发者工具使用窍门
我们这里介绍主要的几块:Console.Source.Network Console 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的, ...
- java之spring之初始spring
1.Spring 在多个框架中起到润滑剂的作用,桥梁的作用,纽带的作用. 2.Spring是一个容器,也是一个对象工厂.帮助程序员创建对象,管理对象. 3.Spring的体系结构: 4.学习sprin ...
- Exception和RuntimeException区别
Exception:强制性要求用户必须进行处理: RuntimeException:是Exception的子类,由用户选择是否进行处理: