在上一篇文章了解了主从复制,主从复制本身的容错性很差,一旦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哨兵模式的更多相关文章

  1. redis集群sentinel哨兵模式的搭建与实际应用

    参考资料:https://blog.csdn.net/men_wen/article/details/72724406 之前环境使用的keepalived+redis vip集群模式,现在我们服务切换 ...

  2. Redis笔记-Sentinel哨兵模式

    Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...

  3. Redis高可用之哨兵模式Sentinel配置与启动(五)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  4. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  5. Redis 5 配置 Redis sentinel(哨兵模式)

    先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...

  6. Redis实战——redis主从备份和哨兵模式实践

    借鉴:http://redis.majunwei.com/topics/sentinel.html     https://blog.csdn.net/u011784767/article/detai ...

  7. Redis系列七 主从复制(Master/Slave)

    主从复制(Master/Slave) 1.是什么 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主. 2 ...

  8. Redis 高可用之哨兵模式

    参考   : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解 ...

  9. redis主从配置+sentinel哨兵

    redis主从配置+sentinel哨兵 1:编译环境准备 1.1环境确认 Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.所以在搭建Redis服务器时需要C语言的编 ...

随机推荐

  1. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  2. Linux系统编程_6_进程环境(C程序典型的存储空间)

    1.八种结束Linux进程的方法: 五种正常终止方式: main函数返回: 调用exit: 调用_exit或_Exit 最后一个线程从其启动例程返回 最后一个线程调用pthread_exit 三种异常 ...

  3. 2016/2/24 . html . htm . shtml 的区别

    htm.html.shtml网页区别     htm.html.shtml区别 接下来我们来了解下htm.shtml.html这三者之间区别.首先htm.html.shtml都是静态网页的后缀,三者也 ...

  4. frame pointer及其用途

    1 什么是frame pointer frame pointer指向本函数栈帧顶,通过它可以找到本函数在进程栈中的位置.有专门的寄存器保存该值. 2 frame pointer有什么用 主要是back ...

  5. js生成页面水印

    路: 获取想要插入水印的文档节点的顶点坐标值x,y. 获取文档节点的高度heigt和宽度width. 用div包裹文字来生成水印. 定义好div的长宽高间距等各种属性. 定义虚拟节点createDoc ...

  6. HttpClient-03Http状态管理

    最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...

  7. CSU 1807: 最长上升子序列~ 分类讨论

    1807: 最长上升子序列~ Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 17[Submit][Status][Web Bo ...

  8. HDU 5073 数学题

    题目传送门 http://acm.hdu.edu.cn/showproblem.php?pid=5073 这道题RE了好多发啊囧,RE到精神不振. Galaxy的质心并不是一成不变的,随着一些星球的移 ...

  9. astgo经常死机变慢?试试mysql数据碎片整理吧

    使用SSH之类的工具或navicat链接数据库后(注意:是链接数据库后哦,不是直接SSH后就弄,这样提示命令错误的) 执行下面命令(目的是对ASTGO的数据库内除话单之外的所有表进行数据碎片整理,特别 ...

  10. 15_传智播客iOS视频教程_OC语言完全兼容C语言

    OC支持C语言所有的运算符并且效果是一样的.C语言中所有的运算符OC都支持.这些所有的运算符OC当中全部都支持. 包括C语言的结构体.枚举全部都可以写在OC当中,没有任何问题,并且效果是一样的. 比如 ...