1、主从模式
Redis 支持主从模式的集群搭建,这是 Redis 提供的最简单的集群模式搭建方案,目的是解决单点服务器宕机的问题。当单点服务器发生故障的时候保证 Redis 正常运行。
主从模式主要是将集群中的 Redis 节点分为主节点和从节点。然后读和写发生在主节点上面,从节点只能读,主节点修改的数据将同步到从节点。
当主节点发生故障的时候,需要手动的将一个从节点升级为主节点,即可保证 Redis 的正常运行
优点:
- 主从模式搭建简单
缺点: - 由于从节点升级需要人工介入,所以如果介入不及时会导致数据不一致的问题。
2、哨兵机制
哨兵模式相较于主从模式,就是新增了哨兵节点去监控 Redis 节点的运行状态。主从模式是 master 节点负责写请求,然后异步同步给 slave 节点,从节点负责处理读请求。如果 master 宕机了,需要手动将从节点晋升为主节点,并且还要切换客户端的连接数据源。这就无法达到高可用,而通过哨兵模式就可以解决这一问题。
哨兵模式是 Redis 的高可用方式,哨兵节点是特殊的 redis 服务,不提供读写服务,主要用来监控 redis 实例节点。哨兵架构下 client 端第一次从哨兵找出 redis 的主节点,后续就直接访问 redis 的主节点,不会每次都通过 sentinel 代理访问 redis 的主节点,当 redis 的主节点挂掉时,哨兵会第一时间感知到。
哨兵节点定期向所有主节点和从节点发送 PING 命令,如果在指定的时间内未收到 PONG 响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。
并且在 slave 节点中重新选出来一个新的 master,然后将新的 master 信息通知给 client 端,从而实现高可用。这里面 redis 的 client 端一般都实现了订阅功能,订阅 sentinel 发布的节点变动消息。
哨兵的任务可以总结为以下几点:
- 监控 Redis 节点的状态
- 主动容灾处理:当主节点发生故障之后,通过算法选举出新的主节点。
- 转移客户端来连接源:当主节点不可用时,客户端链接主节点失败后,哨兵会将新的主节点地址发送给客户端,转移为新的连接源。
3、Cluster 模式
Cluster 模式将 Redis 集群划分为多个分片,每个分片都是一个主从的结构,也就是每个分片都有主节点和从节点。
Cluster 将数据分片到每个节点上,每个分片都承担一部分的数据。针对于分片,主节点只负责读和写,从节点只负责读操作,从节点的数据是依靠主节点同步过来,也就是和主从模式一样。
Redis Cluster 能够自动检测节点的故障。当一个节点失去连接或不可达时,Redis Cluster 会尝试将该节点标记为不可用,并从可用的从节点中提升一个新的主节点。
Redis Cluster 是适用于大规模应用的解决方案,它提供了更好的横向扩展和容错能力。它自动管理数据分片和故障转移,减心少了运维的负担。
Cluster 模式的特点是数据分片存储在不同的节点上,每个节点都可以单独对外提供读写服务。不存在单点故障的问题。