Redis哨兵
Redis Sentinel
Redis哨兵为Redis提供高可用。这就意味着你用哨兵可以创建一个Redis部署,在没有人为干预的情况下抵抗某些失败。(PS:自动故障转移)
Redis哨兵还提供其他的附件任务,比如监控,通知,以及作为客户端的配置提供者。
- Monitoring(监视) : 哨兵会不断地检查master和slave实例是否按照预期的那样工作
- Notification(通知) : 哨兵可以通过API的方式来通知管理员(另一台计算机程序),告诉它其中一个被监视的Redis实例出了问题
- Automatic failover(自动故障转移) : 如果一个master没有如期望的那样工作,哨兵可以开始一个故障转移处理,处理的结果时一个slave被提升为master,其余的slave将用这个新master重新配置,使用这个Redis服务器的应用程序会被通知在连接时使用新的地址。
- Configuration provider(配置提供者) : 哨兵充当客户端服务发现的权威来源:为了对给定的服务请求作出响应,客户端连接到哨兵以获得当前master的地址。如果发生故障转移,前哨将报告新地址。
哨兵的分布式特性
Redis哨兵是一个分布式系统:
哨兵自身被设计为在一个配置中运行,其中有多个Sentinel进程协同工作。
多个哨兵进程协同工作的优势在于:
- 当多个哨兵都同意且一致认为给定的master不可用时才会执行失败检测。这降低了误报的概率。
- 即使不是所有哨兵进程都正常工作(PS:个别哨兵不能正常工作)的情况下,仍然会使得系统对故障有较强的抵抗力。
获得哨兵
当前版本的哨兵被叫做“Sentinel 2”。它是用更强大和更简单的预测算法重写最初的Sentinel实现。
运行哨兵
redis-sentinel /path/to/sentinel.conf
或者
redis-server /path/to/sentinel.conf --sentinel
这两种方式是一样的
当运行哨兵时,必须使用一个配置文件,因为系统将会使用这个文件来保存当前状态,以便在重启的时候开业重新加载。如果没有提供配置文件,或者配置文件路径不可写,哨兵将拒绝启动。
默认情况下,哨兵会监听TCP端口26379,因此,为了让哨兵正常工作,服务器的26379端口必须是开放的,以便可以接收到来自其它哨兵实例的IP的连接。否则,哨兵就不能说话,也不能同意,故障转移也永远不会执行。(PS:意思是,哨兵之间用26379端口进行通信,如果不开放这个端口,其它哨兵就无法与它通信,它也不同同意其它哨兵)
部署哨兵之前要了解的基本知识:
1、对于一个健壮的部署,你需要至少3个哨兵实例
2、这三个哨兵应该被放置到相对独立的计算机或者虚拟机上(PS:独立失败,意思是一个失败了对其它的没用影响)
3、Sentinel + Redis分布式系统不能保证在故障期间已经确认的写操作被保留,因为Redis使用异步复制。
4、你的Redis客户端需要支持哨兵
5、如果你在开发环境(甚至是生产环境)没用经过一次又一次严格的测试,那么没用任何HA是安全的。可能你有一个错误的配置,但是一时半会儿看不出什么问题来,有可能过来很久以后这个错误配置导致的问题才会变得明显起来。(PS:意思是,上线前要严格测试,因为你的生产环境上并不是只有redis,有可能其它的隐患因素,比如防火墙什么的。。。)
6、哨兵、Docker,或者其它NAT或端口映射,这些混在一起要特别小心
配置哨兵
配置文件 sentinel.conf
一个典型的,最小最简洁的配置如下:
sentinel monitor mymaster 127.0.0.1
sentinel down-after-milliseconds mymaster
sentinel failover-timeout mymaster
sentinel parallel-syncs mymaster sentinel monitor resque 192.168.1.3
sentinel down-after-milliseconds resque
sentinel failover-timeout resque
sentinel parallel-syncs resque
你只需要指定要监视的masters,并且给它们(PS:指的是被监视的master)每一个(也许它们有许多slaves)指定一个唯一的名称。不需要指定slaves,哨兵会自动发现它们。哨兵将自动更新配置,向配置文件中添加一些关于slaves的信息(为了在重启的时候保留这些信息)。每次故障转移期间一个slave被提升为master,以及每次发现一个新的哨兵时,都会重写配置文件。
上面的配置示例中,监视两组Redis实例,每一组的都由一个master和未知数量的slaves。一个实例叫mymaster,另一个叫resque。
sentinel monitor 语句的格式如下:
sentinel monitor <master-group-name> <ip> <port> <quorum>
第一行是用来告诉Redis监视一个叫“mymaster”的master,它的地址是127.0.0.1,端口是6379,法定人数是2。
关于 quorum 参数:
1、quorum 是一个数字,代表需要有多少个哨兵同意给定的master不可达这个事实,为了真正标记这个slave失败,并且如果可能的话最终启动一个故障转移
2、quorum 只用于检测失败。为了真的执行一个故障转移,其中一个哨兵需要被选举成为leader,然后由这个leader来执行故障转移。而且,只有在哨兵中的大多数参与投票选举才算是有效。
如果你有5个哨兵,对于给定master的法定人数是2,那么将会发生:
1、如果两个哨兵都同意并且一致认为master不可访问,那么其中一个将尝试启动一个故障转移
2、如果至少有3个哨兵正常工作且相互可以正常通信,那么故障转移将会被授权,并真正开始执行
也就是说,如果哨兵中的大多数相互之间都无法通信,那么故障转移便从来都不会发生。
(画外音:上面这段话的意思是,只有当至少有法定人数个哨兵认为某个master不可到达的时候,才会尝试启动故障转移,但是最后是否真的执行要看本次投票是否有效,只有当大多数哨兵正常工作时投票才算有效。
也就是说要执行故障转移有两个条件:第一、大多数的哨兵工作正常;第二、至少法定人数个哨兵一致认为master不可访问)
其它哨兵选项
其它的选项大多数都是这样的格式:
sentinel <option_name> <master_name> <option_value>
1、down-after-milliseconds 参数是一个毫秒时间,表示多少毫秒没有回复则认为下线(要么是没有收到ping回复,要么是回复错误)
2、parallel-syncs 参数表示在一个故障转移后新的master需要配置的slave数量。这个数值越小,故障转移完成的所需的时间越长。如果将从服务器配置为服务旧数据,您可能不希望所有从服务器同时与主服务器重新同步。对于slave来说,复制过程基本上不是阻塞的,但有时它会停止从master装载大量数据。通过将此选项设置为1,可以确保一次只能访问一个slave。
哨兵部署示例

