第一种: 哨兵模式
第二种: 集群
哨兵,顾名思义,放哨的,监控一些动态 Redis中的哨兵模式也是监控,不过哨兵是一个进程,运行在系统中,通过发送指令监控主从节点是否正常运作,当然除了键控之外,还可以只从自动切换等功能
哨兵模式内部是依赖三个定时任务, 主观下线,客观下线 和sentinel Reft选举的
第一个定时任务
问题描述: 因为我们并没有在哨兵配置文件中配置从节点的信息,哨兵会把从节点切换成主节点,那么哨兵是如何知道从节点的信息的?
定时任务: 每隔10秒,每个Sentinel节点会向主节点发送info命令,用于获取最新的主从结构一级从节点信息
第二个定时任务
每隔两秒,每个sentinel都会向一个固定的频道(sentinel:hello) 上发送自己对主节点的判断以及自身的信息
其他的sentinel节点都会订阅这个频道,了解其他的sentinel节点对主节点的判断
第三个定时任务
每隔一秒,每个sentinel都会向主从节点和其他sentinel节点发送心跳(ping命令)用于彼此监测是否可用
主观下线 看图
客观下线 同上
Raft算法
问题说明: 当宕机的主节点被客观下线之后,从节点会变成主节点,那么是谁让从节点变成主节点的呢? 此时有多个 sentinel到底谁说了算 此时sentinel会选举出一个领导者Leader
选举流程: 当sentinel-A 对主节点主观下线之后,会向其他sentinel节点发送sentinel is-master-down-by-addr 命令,要求将自己设置为领导者
每个节点在每个选举轮次中只有一次投票权,接收到这个指令之后,节点将会给sentinel-A投票 同意这个,sentinel-A 成为领导者
如果sentinel-A的票数最高 则sentinel-A将会成为领导者 做故障转移