专栏首页DBA随笔Redis开发与运维学习笔记

Redis开发与运维学习笔记

//

Redis开发与运维学习笔记---(17)

//

Redis Sentinel实现原理---(一)

前面的文章讲述了redis sentinel可以实现对redis master的可用性监控和故障转移,今天从原理上来理解这个过程,sentinel的实现原理分为三个定时任务、主观下线和客观下线、sentinel领导者选举以及故障转移4个部分,今天来看前两个部分。

三个定时监控任务

Redis Sentinel通过三个定时监控任务完成对各个节点的发现和监控。

任务一:

每隔10s,每隔sentinel节点会向主节点和从节点发送info命令,获取最新的拓扑结构。

sentinel通过对info节点的结果解析,就能找到响应的从节点。这个info的定时任务,它的具体作用有如下三个方面:

a、通过向主节点执行info命令,获取从节点的信息。

b、当有新的从节点加入时,都可以立刻感应出来

c、节点不可达或者故障转移之后,可以通过info命令实时更新节点的拓扑信息

任务二:

每隔2s,每隔sentinel节点会向redis数据节点的__sentinel__:hello频道上发送该sentinel节点对于主节点的判断以及当前sentinel节点的信息。同时每隔sentinel节点也会订阅该频道,来了解其他sentinel节点以及他们对主节点的判断,所以这个定时任务可以在sentinel节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据。

任务三:

每隔1s,每隔sentinel节点会向主节点,从节点,其余sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达,实现对每隔节点的监控,这个定时任务是节点失败判断的重要依据。

主观下线和客观下线

先看主观下线

监控过程中的第3个定时任务ping,如果在down-after-milliseconds没有收到有效的回复,sentinel节点就会对该节点做失败判断,这个行为叫做主观下线,主观下线是sentinel作出的判断,存在误判的可能。

再看客观下线

当sentinel主观下线的节点时主节点时,该sentinel节点会通过sentinel is-master-down-by-addr命令向其他sentinel节点询问对主节点的判断,当超过<quorum>个数的sentinel节点人为主节点确实有问题,这时该sentinel节点会作出客观下线的决定,也就是说,当大部分sentinel节点都对主节点的下线做了同意的判定,那么这个判定就是客观的。

这里对is-master-down-by-addr命令做个介绍,该命令使用方法如下:

sentinel is-master-down-by-addr ip port current_epoch  runid

其中:

IP指主节点IP,PORT指主节点端口,

current_epoch指当前配置纪元(纪元请参考raft算法),

runid,当其为*时,作用是sentinel节点直接交换对主节点下线的判定。当runid等于当前sentinel节点的runid时,作用是当前sentinel节点希望目标sentinel节点同意自己成为领导者。该命令的返回值包含3个参数:

down_state:目标sentinel对主节点的下线判断,1

是下线,0是在线

leader_runid:当leader_runid等于*时,代表返回结果是用来做主节点是否不可达,当leader_runid等于具体的runid时,代表目标节点同意runid成为领导者。

leader_epoch:领导者纪元(纪元请参考raft算法)

时间原因,下篇文章,我们将详细展开领导者sentinel节点选举过程和故障转移过程。

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447),作者:AsiaYe

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis开发与运维学习笔记---(18)

    前面的文章讲述了redis sentinel实现原理当中的定时任务、主观下线和客观下线,今天我们来看sentinel领导者选举以及故障转移部分。

    AsiaYe
  • Redis开发与运维学习笔记---(11)

    之前的文章中,我们讲述了redis的复制机制,通过复制,数据可以被备份,然后这些备份的副本可以用来做读写分离、负载均衡、故障转移等,在实际应用复制功能时,有一...

    AsiaYe
  • MySQL主从复制详细介绍

    MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础,复制功能的目的是构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备...

    AsiaYe
  • KDD20 | AM-GCN:自适应多通道图卷积网络

    题目:AM-GCN: Adaptive Multi-channel Graph Convolutional Networks

    Houye
  • Hadoop周边组件学习笔记

    Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,它能让用户轻松地开发处理海量数据的应用程序,其主要优点有:

    数据社
  • HTML DOM(一):认识DOM

    什么是DOM?        通过 JavaScript,您可以重构整个HTML文档。您可以添加、移除、改变或重排页面上的项目。要改变页面的某个东西,Java...

    高爽
  • 大白话总结著名的 word2vec

    本文作者:Alicia , 现在美国名校读博士后,从事 AI 研究及教学工作,拥有 10 年以上工作与科研经历。

    double
  • Python3网络爬虫实战-16、Web

    我们平时用浏览器访问网站的时候,一个个站点形形×××,页面也各不相同,但有没有想过它是为何才能呈现出这个样子的? 那么本节我们就来了解一下网页的基本组成、结构、...

    py3study
  • MySQL高可用方案选型参考

    在这些可选项中,最常见的就是基于主从复制的方案,其次是基于Galera的方案,我们重点说说这两种方案。其余几种方案在生产上用的并不多,我们只简单说下。

    用户1516716
  • 一万字详解 Redis Cluster Gossip 协议

    大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示。

    黄泽杰

扫码关注云+社区

领取腾讯云代金券