Redis哨兵机制
发布日期:2021-05-06 23:31:01 浏览次数:35 分类:技术文章

本文共 1113 字,大约阅读时间需要 3 分钟。

文章目录

哨兵本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。判断一个master node是宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题

1.分布式哨兵的作用

  • 集群监控,监控master、slave进程是否正常工作
  • 故障转移,master故障(哨兵按照过半机制),自动转移到Slave上。并通知Client新的master地址
  • 消息通知,若某个Redis实例故障,就发消息给管理员

2.sdown和odown的转换机制

sdown:主观宕机,就1个哨兵ping1个master,超过is-master-down-after-milliseconds指定的毫秒数之后,认为master宕机了

odown:客观宕机,quorum数量的哨兵都觉得master宕机了

3.哨兵集群的自动发现机制

哨兵之间的互相发现,通过redis的pub/sub系统实现。哨兵向sentinel:hello这个channel里发送一个消息(自己的host、ip、runid和监控下的master的配置信息),且彼此之间相互共享

4.哨兵自动纠正slave

如果slave是master的候选人,哨兵会确保它能复制master的数据。一旦slave连接到错误的master,哨兵会对其进行纠正

5.slave —> master选举算法

如果master被认定为odown了,且majority哨兵也允许主备切换,某个哨兵就会执行切换。选举slave:

  • 跟master断开连接的时间
  • slave优先级
  • 复制offset
  • run id

如果S和M之间断开连接超过(down-after-milliseconds * 10) + master宕机时间,该slave就会被认定不合适。接着会进行slave排序:

  • slave priority越低,优先级就越高
  • 如果slave priority相同,那么看replica offset,哪个slave复制了越多的数据,offset越靠后,优先级就越高
  • 如果上面两个条件都相同,那么选择一个run id比较小的那个slave

如果某个哨兵要执行主备切换,必须满足过半机制。如果某个哨兵要切换,就会从master候选人那获取configuration epoch作为version号,每次切换的verison唯一。如果第一个哨兵失败了,其他哨兵会等待failover-timeout时间后继续执行切换,并重新获取version号。

哨兵执行主备切换完毕后,会在本地更新生成最新的master配置,并通过pub/sub共享给其他哨兵。其他哨兵根据version号来更新自己的master配置

上一篇:用Spark实现简单的单词统计
下一篇:Redis主从复制原理

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年03月21日 06时56分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章