Redis哨兵配置详解
一、概述
Redis哨兵(以下称哨兵)是为Redis提供一个高可靠解决方案,对一定程序上的错误,可以不需要人工干预自行解决。
哨兵功能还有监视、事件通知、配置功能。以下是哨兵的功能列表:
监控:不间断的检查主从服务是否如预期一样正常工作
事件通知:对被监视的redis实例的异常,能通知系统管理员,或者以API接口通知其他应用程序。
智能援救:当被监视的主服务异常时,哨兵会智能的把某个从服务提升为主服务,同时其他从服务与新的主服务之间的关系将得到重新的配置。应用程序将通过redis服务端重新得到新的主服务的地址并重新建立连接。
配置服务:客户端可连接哨兵的接口,获得主从服务的相关信息,如果发生改变,哨兵新通知客户端。
哨兵的分布式
哨兵是个分布式系统,通过配置文件可以多个哨兵合作,以实现它的健壮性:
1.某个主服务是否正常,需要通过多个哨兵确认,这样可保证误判的低概率。
2.当哨兵工作的时候,总会有个别哨兵不能正常运行,如个别系统出现故障,所以多个哨兵合作运行,保证了系统的健壮性。
所有的哨兵、redis实例(包括主与从)和客户端相互之间会有交互,这是一个大的分布式系统,在此文档中将由浅入深地介绍哨兵的基础概念,以便更好的理解其基本属性,然后是更复杂的特性,让你理解它是如果精确的工作。
二、开始
1.获得哨兵
哨兵当前为Sentinel 2,它是在原来版本的基础上用了更健壮更简单的预演算法(后文有详解)。
哨兵的稳定版本与redis2.8与redis3.0一起发布,新特性的研发在不稳定版本分支时,当它被确认稳定后,将会被追加到redis2.8与redis3.0版本中。
与redis2.6一起发行的Sentinel 2版本,已淘汰不可用。
2.运行哨兵
如果有哨兵的可执行文件(或者与redis server执行文件有个符号连接(自己查阅Linux连接文件知识)),可通过如下的命令行启动哨兵:
redis-sentinel /path/to/sentinel.conf
不然,就得通过redis server执行文件的哨兵模式直接用以下命令启动:
redis-server/path/to/sentinel.conf –sentinel
以上两个方式的效果是一样的。
但是当哨兵正运行时,必须使用配置文件,它可以记载哨兵运行状态,当哨兵重启时可重用(重新载入配置文件)。如果没指定配置文件,或者路径不可写(因为需要往配置文件更新运行时状态)那哨兵将不能正常启动的。
哨兵的默认开启的TCP服务端口是26379,所以需要把此端口的防火墙、端口映射之类的工作做好,以便其他哨兵能与其交互、协商相关的工作,不然对redis的援救之类的工作就无法运行了。
3.布置前你必须知道的
1.你最少需要三个哨兵实例,以提高健壮性。
2.三个实例可以布置在不同计算机或者虚拟机中,然而需要确保他们出问题的话,互不影响,如它们运行在相互不影响的不同的物理机或者虚拟机中。
3.哨兵+redis分布系统并不能保证100%的异常通信的写安全,当故障发生时。但是可能有其他方式来调节“窗口”(自行查阅TCP/IP通信相关资料)来保证数据丢失控制在一定范围内,如果没有其他更好的解决方案的话。
4.你需要让你的客户端支持哨兵,设计好的客户端都支持哨兵。
5.在开发环境中,如果没有HA设置(对布置的系统反复测试),它也算安全的,但是在生产环境,那可能会导致一些未知错误,当你发现的时候可能已经晚了。歪国人真是废话多,就是一句话,告诉你在生产环境中,最好要反复测试。
6.对于哨兵、Docker或者其他寻址、端口映射工具要合理应用:Docker是端口从映射,侦测其他哨兵的存在与主服务的从服务列表,关于哨兵与Docker的详细信息参见后文相关章节。
4.配置哨兵
与redis一起发布的源文件中,有一个“sentinel.conf”自说明的配置文件模板,它是很好的官方配置说明,以下是最简单的配置项:
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
只要设定待监控的主服务,并给它取一个唯一的名称,从服务会被自动检查到,不需要手动指定。哨兵将更新配置文件,当以下几种情况发生时,1.新的从服务被侦测到,2.当异常发生,有从服务被提升为主服务时,3.新的哨兵被侦测到时。
在以上示例中,有两个redis实例被监控,一个主服务与一个未命名的从服务,分别叫mymaster和resque:
sentinel monitor <master-group-name> <ip> <port> <quorum>
sentienl monitor是告诉哨兵监控一个叫做mymaster的实例,它的地址与端口分别是127.0.0.1和6379,然后quorum是什么意思呢?
c它是一个权重,如果为2,也就是说最少有2个哨兵认为此主服务down了,授权给它发起援救程序。
c事实上quorum只是用于检测故障,而实行救援,将选举出某个哨兵,并被授权负责救援工作才能实行,而只有在多数哨兵在岗的情况下才能实行选举并实行这项任务。
例如有5个在岗哨兵,主服务的quorum被设置为2,那将发生什么情况:
c如果有两个哨兵认为主服务down了,那它们两中的一个负责与救援工作。
c这里最少有三个哨兵在岗,并想到能交互,救援工作才能被授权,真实的救援工作才能开始。
事实上,如果多数(这里多数少数的概念应该是对半分,超过50%为多数)的哨兵不在岗,不能相互交互,那救援工作是不可能实行的。
其他项的说明:
其他项的格式都是一样的,如下:
sentinel <option_name> <master_name> <option_value>
cdown-after-milliseconds是哨兵在多少毫秒内无法联系上的话,这个实例将被认为已经down了,它是个时限。
cparallel-syncs从服务通过地救援成为新的主服务后,与新主服务进行再同步的从服务个数,此值越小,救援花费的时间越长(这个并没有理解),但是越大就意味着越多的从服务因为与主服务同步而不可用。所以把此值设置为1,来保证每次只有一个从服务因为同步而不可用。
其他项的介绍请参看后文,同时在与redis共同发布的setinel.conf文件里也有自说明。
所有的参数项都可能通过SENTINEL SET命令来修改,关于此指令的说明请参看后后续章节的“运行时哨兵重配置”。
三、配置样例
1.概述
经过前章节的介绍,现在知道了关于哨兵的一些基本知识,现在也许你想知道我们应该把哨兵布置在哪里?需要多少哨兵实例?现在我们以简单的图例来说明如何布置等问题:
一个这样的框,我们叫它为一个“盒子”,它可以是一个物理机或虚拟机,如果有失败、故障它将是独立的,不影响其他“盒子”。
如图,M1表示主服务1,而S1表示哨兵1。
不同的盒子之间用线相连,表示他们之间是可以交互的。
网络隔离不可相互交流的话,连线之间加双斜线,表示隔离的。
总结如下:
c M1, M2, M3, …, Mn代表主服务。
c R1, R2, R3, …, Rn(R可以理解成Replica(复制))代表从服务。
c S1, S2, S3, …, Sn代表哨兵。
c C1, C2, C3, …, Cn代表客户端。
c如果有的角色由于哨兵的调度转变了,那用方括号把它括起来,如[M1]表示它现在是个主服务。
2.样例1:两个哨兵
只有两个哨兵的情况,是无法正常开展救援工作的,因为无法通过以获得多数票来得到授权。
c如果M1主服务Down了的话,那R1将被提升为主服务,在两个哨兵能达成救援决议,因为出席数(quorum)为1,所以能发起救援程序,因为获得两个哨兵的支持,为多数方。所以很明显它是能正常工作的。为什么又不能正常工作呢,请看下一种情况。
c如果M1所在的“盒子”停止了工作,那S1当然也是DOWN了,只剩下S2是无法拿到救援授权的,这样的话整个系统就DOWN了。
所以最少三个哨兵布置到三个不同的独立环境中是非常必要的。
3.样例2:标配(三个独立环境)
最基本的配置,三个哨兵在三个不同的独立环境中,每个环境跑一个redis实例与一个哨兵。如下图:
如果M1主服务DOWN了的话,S2与S3能达成协议发起救援程序。然后,redis一般都设置为异步通信的,所以必然会有一些数据还没来得及同步到自己的从服务时,主服务Down了,而这里从服务提升为主服务,这个时候那必然会丢失一些数据,但是这里有更可怕的风险,因为客户端与旧的主服务一起被隔离于其他实例。如下图:
当M1所在的“盒子”与其他“盒子”失去联系,那S2与S3将达成救援协议,把R2提升为主服务,但是可怕的是,因为客户端原先就与M1在同一边的,可能C1与M1之间通信还是正常的,C1还不停的往M1注入数据呢,等到M1与其他redis实例之间的通信恢复后,哨兵会把M1降为M2的从服务,M2才是新的主服务,这个时候,M1(已经是S1)将以M2为主服务,并以M2数据为准进行同步,可悲的事情发生了,C1在M1与其他redis断网期间写入的数据,将彻底的丢失了。
这个问题可以通过以下的redis主从复制的特性得到解决,即当主服务无法将数据同步到自己的指定数量的从服务的时候,那就停止接收数据的写入。
min-slaves-to-write 1
min-slaves-max-lag 10
以上配置效果是,当M1不能把自己的内容同步给最少一个从服务(S2、S3都写入不了了),其实这种情况下,从服务也与主服务失去了连接,那主服务将拒绝客户端的写入。或者没有收到任何一个从服务的回馈超过10秒钟,也会导致一样的效果。通过此配置,M1在10秒钟之后将拒绝写入,当M1的局部网络恢复后,哨兵将重新配置他们的角色,C1也会重新找到谁是新的主服务,当然10秒钟的数据丢失那也是难免的了。
然而,天下并没有免费的午餐,如果两个从服务同时down了的话,那主服务将拒绝写入操作,这犹如该死的政治妥协,让人不爽。
4.样例3:哨兵在客户端环境中
有的时候,我们只有两个独立的环境,一个布置主服务,一个布置从服务。那将发生样例2中的情况了,我们这个时候可以把哨兵转到客户端环境中。
</div>
Redis哨兵配置详解相关推荐
- Redis 3 配置详解
注:转载请注明出处o(^▽^)o Redis就不多介了,博客中有更多Redis教程. 本文会总结Redis的整个配置,并附上示例. 概述 Redis可以在没有配置文件的情况下通过内置的配置来启动,但是 ...
- Redis常用配置详解
目录 1.使用config命令查看和修改配置 2.编辑redis.conf文件修改redis配置 3.redis.conf中常用配置项说明 Redis 的配置文件位于 Redis 安装目录下,文件名为 ...
- php配置redis哨兵模式,详解Redis哨兵模式
下面由Redis教程栏目给大家介绍关于java基于redis有序集合实现排行榜,希望对需要的朋友有所帮助! 哨兵是一个独立的进程. 原理:哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个 ...
- jedispool redis哨兵_Redis详解(九)------ 哨兵(Sentinel)模式详解
在上一篇博客----Redis详解(八)------ 主从复制,我们简单介绍了Redis的主从架构,但是这种主从架构存在一个问题,当主服务器宕机,从服务器不能够自动切换成主服务器,为了解决这个问题,我 ...
- Redis哨兵模式详解
开胃菜 1,配置哨兵配置文件 sentinel.conf # sentinel monitor 被监控的名称 host port 1 sentinel monitor myredis 127.0.0. ...
- Redis哨兵技术详解:实现故障恢复自动化
一.作用和架构 1.作用 在介绍哨兵之前,首先从宏观角度回顾一下Redis实现高可用相关的技术.它们包括:持久化.复制.哨兵和集群,其主要作用和解决的问题是: 持久化:持久化是最简单的高可用方法(有时 ...
- 十八、redis.conf配置详解
启动的时候,就通过配置文件来启动! 工作中,一些小小的配置,可以突出专业性! [root@localhost rconfig]# more redis.conf 单位 # Redis configur ...
- redis哨兵相关详解
1 哨兵的作用 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控:负责监控redis master和slave进程是否正常工作 消息通知:如果某个redis实例有故障,那么哨兵负 ...
- Redis哨兵的详解
1 哨兵的作用 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控:负责监控redis master和slave进程是否正常工作 消息通知:如果某个redis实例有故障,那么哨兵负 ...
最新文章
- 360董事长周鸿祎发表全员信:疫情当前,要做好长期在家办公的准备
- Gut Microbes:中科院微生物所王军组在新冠病人肠道病毒组研究取得新进展
- (周星驰版)学习委托的最好实例 (转载+自己补充了注释)
- perl 引用(一)
- mysql查询员工排班信息_考勤管理信息系统人员排班管理及查询
- 药学专业报计算机一级有用吗,全网友泣泪劝阻!高考结束之后,什么专业千万不能报?...
- react-native踩坑的开始!
- 电脑控制手机屏幕软件_手机屏幕如何投屏到电脑
- php 安装pdo odbc,php如何安装pdo odbc扩展
- request库的基本使用
- 并不对劲的AC自动机
- Session一次错误记录
- (二)探究本质,WebGIS前端地图显示之地图比例尺换算原理
- 自己封装的swing框架,能够快速写出一个页面(带Tab、菜单)
- git上传详细步骤和提交代码的各种报错解决方式.
- win10c语言0xc0000142,Win10错误码0xc0000142怎么修复
- Docker中安装并配置redis
- 从mysql2ch到synch,一次重构与升级
- 思科c系列服务器cimc密码,UCS C系列服务器故障排除提示.PDF
- 电脑桌面文件不见了怎么恢复?
热门文章
- Python-如何食(使)用美丽汤(BeautifulSoup)?
- BFS【古希腊之争(二)】
- coreldraw矫正两张图_如何在CorelDRAW中对倾斜的图像进行矫正
- 大专计算机适合女生的专业,大专专业都有哪些?女生学哪些比较好?
- 7.1.1-7.5 学习笔记
- ubuntu20配置ip
- [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(一)
- Falsh Device
- 赶紧打开花呗看看,你的额度降了没
- 《Excel 职场手册:260招菜鸟变达人》一第 31 招 国际象棋棋盘式底纹设置方法...