Redis Sentinel 服务端实现原理

Stella981
• 阅读 746

Redis主从复制-master

Redis Sentinel 服务端实现原理

Redis Sentinel 服务端实现原理

高可用解决方案

Redis Sentinel 服务端实现原理

三个定时任务

1、每10秒每个sentinel对master和slave执行info

    (1) 发现slave节点

    (2) 确认主从关系

Redis Sentinel 服务端实现原理

2、每2秒每个sentinel通过master节点的channel交换信息(pub/sub)

    (1) 通过_sentinel_:hello频道交互

    (2) 交互对节点的“看法”和自身信息

Redis Sentinel 服务端实现原理

3、每1秒每个sentinel对其他sentinel和redis执行ping

    (1) 心跳监测,失败判定依据

Redis Sentinel 服务端实现原理

领导者选举

原因:只有一个sentinel节点完成故障转移

选举:通过 sentinel is-master-down-by-addr 命令都希望成为领导者

1、每个做主观下线的sentinel节点向其他sentinel节点发送命令,要求将它设置为领导者。

2、收到命令的sentinel节点如果没有同意其他sentinel节点发送的命令,那么将同意该请求,否则拒绝。

3、如果该sentinel节点发现自己的 number of votes 已经超过sentinel集合半数且超过quorum,那么它将成为领导者。

4、如果此过程有多个sentinel节点成为了领导者,那么将等待一段时间重新进行选择。

故障转移(sentinel领导者节点完成)

1、从slave节点中选出一个“合适的”节点作为新的master节点

2、对上面的slave节点执行 slaveof no one 命令让其成为master节点

3、向剩余的slave节点发送命令,让它们成为新的master节点的salve节点,复制规则和parallel-syncs参数有关。

4、更新对原来master节点配置为slave,并保持着对其“关注”,当其回复后命令它去复制新的master节点。

选择“合适的”slave节点

1、选择 slave-priority(slave节点优先级)最高的salve节点,如果存在则返回,不存在则继续。

2、选择复制偏移量最大的slave节点(复制的最完整),如果存在则返回,不存在则继续。

3、选择runId最小的salve节点。

总结

1、Redis Sentinel 是Redis的高可用使用方案:故障发现、故障自动转移、配置中心、客户端通知。

2、Redis Sentinel 从Redis2.8版本开始才正式生产可用,之前版本生产不可用。

3、尽可能在不同物理机上部署Redis Sentinel所有节点。

4、Redis Sentinel 中的Sentinel节点个数应该为大于等于3且最好为奇数。

5、Redis Sentinel 中的数据节点与普通节点没有区别。

6、客户端初始化时连接的是Sentinel节点集合,不再是具体的Redis节点,但Sentinel只是配置中心不是代理。

7、Redis Sentinel 通过三个定时任务实现了Sentinel节点对于主节点、从节点其余Sentinel节点的监控。

8、Redis Sentinel 在对节点做失败判定时分为主观下线和客观下线。

9、看懂 Redis Sentinel 故障转移日志对于 Redis Sentinel 以及问题排查非常有帮助。

10、Redis Sentinel 实现读写分离高可用可以依赖 Sentinel 节点的消息通知,获取Redis数据节点的状态变化。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java——20171121
!(http://a.51jsoft.com/uploads/default/original/1X/c542896b094a42a5653fb75adf6cdacd6e35d12e.png)!(https://static.oschina.net/uploads/space/2017/1121/210719_G80Z_3715033.png)
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
!(https://static.oschina.net/uploads/space/2016/1208/171419_U00R_561214.png)PHP寥寥几行代码轻松实现百度搜索那样的分页列表和导航链接,某些语言的拥趸哭晕在厕所.<?php$apparray('db_prefix''
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这