参考
https://redis.io/topics/sentinel
其它相关
《Redis集群》
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哨兵架构的基础知识及部署和管理
一.前言 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 ...
随机推荐
- 如何在电脑上配置两个tomcat
问题 准备逐渐转向idea的怀抱了,每次部署项目时和eclipse使用的都是同一个tomcat,这是很大的隐患,并且非常的不方便,遂再配置一个tomcat 1.下载tomcat和配置系统变量 CATA ...
- python-while else
count = 0 while count <= 5 : count += 1 if count == 3:break print("Loop",count) else: p ...
- 小程序即时聊天(仅页面功能,未接websocket)
我们都知道小程序是不能直接操作dom的,所以做即时通讯聊天功能的时候也就不能像之前做的一样:点击发送的时候,拼接一个节点到页面上.话不多说,以下是效果和代码: -------------------- ...
- [数据结构] 希尔排序 C语言程序
//由小到大 //希尔排序 void shellSort( long int array[], int length) { int i; int j; int k; int gap; //gap是分组 ...
- <算法图解>读书笔记:第1章 算法简介
阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.<算法图解> 第1章 算法简介 1.2 二分查找 一般而言,对于包含n个元素的列表,用二分查找最多需要\(l ...
- CF715B. Complete The Graph
CF715B. Complete The Graph 题意: 给一张 n 个点,m 条边的无向图,要求设定一些边的边权 使得所有边权都是正整数,最终 S 到 T 的最短路为 L 1 ≤ n ≤ 100 ...
- NOI2017总结
时光剥离你我像一袭华美衣衫 却要被追悔爬满 退役之战,去得匆匆,看得蒙蒙. 第三次全国赛,曾经的APIO初二选手也走到了时间的尽头. 第一次走向全国舞台的激动与忐忑,第一次在大赛中失利的沮丧与绝望,第 ...
- WebStorm重复代码快捷表达
一,问题 平时使用WebStorm时需要很多引用js,重复代码比较多,每次都要写很多次同样的代码,那么如何通过几个快捷键来简单的写出重复代码呢? 问题具体描述: 每次都要写两个script的重复: & ...
- RSP小组——团队冲刺博客二
RSP小组--团队冲刺博客二 冲刺日期:2018年12月11日 前言 经过第一天的冲刺,我们开始了我们冲刺之路,但是不知为什么,我们的动力并不足,首先可能是我们前期对该项目的编制过程中,因为没有经验, ...
- 用ttBulkCp把excel中的数据导入到timesten数据库中
最近要做数据预处理,需要用到数据库.而且是以前从来没听说过的TimesTen. 首要目标是要把Excel里的数据,导入到TimesTen数据库中.而TimesTen在win10里用不了,于是我就在虚拟 ...
