Redis系列(七)--Sentinel哨兵模式
在上一篇文章了解了主从复制,主从复制本身的容错性很差,一旦master挂掉,只能进行手动故障转移,很难完美的解决这个问题
而本文讲解的sentinel可以解决这个问题
Redis sentinel示意图:

安装与配置
1、配置开启主从节点
2、配置开启sentinel监控主节点(sentinel是特殊的Redis)
1.1、配置master、slave
master节点:port 6379
port 6379
daemonize yes //以守护进程的方式启动
pidfile "/var/run/redis_6379.pid"
logfile "6379.log"
dir "/var/local/redis/data"
两个slave节点:port 6380 6381
port 6380
daemonize yes //以守护进程的方式启动
pidfile "/var/run/redis_6380.pid"
logfile "6380.log"
dir "/var/local/redis/data"
slaveof 127.0.0.1 6379
port 6381
daemonize yes //以守护进程的方式启动
pidfile "/var/run/redis_6381.pid"
logfile "6381.log"
dir "/var/local/redis/data"
slaveof 127.0.0.1 6379
启动这三个Redis实例,查看6379的信息
redis-cli -a huluhulu -p 6379 info replication
role:master
connected_slaves:2
可以看到本身是master,连接了两个slave
1.2、配置sentinel
port 26379
dir /usr/local/redis/data/
logfile 26379.log
sentinel monitor mymaster 127.0.0.1 6379 2 //master名称为mymaster,2是指有两个sentinel认为master发生故障,就会发生故障转移
sentinel down-after-milliseconds mymaster 30000 //30s无法ping通master,就认为故障了
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
通过命令redis-sentinel sentinel-{port}.conf启动三个sentinel实例
通过info命令查看sentinel信息
sentinel可以监控多套master-slave
1.3、sentinel故障转移过程
1、多个sentinel发现并确认master出现故障
2、选择一个sentinel作为领导
3、选取一个slave作为master
4、通知其它slave作为master的slave
5、通知客户端主从变化
6、等待老的master复活作为新的master的slave
第二步领导者选取:
原因:
只需要一个sentinel完成故障转移
过程:
通过命令询问别的sentinel节点选举自己成为领导者,只要没有投过票就会同意,只要超过quorum就可以成为领导者,如果有多个领导者,等
待一段时间重新选取
第三步重新选择master的条件,依次判断,直到满足为止:
1)、通过slave-priority(如果机器配置不同,可以把高配机器priority设置更高)选择优先级高的
2)、选择offset最大的节点,和master的offset最接近,数据更加完整
3)、选择run_id最小的slave节点
对这个slave执行slaveof no one使其成为master
第六步对挂掉的master节点标记为slave,对其保持关注,一旦复活,也要成为新master的slave节点
1.4、sentinel三个定时任务
sentinel通过三个定时任务对master进行异常判断和故障转移
1、每10s每个sentinel对master和slave执行info,以此来发现slave节点和确定主从关系
2、每2s每个sentinel通过master节点的channel和其它sentinel交换信息(pub/sub 发布订阅)
3、每1s每个sentinel对其它sentinel和redis执行ping
sentinel monitor <masterName> IP Port <quorum> quorum指法定人数,sentinel主观下线的人数达到法定人数就可以进行客观下线
主观下线:每个sentinel对Redis节点失败的"偏见"
客观下线:所有sentinel对Redis节点失败的"共识"
Redis系列(七)--Sentinel哨兵模式的更多相关文章
- redis集群sentinel哨兵模式的搭建与实际应用
参考资料:https://blog.csdn.net/men_wen/article/details/72724406 之前环境使用的keepalived+redis vip集群模式,现在我们服务切换 ...
- Redis笔记-Sentinel哨兵模式
Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)
参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...
- Redis 5 配置 Redis sentinel(哨兵模式)
先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...
- Redis实战——redis主从备份和哨兵模式实践
借鉴:http://redis.majunwei.com/topics/sentinel.html https://blog.csdn.net/u011784767/article/detai ...
- Redis系列七 主从复制(Master/Slave)
主从复制(Master/Slave) 1.是什么 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主. 2 ...
- Redis 高可用之哨兵模式
参考 : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解 ...
- redis主从配置+sentinel哨兵
redis主从配置+sentinel哨兵 1:编译环境准备 1.1环境确认 Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.所以在搭建Redis服务器时需要C语言的编 ...
随机推荐
- ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析
ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析 IoC框架最本质的东西:反射或者EMIT来实例化对象.然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否 ...
- Write a program that gives count of common characters presented in an array of strings..(or array of
转自出处 Write a program that gives count of common characters presented in an array of strings..(or arr ...
- ExecuteNonQuery()的用法
ExecuteNonQuery()的用法 下面我们将详细讲解如何在Page_Load()中对数据库的增加.删除.修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar ...
- 【前端】jQuery的animate在火狐浏览器上不支持backgroundPosition的解决方法
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/4375678.html jQuery的animate是一个非常好用的东东,但某些动画效果支持得不够好,比如back ...
- Java IO --ByteArrayOutputStream (六)***
Java提供了很丰富的io接口,已经可以满足我们大部分读取数据的需求,这个在C读取数据需要自己定义缓冲区数组大小,而且要小心翼翼的防止缓冲区溢出的情况相当不同.一般情况下我们读取的数据都是直接读取成为 ...
- struct框架
配置文件struct-config.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE str ...
- query或者JavaScript实现在textarea光标处插入文本
1.Jquery函数实现: $(function() { /* 在textarea处插入文本--Start */ (function($) { $.fn.extend({ insertContent ...
- 使用showmap分析android进程内存占用情况(转载)
转自:http://my.oschina.net/shaorongjie/blog/105354 可以使用adb shell showmap pid查看一个进程的showmap,这对于我们来说非常有用 ...
- SVG Path标签 A 参数
A rx ry x-axis-rotation large-arc-flag sweep-flag x yrx:x轴半径ry:y轴半径x-axis-rotation:指椭圆的X轴与水平方向顺时针方向夹 ...
- python自动化测试学习笔记-6excel操作xlwt、xlrd、xlutils模块
python中通过xlwt.xlrd和xlutils操作xls xlwt模块用于在内存中生成一个xls/xlsx对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件; xlrd模块用于把 ...