redis sentinel

redis sentinel

sentinel如何获取master, slave,其他sentinel信息

// sentinel数据结构
struct SentinelStatus {
    Dict* masters;
}

// master数据结构
struct SentinelRedisInstance {
    Dict* sentinels;
    Dict* slaves;
}
  • 获取master信息:
    • sentinel监控的master信息事先写入了sentinel的配置文件
    • sentinel启动时载入配置文件,初始化master字典
    • sentinel对master建立命令连接及订阅连接
  • 获取slave信息:
    • sentinel定时向master及已发现的slave发送INFO命令,获取master及slave信息,更新master的slave字典
    • sentinel对新发现的slave建立命令及订阅连接
  • 获取其他sentinel信息:
    • sentinel向所有被监视服务器(master和slave)的__sentinel:hello__频道发送消息。
      • 该消息包含sentinel信息,sentinel监视的master信息
    • sentinel订阅__sentinel:hello__频道,从中得到与自己监视相同master的sentinel信息,更新master的sentinel字典
    • sentinel发现新的sentinel后,立刻与新sentinel建立命令连接

小结:为什么sentinel不采用配置的方式获取slave及其他sentinel信息

  • sentinel只读取必要的信息,提高启动速度
  • 通过发布/订阅的方式,可以不需要在sentinel启动前就获取集群中所有sentinel信息。当添加新的sentinel或slave时,集群可以动态发现。

sentinel如何判断master是否下线

  • sentinel定时向所有与它连接的实例(master, slave, sentinel)发送PING命令,根据命令返回值判断实例是否在线
  • 主观下线
    • 在一定时间内,sentinel没有从实例获得有效回复,sentinel认为实例主观下线
    • sentinel认为master主观下线后,会向其他sentinel群发命令,询问他们是否认为master下线
    • 有超过quorum个sentinel认为master下线后,master状态将变成客观下线
  • 客观下线
    • master状态变成客观下线后,sentinel会对master实施故障转移

sentinel如何实施故障转移

为了防止多个sentinel同时监听到master客观下线,并同时对master实施故障转移,sentinel们需要先选举出领头的sentinel, 由领头sentinel负责实施。

如何选择领头的sentinel(Raft选举算法)

  • Raft选举算法介绍
  • 每个sentinel都有机会成为领头sentinel
  • 每个sentinel向其他sentinel发起投票邀请,要求其他sentinel将自己选举为局部领头sentinel
  • sentinel接收到第一个投票邀请后,将发起投票邀请的sentinel设置为自己的局部领头sentinel,并回复对方。拒绝后面到达的投票邀请
  • sentinel收到选民的回复后,统计自己的票数,如果过半数,自己就成为领头sentinel
    • 不过半数的话,可能会出现多个sentinel认为自己是leader
  • 如果选举失败,将进入下一轮选举,直至选出leader sentinel

如何实施故障转移

  • 选举出领头sentinel后,领头sentinel筛选下线master的从服务器,从中选出一个作为新的master。
  • sentinel向新master发送slaveof no one命令。在新master身份转换成功后,向其他从服务器发送slave of newMaster命令,向下线master的数据结构里记录slaveof newMaster命令
  • 新master筛选规则:
    • 根据sentinel与slave的通信时延,slave与旧master的失联时间,过滤不合格slave
    • 根据优先级>复制偏移量>slave id的顺序选出新master
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值