redis的哨兵工作原理
哨兵简介
哨兵 (sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
哨兵的作用
哨兵在进行主从切换过程中经理三个阶段:
- 监控 ,不断的检查master和slave是否正常运行;master存活检测、 master与slave运行情况检测
- 通知(提醒),当被监控的服务器出现问题时, 向其他(哨兵间,客户端) 发送通知
-
自动故障转移,断开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根据一些规则对所有的slave进行挑选,选出新的master,执行slaveof no one,其他的slave指向新的master.
选择规则:
1.不在线的
2.响应慢的
3.与原master断开时间久的
4.优先原则: 优先级(可以配置)
offset(偏移量)
runid
sentinel发送指令:
1.向新的master发送slaveof no one
2.向其他slave发送slaveof新masretIP端口