一、主从模式
主从模式指的是使用一个Redis实例作为主机,其余的实例作为备份机。一般来说主节点负责写请求,从节点负责读请求,主节点异步的同步给从节点。主节点和从节点保存的数据是相同的,但是因为同步,从节点的数据会有一点延迟。但是主从模式的高可用会有问题。因为主节点挂了之后是没有自动选主机制的,需要人工干预来指定一个从节点作为主节点。
主从模式.png
二、哨兵模式
为了解决主从模式不能高可用的问题,哨兵模式就出现了。哨兵模式就是在主从模式的基础上再加一个哨兵集群。每个哨兵都会监控主节点和从节点的状态。如果主节点挂了,就会从从节点中选出一个来作为主节点,以达到高可用的目的。(也就是有了自动选主机制)
哨兵机制.png
哨兵模式工作原理
哨兵集群中的每个节点都会启动三个定时任务
-
第一个定时任务: 每个sentinel节点每隔1s向所有的master、slaver、别的sentinel节点发送一个PING命令。作用:心跳检测。
心跳检测.png
-
第二个定时任务: 每个sentinel每隔2s都会向master的sentinel:hello这个channel中发送自己掌握的集群信息和自己的一些信息(比如host,ip,run id),这个是利用redis的pub/sub功能,每个sentinel节点都会订阅这个channel,也就是说,每个sentinel节点都可以知道别的sentinel节点掌握的集群信息。作用:信息交换,了解别的sentinel的信息和他们对于主节点的判断。
信息交换.png
-
第三个定时任务: 每个sentinel节点每隔10s都会向master和slaver发送INFO命令。作用:发现最新的集群拓扑结构
发现最新的集群拓扑结构.png
如果一个 实例(instance)距离最后一次有效回复 PING命令的时间超过 down-after-milliseconds 所指定的值,那么这个实例会被 Sentinel标记为 主观下线。
如果一个 主服务器 被标记为主观下线,那么正在 监视 这个主服务器的所有 Sentinel 节点,要以 每秒一次的频率确认 该主服务器是否的确进入了主观下线状态。
如果一个主服务器 被标记为主观下线,并且有 足够数量的 Sentinel(至少要达到配置文件指定的数量)在指定的 时间范围 内同意这一判断,那么这个该主服务器被标记为 客观下线。
哨兵模式解决了故障不能自动恢复的问题,但仍存在的问题是:Redis较难支持在线扩容,对于集群,容量达到上限时在线扩容会变得很复杂。
三、Cluster 集群模式
- 自动将数据进行分片,每个master上放一部分数据。
- 提供了内置的高可用支持,部分master不可用的时候,仍能继续工作。
Redis Cluster采用虚拟槽分区,所有的键按照哈希函数映射到0~16383槽中,每个Redis节点维护部分槽和槽中的数据。
image.pngimage.png
网友评论