15 reids哨兵机制

redis主机默认是10s发送一次心跳给从节点。
从节点默认1s去发送心跳给主节点。

1、原理

当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

从节点的主要两个作用:

  1. 主节点的数据备份。
  2. 实现读写分离
2、部署架构

为了防止哨兵宕机,因此哨兵也是需要多台部署,不少于3台.
15 reids哨兵机制_第1张图片
哨兵本身也是一台redis节点,只是充当监控的角色,不参与业务操作,不存储数据

3、哨兵实现原理

按照上图的部署架构,哨兵依赖于3个定时任务去实现监控和故障转移。
15 reids哨兵机制_第2张图片
定时任务作用一

1.sentinel节点向主从节点发送一次info命令.就可以得到主从的拓扑结构。
//例如有新的从节点加入,执行slaveof命令后,哨兵会再下一次info命令后感知到新的拓扑结构。
2.同理,主机或者某一个从节点宕机,那么哨兵再次执行info命令的时候,会感知到新的哨兵结构,做出对应的操作.

定时任务作用二
每隔2s的一次publish/subscribe

1. 哨兵1,23会向redis中的数据节点发送发布订阅命令。
2. 目的是为了感知新加入的哨兵节点,以及在哨兵之间交互主节点的状态。

定时任务作用三
每隔1s发送一次ping

1.例如,哨兵3每隔1s向哨兵1,2,主节点,从节点发送一次ping心跳。
//首先是判断各个节点是否存活

由此可以看出,哨兵还是挺忙的,忙着故障的恢复和转移
哨兵与主从的通讯
15 reids哨兵机制_第3张图片

4、主管下载,客观下线,领导者选举

15 reids哨兵机制_第4张图片
达到客观下线的条件后,开启领导者哨兵选举
15 reids哨兵机制_第5张图片
谁先发现下线,谁就是哨兵的领导者

5、故障转移

15 reids哨兵机制_第6张图片

1. 哨兵从从节点列表中,选择一台从节点。
2. 过滤掉不监控的从节点,一般是5s内没有回复pong的。
3. 如果两个从节点都是健康的,则选择那个优先级高的。优先级是可以配置的
4. 如果以上不满足,则选择复制最完整的节点来充当主节点。
5. 如果还不满足,则选择runid最小的节点。runid最小表示是最早启动的节点。

15 reids哨兵机制_第7张图片
哨兵完成主从切换后,对于Java客户端来说,是无感知的,客户端如何操作呢?不可能去修改配置文件的。
通过JedisSentinelPool实现在客户端的主从切换

你可能感兴趣的:(redis,redis)