Redis(八)哨兵模式原理浅析

一、什么是哨兵模式

哨兵模式:监控整体工作过程,并根据监控的服务情况,进行主从切换(基于主从模式的基础上)

工作原理:哨兵在经历主从切换过程中经历了三个阶段

  • 监控(同步信息)
  • 通知(保持联通)
  • 故障转移(1、发现问题;2、竞选负责人;3、优选新master;4、新master上任,其他slave切换新master,原master作为slave故障回复后连接)

二、监控阶段(阶段一)

用于同步各个节点的状态信息

1、获取各个sentinel的状态(是否在线)

2、获取master的状态

(1)master属性

  • runid
  • role:master

(2)各个slave的详细信息

3、获取所有slave的状态(根据master中的slave信息)

slave属性

  • runid
  • role:master
  • master_host、master_port
  • offset
  • ....

Redis(八)哨兵模式原理浅析_第1张图片

 Redis(八)哨兵模式原理浅析_第2张图片

sentinel会向master、slave以及其他sentinel获取状态

sentinel之间会 组件“对应频道”,大家一起发布信息、订阅信息、收集信息、同步信息等

三、通知阶段(阶段二)

维护长期信息对等阶段

sentinel群体会进行信息互通

sentinel会通过建立的命令链接(cmd链接)获取(master、slave)对应的工作状态,不管是哪个sentinel获取到,都会把信息回传,并且同步给其他sentinel

Redis(八)哨兵模式原理浅析_第3张图片

三、故障转移阶段(阶段三)【重点】

1、sentinel1 向master发送一个指令,尝试多次没有响应,那么会将自己信息里的master标记一个状态主观下线(SRI_S_DOWN)认为下线了,并将信息传播到 sentinel 内网中。

2、其他 sentinel 收到消息后,也会去尝试向master发送指令,如果没有收到响应那么,会同上面做相同的操作

3、单个sentinel 认为下线是 主观下线(SRI_S_DOWN) 但是当 超过半数的 sentinel 都认为下线了,那么就会认为是 客观下线(SRI_O_DOWN)

Redis(八)哨兵模式原理浅析_第4张图片

4、一旦标记为客观下线 那么进入下一阶段,选择处置的人选进行清理队伍

  1. 多个sentinel 同时发送处理指令(需要处理的IP、端口);
  2. 开始竞选真正由谁来处理(为了保障自己能够得到处理权,则将自己的竞选次数带上)
  3. 进行投票选举:每个sentinel 作为参选者同时也是投票者,都拥有一票(当多个sentinel 同时将消息发送到内网中时,sentinel 认为先接到谁广播发送的内网消息,则自己把这一票投给谁,如果多个消息同时到达一个sentinel,那么该sentinel会根据先后顺序,将票投给先到达的一方
  4. 按照这种机制,所有的信息沟通完毕后会得到一个结果,票数最多的当选(如果存在相同票数的,那么就会再来一轮竞选,没经历一轮竞选次数会+1

Redis(八)哨兵模式原理浅析_第5张图片

Redis(八)哨兵模式原理浅析_第6张图片

 5、投票选举出处置的 sentinel 后,该sentinel 在备选的slave中选择一个做为新的master

选取规则

  • 选取在线的
  • 选取响应快的(sentinel 会一直和 slave 做请求,需要从中优先选取响应快的,剔除慢的
  • 与原先的master断开时间(剔除和master断开时间长的slave;例如:有三个据上次连接时间间隔分别是4秒,6秒,8秒,则将8秒的剔除,需要知道哪个slave和master保持的关系比比较近,关系近的留下来
  • 优先原则【优先级、offset、runid】

Redis(八)哨兵模式原理浅析_第7张图片

6、sentinel 发送指令

  • 告诉选定好的 slave 你将是新的 master ;发送slave of no one(与旧master断开
  • 向其他slave发送 slave of 新 master IP 端口(告诉所有 slave 别连就的master了,去连这个新的

你可能感兴趣的:(分布式,微服务系列,redis,缓存,数据库)