返回 导航

大数据

hangge.com

Redis - 高可用模式详解(主从模式、哨兵模式、集群模式)

作者:hangge | 2024-12-05 08:37

1,概述

(1)在生产环境下,通常不会采用单机架构的方式部署 Redis。因为单点部署一旦宕机,就不可用了。为了实现高可用,通常的做法是,将数据库复制多个副本以部署在不同的服务器上,及时其中一台服务器宕机,也有备用的节点继续提供服务。
(2)Redis 的架构模式演变过程如下:

2,主从模式

(1)主从模式中,Redis 部署了多台机器:有主节点,负责读写操作;有从节点,只负责读操作。

(2)从节点的数据来自主节点,实现原理就是主从复制机制。主从复制包括全量复制,增量复制两种:
  • 一般当 slave 第一次启动连接 master,或者认为是第一次连接,就采用全量复制。
  • slavemaster 全量同步之后,master 上的数据,如果再次发生更新,就会触发增量复制。

(3)主从复制架构可以实现读写分离,提高服务器的负载能力,解决了单机模式的性能问题。但是没有解决单点故障问题,一旦主节点由于故障不能提供服务,从节点无法自动切换为主节点,此时 Redis 只能读数据,不能写数据。需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址。

3,哨兵(Sentinel)模式

(1)哨兵架构模式是 Redis2.8 开始正式提供, 它在主从复制架构的基础上增加了 Sentinel(哨兵)。Sentinel 可以监控主从复制架构中所有节点的状态,当发现主节点宕机后,会选择一个从节点升级为主节点,实现自动切换,保证主从架构的稳定性和可用性。

(2)哨兵模式主要提供了以下功能:
  • 监控Sentinel 实时监控主节点和从节点的运行状态。
  • 提醒:当被监控的某个节点出现问题时,Sentinel 可以向系统管理员发送通知,也可以通过 API 向其他程序发送通知。
  • 自动故障转移:当主节点不能正常工作时,Sentinel 可以将一个从节点升级为主节点,并对其他从节点进行配置,让它们使用新的主节点。

(4)为了保证哨兵服务自身的可靠性,哨兵服务可以启动多个。具体的故障切换的过程如下:

(5)哨兵模式虽然解决了单点故障的问题,但是还存在一个问题:对于这种架构,无论使用多少台机器,Redis 的最终存储能力都受制于单台机器的内存。

4,集群模式

(1)由于哨兵模式最终存储能力都受制于单台机器的内存,无法实现实现海量数据存储能力。Redis3.0 版本开始提供了集群架构模式,实现了 Redis 的分布式存储。通过对数据进行分片,也就是说每台 Redis 节点上存储不同的内容,来解决在线扩容的问题。并且,它也提供复制和故障转移的功能。

(2)集群模式原理:
  • 以上图为例,集群中有 3 个主节点,此时 Redis 集群的存储能力就是这 3 个主节点内存的总和。
  • 每个主节点都有 1 个或 N 个复制品。如果主节点下线了,则集群会把这个主节点的一个从节点设置为新的主节点,继续工作。
注意:如果集群中某一个主节点和它所有的从节点都下线了,则此时集群就不完整了,会停止工作。

(3)集群模式使用 Hash Slot 插槽算法实现分布式存储:
  • 一个 Redis 集群中包含 16384Hash Slot(哈希槽),集群中的每个节点负责维护管理一部分哈希槽。
  • 集群中的数据会存储在这些哈希槽中,通过公式“CRC16(key)÷16384”来计算数据应该属于哪个哈希槽。
  • Redis 集群是一个无中心节点的分布式存储架构,所以客户端在操作集群时,可以连接到集群的任意一个节点去操作。在使用时不用在意数据到底存储在哪个节点的哈希槽中,这个是由 Redis 底层去处理的。

(4)Redis 集群是一个无中心的分布式存储架构,可以实现多个节点之间的数据共享,解决了 Redis 高可用、可扩展等问题。
提示:我们在操作集群的时候,可以连接到集群的任意一个节点去操作,都是可以的。在使用的时候不用管数据到底存储在哪个节点上面,这个是 redis 底层去处理的,我们只需要连接到任意一台机器去操作即可。
评论

全部评论(0)

回到顶部