Bootstrap

Redis哨兵模式结构和作用

1.结构与作用

如图:哨兵(Sentinel)主要作用有三个

1.监控:哨兵会不断检查master和slave是否工作正常

2.自动故障恢复:如果master故障,哨兵会将一个slave提升为master

3.通知:如果发生故障转移(更换master),会将最新信息推送给Redis客户端

2.监控原理

        哨兵基于心跳机制监控mastert与slave,每隔1秒发送ping命令,如果在一定时间内,master没有回应,就会被认为主观下线。如果超过一定数量的哨兵都认为这个master主观下线,则该实例客观下线 。这个一定数量最高超过哨兵的一半

3.集群故障恢复

一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:

  • 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点

  • 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举

  • 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高

  • 最后是判断slave节点的运行id大小,越小优先级越高。

当选出一个新的master后,该如何实现切换呢?

流程如下:

  • sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master

  • sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。

  • 最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点

;