zoukankan      html  css  js  c++  java
  • 第九章:哨兵-实现原理

    Redis sentinel基本原理分为以下几方面:
    • Redis sentinel的三个定时任务
    • 主观下线和客观下线
    • Sentinel领导者选举
    • 故障转移
     
    sentinel的三个定时任务:完成对各个节点发现和监控
    1、每隔10秒,每个sentinel节点会向主节点和从节点发送info命令获得最新的拓扑结构;
    • 通过向主节点执行info命令,获得从节点的信息,这也是为什么sentinel节点不需要显示配置监控从节点。
    • 当有新的从节点加入时都可以立即感知出来
    • 节点不可达或者故障转移后,可以通过info命令实现更新节点拓扑信息
    2、每隔2秒,每个sentinel节点会向Redis数据节点的__sentinel__:hello频道上发送该sentinel节点对于主节点的判断以及当前sentinel节点的信息,同时每个sentinel节点也会订阅该频道,来了解其他sentinel节点以及他们对主节点的判断;
    • 发现新的sentinel节点,通过订阅__sentinel__:hello频道
    • sentinel节点之间交换主节点的状态,作为后面客观下线和领导者选举的依据
    3、每隔1秒,每个sentinel节点会向主节点、从节点、其余sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。
     
    客观下线和主观下线
    1、主观下线
    每隔sentinel节点会每隔1秒对主节点、从节点、其余sentinel节点发送ping命令做心跳检测,当这些节点超过down-after-milliseconds没有进行有效回复,sentinel节点就会对该节点做失败判定,这种行为叫主观下线。
    2、客观下线
    当sentinel主观下线的节点是主节点时,该sentinel节点会通过sentinel is-master-down-by-addr命令向其他sentinel节点询问对主节点的判断,当超过quorum个数,sentinel节点认为主节点确实有问题,这时该sentinel节点会做出客观下线的决定。
     
    领导者sentinel节点选举
    假如sentinel节点对主节点做出了客观下线,需要在sentinel集群中选举出一个领导者进行故障转移。
    Redis使用Raft算法实现领导者选举,具体步骤:
    1. 每个在线的sentinel节点都有资格成为领导者,当一个sentinel节点确认主节点客观下线时,会向其他sentinel节点发送sentinel is-master-down-by-addr命令,要求将自己设置为领导者
    2. 收到命令的sentinel节点,如果没有同意其他sentinel节点的sentinel is-master-down-by-addr命令,将同意该请求,否则拒绝;
    3. 如果该sentinel及诶单发现自己的票数已经大于max(quorum,num(sentinel)/2+1),那么它将成为领导者;
    4. 如果此过程没有选举出领导者,将进行下一次选举;
    5. 每个sentinel节点只有一票;
     
    故障转移
    领导者sentinel节点负责故障转移步骤:
    1、在从节点列表中选出一个节点做为新的主节点,选择方式:
    • 过滤(主观下线、断线)、5秒内没有回复过sentinel节点ping响应、与主节点失联超过down-after-millionseconds*10秒
    • 选择slave-priority(从节点优先级)最高的从节点列表,如果存在则返回,不存在则继续
    • 选择复制偏移量最大的从节点(复制的最完整),如果存在则返回,不存在则继续;
    2、sentinel领导者节点会第一步选出来的从节点执行slaveof no one命令让其成为主节点;
    3、sentinel领导者会向剩余的从节点发送命令,让它们成为新主节点的从节点,复制规则和Parallel-syncs参数有关;
  • 相关阅读:
    Working with nil
    Determining Equality of Objects
    NSLog中的%@
    ld
    恢复HDFS误删数据
    一个缓冲区溢出示例
    SpringBoard
    Symbol Table
    feof使用注意
    -g vs -rdynamic
  • 原文地址:https://www.cnblogs.com/use-D/p/10772098.html
Copyright © 2011-2022 走看看