07.初步学习redis哨兵机制

一、哨兵(sentinal)的介绍


哨兵是redis集群架构中非常重要的一个组件,主要功能如下:

  • 集群监控,负责监控redis master和slave进程是否正常工作
  • 消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
  • 故障转移,如果master node挂掉了,会自动转移到slave node上
  • 配置中心,如果故障转移发生了,通知client客户端新的master地址

哨兵本身也是分布式的,作为一个哨兵集群去运行,互相协同工作

  • 故障转移时,判断一个master node宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题

  • 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的


二、主观和客观宕机


sdown:主观宕机,就一个哨兵如果自己觉得一个master宕机了,那么就是主观宕机
odown:客观宕机,如果quorum数量的哨兵都觉得一个master宕机了,那么就是客观宕机

达成条件

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

odown:如果一个哨兵在指定时间内,收到了quorum指定数量的其他哨兵也认为那个master是sdown了,那么就认为是odown了,客观认为master宕机


三、哨兵集群的自动发现机制


哨兵互相之间的发现,是通过redis的pub/sub系统实现的。

  1. 每隔两秒钟,每个哨兵都会往自己监控的某个master+slaves对应的__sentinel__:hello channel里发送一个消息,内容是自己的host、ip和runid还有对这个master的监控配置
  2. 每个哨兵也会去监听自己监控的每个master+slaves对应的__sentinel__:hello channel,然后去感知到同样在监听这个master+slaves的其他哨兵的存在
  3. 每个哨兵还会跟其他哨兵交换对master的监控配置,互相进行监控配置的同步


四、slave配置的自动纠正


哨兵会负责自动纠正slave的一些配置,比如slave如果要成为潜在的master候选人,哨兵会确保slave在复制现有master的数据; 如果slave连接到了一个错误的master上,比如故障转移之后,那么哨兵会确保它们连接到正确的master上

posted @ 2020-08-31 22:52  MrMirror  阅读(515)  评论(0编辑  收藏  举报