redis的哨兵工作原理

哨兵简介

哨兵 (sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
哨兵工作

哨兵的作用

哨兵在进行主从切换过程中经理三个阶段:

  1. 监控 ,不断的检查master和slave是否正常运行;master存活检测、 master与slave运行情况检测
  2. 通知(提醒),当被监控的服务器出现问题时, 向其他(哨兵间,客户端) 发送通知
  3. 自动故障转移,断开master与slave连接,选取一个slave作为master,将其他slave连接新的master,并告知客户端新的服
    务器地址

哨兵的工作原理

阶段一:监控阶段

  • 用于同步各个节点的状态信息
    ◼ 获取各个sentinel的状态(是否在线)
    ◼ 获取master的状态
    master属性: runid, role:master
    各个slave的详细信息
  • 获取所有slave的状态(根据master中的slave信息)
    ◼ slave属性
    阶段一:监控阶段

阶段二:通知阶段

  • 在这个阶段中,sentinel不断的向master发送hello信息,确定master是否存活
    通知阶段

阶段三:故障转移阶段

  • 1.这个阶段比较复杂,首先当master宕机后,会被一个sentinel发现,此时sentinel会给这个master标记为sdown,称为主观下线,只有一个sentinel确定master宕机;
  • 当这个sentinel发现这个情况后,会将master宕机的消息传递给其他的sentinel,其他的sentinel此时也会发送hello信息来确定master是否还在正常工作,如果超过一半的sentinel确定master宕机(这个数据可以配置,但是一半配置为服务器的半数+1),
    配置投票
    此时就标记为odown,master被确认为客观下线
    主客观下线
  • 在确认master宕机之后,sentinel会马上在所有的sentinel中进行投票,选出一个主要的sentinel去挑选一个slave转换为master.
    选择sentinel
  • sentinel根据一些规则对所有的slave进行挑选,选出新的master,执行slaveof no one,其他的slave指向新的master.
    选择规则:
    1.不在线的
    2.响应慢的
    3.与原master断开时间久的
    4.优先原则: 优先级(可以配置)
    offset(偏移量)
    runid
    sentinel发送指令:
    1.向新的master发送slaveof no one
    2.向其他slave发送slaveof新masretIP端口
    选择master

猜你喜欢

转载自blog.csdn.net/qq_34518487/article/details/108874078