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 ...
随机推荐
- 如何从Eclipse导入github上的项目源码--转载
[转载出处声明:hil2000的专栏] 1.首先在github.com上申请一个账号,比如笔者的账号为puma0072.Eclipse需要安装egit插件,在Eclipse中选择help->Ma ...
- 记录以下docker的基本命令
docker search xxx(tag) 在OFFICIAL上ok的是官方镜像 这里也可以去dockerhub上面看到 搜索xxx镜像docker images查看本地所安装的 ...
- 防御xss 大致理解
前端 发送留言内容 包含 js 代码 后台 管理员 查看 留言 代码被执行 拿到cookie 成功登陆 解决办法 对录入 进行相关的过滤处理 其他解决方法 正在学习中
- corel
corel CorelDRAW X6 Corel CorelCAD 2017 32位/64位破解版
- [转]玩转图片Base64编码
转自:[前端攻略]:玩转图片Base64编码 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 ...
- 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置 ...
- BZOJ5316 : [Jsoi2018]绝地反击
若$R=0$,那么显然答案为离原点最远的点到原点的距离. 否则若所有点都在原点,那么显然答案为$R$. 否则考虑二分答案$mid$,检查$mid$是否可行. 那么每个点根据对应圆交,可以覆盖圆上的一部 ...
- Ubuntu下编译SqlCipher以及解密微信数据库EnMicroMsg.db过程和坑
wget https://codeload.github.com/sqlcipher/sqlcipher/zip/v3.4.2 ./configure --enable-tempstore=yes C ...
- jQuery(一)
jquery介绍 jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. ...
- tf.contrib.slim.data数据加载 综述
TF-Slim为了方便加载各种数据类型(如TFRocords或者文本文件)的数据,创建了这个库. Dataset 这里的数据库与通常意义下数据库是不同的,这里数据库是python一个类,它负责将原始数 ...