zoukankan      html  css  js  c++  java
  • redis健康检查与故障转移

    哨兵三个定时监控任务

    1. 每隔10s每隔sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构
    2. 每隔2S,每个sentinel节点会向redis数据节点的__sentiel__:hellp发送sentinel节点信息,用于了解新节点相关信息,如果是新节点则将其保存下来。并与其建立连接。
    3. 每隔1S,每隔sentinel节点会向主节点和从节点其余的sentinel节点发送平命令作为心跳监测,来确定这些节点是否可达。

    总结

    1. 每隔10s发送获取拓扑心跳
    2. 每隔2S获取新节点数据
    3. 每隔1S监测节点和哨兵通信正常

    下线规则

    1. 主观下线:涉及down-after-millseconds参数,如果某一个哨兵与某一个redis节点在这个参数时间中没有连接成功,则说明有问题,则下线
    2. 客观下线:如果通过主观下线的是主节点的时候,由于涉及到后面的leader选举,则需要进行客观判断,,通过参数is-master-down-by-addr向所有的哨兵节点询问,如果大部分都认为该节点有问题,则进行下线操作。

    sentinel选举

    Raft

    1. 发送 is-master-down-by-addr进行要求将自己设置为leader.
    2. 收到命令的sentinel会判断,如果其没有同意过其他的sentinel节点的命令则同意,否则拒绝
    3. 如果该sentinel发现自己的票数大于等于max(quorum,num(sentinels)/2);则将成为领导者
    4. 将进入下一次选举

    总结 选举的过程非常快,基本上谁先完成客观下线,则谁就是领导者

    故障转移

    当sentinel选举完成后,需要对数据进行同步,则会出现选举redis主节点

    1. 过滤(主观下线,断线)的节点
    2. 选择slave-priority优先级搞的节点列表,如果存在则返回,不存在则继续
    3. 选择复制偏移量最大的从节点,如果存在则返回,不存在则继续
    4. 选择runid最小的从节点

    总结 过滤无用节点->选择优先级高->选择偏移量大->选择runid最小

  • 相关阅读:
    C# 停止或开启服务
    微软企业库 缓存
    C# 获取图片一部分
    [转载]MVC3在win 2003虚拟主机上的调试
    mongodb查询的语法
    Mongodb亿级数据量的性能测试比较完整收藏一下
    正则验证数字
    收到了Gmail的Beta测试邀请
    C#新手经验点滴
    Windows消息机制
  • 原文地址:https://www.cnblogs.com/lonecloud/p/9128030.html
Copyright © 2011-2022 走看看