Redis集群方案汇总:概念性介绍

简介: 本文介绍了Redis的三种高可用和分布式解决方案:**Redis Replication(主从复制)**、**Redis Sentinel(哨兵模式)** 和 **Redis Cluster(集群模式)**。Redis Replication实现数据备份和读写分离,适合数据安全和负载均衡场景;Redis Sentinel提供自动故障转移和监控功能,适用于读写分离架构;Redis Cluster通过分布式存储和自动故障转移,解决单点性能瓶颈,适合大规模数据和高并发场景。文中还详细描述了各方案的工作原理、优缺点及适用场景。

添加图片注释,不超过 140 字(可选)


一、Redis replication


添加图片注释,不超过 140 字(可选)


Redis replication是一种主从复制方案,它可以让从节点成为主节点的精确副本,从而实现数据的备份和读写分离。 Redis replication支持异步复制和同步复制,前者性能更高,后者数据一致性更强。Redis replication适合用于数据安全和读取负载均衡的场景,但是它也不能解决单点容量和性能的问题,同样因为所有的写操作都只能在一个主节点上执行。Redis replication本身是不支持自动切换的。Redis Replication 在故障转移时需要手动或借助其他自动化工具进行切换。

At the base of Redis replication (excluding the high availability features provided as an additional layer by Redis Cluster or Redis Sentinel) there is a leader follower (master-replica) replication that is simple to use and configure. It allows replica Redis instances to be exact copies of master instances. The replica will automatically reconnect to the master every time the link breaks, and will attempt to be an exact copy of it regardless of what happens to the master.

可以看到官方对replication的描述主要在它的主从复制能力上,高可用能力是需要类似Redis Cluster or Redis Sentinel这种附加层来提供。


二、Redis Sentinel(首选)


添加图片注释,不超过 140 字(可选)


Redis Sentinel是一种高可用性方案,它可以监控Redis主从复制的状态,当主节点故障时,自动从从节点中选举一个新的主节点,并通知客户端新的主节点地址。Redis Sentinel适合用于读写分离的场景,但是它不能解决单点容量和性能的问题,因为所有的写操作都只能在一个主节点上执行。

功能列表:

  • 监控。Sentinel 不断检查您的主实例和副本实例是否按预期工作。
  • 通知。Sentinel 可以通过 API 通知系统管理员或其他计算机程序,受监控的 Redis 实例之一出现问题。
  • 自动故障转移。如果主服务器未按预期工作,Sentinel 可以启动故障转移过程,其中副本将提升为主服务器,其他附加副本将重新配置为使用新的主服务器,并通知使用 Redis 服务器的应用程序要使用的新地址连接时。
  • 配置提供者。Sentinel 充当客户端服务发现的权威来源:客户端连接到 Sentinel 以询问负责给定服务的当前 Redis 主节点的地址。如果发生故障转移,Sentinels 将报告新地址。

三、Redis Cluster(机器多的选)


添加图片注释,不超过 140 字(可选)


Redis Cluster是一种分布式方案,它可以将数据分片存储在多个Redis节点上,每个节点都有自己的主从复制,从而实现数据的分布、复制和高可用性。Redis Cluster支持自动故障转移和重新分片,当某个节点故障时,它的从节点会接替它的角色,并重新分配数据。Redis Cluster适合用于大规模数据和高并发的场景,它可以解决单点容量和性能的问题,因为写操作可以在多个主节点上并行执行。在Redis Cluster中,为了确保高可用性和分布式数据存储,至少需要三个Redis节点。这是因为Redis Cluster使用分布式一致性算法,称为哈希槽分区(hash slot partitioning),将数据划分为16384个槽。

Redis Cluster的主要组成部分和工作原理:

  • Redis Cluster由多个主节点和从节点组成,每个节点负责处理一部分的槽位(slot),槽位的总数为16384个。
  • 每个主节点至少有一个从节点,从节点会复制主节点的数据,当主节点发生故障时,从节点会自动接替主节点的角色和槽位。
  • 客户端通过CRC16算法计算出key对应的槽位,然后根据槽位找到对应的节点进行读写操作。
  • 节点之间通过集群总线(cluster bus)进行通信,集群总线使用二进制协议传输消息,消息包括心跳、故障检测、配置更新、故障转移等。
  • Redis Cluster支持自动故障转移和重新分片,当某个节点故障时,它的从节点会接替它的角色,并重新分配数据。

调用Redis Cluster的方式:

以下是客户端Jedis调用Redis Cluster的方式:

Set<HostAndPort> jedisClusterNodes = new HashSet<>(); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7001)); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7002)); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7003)); // Add all other nodes... JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes);

哈希槽分区:

Redis Cluster 采用虚拟哈希槽分区,将所有的键根据哈希函数映射到 0 ~ 16383 整数槽内,计算公式:

slot = CRC16(key) & 16383

每一个节点负责维护一部分槽以及槽所映射的键值数据。

Redis Cluster 分槽的特点:

  • 解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
  • 节点自身维护槽的映射关系,不需要客户端或代理服务维护数据分片关系。
  • Redis Cluster 的节点之间会共享消息,每个节点都知道另外节点负责管理的槽范围。 每个节点只能对自己负责的槽进行维护和读写操作。

Redis Cluster 分槽的流程:

  1. 集群初始化时,会将 16384 个槽均匀分配给集群中的所有节点。
  2. 当有新的节点加入集群时,会从其他节点中重新分配槽。
  3. 当有节点退出集群时,会将该节点负责的槽分配给其他节点。
目录
相关文章
|
8月前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
409 2
|
4月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
3月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
60 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
7月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
77 0
|
3月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
48 3
|
8月前
|
负载均衡 监控 NoSQL
Redis的几种主要集群方案
【5月更文挑战第15天】Redis集群方案包括主从复制(基础,读写分离,手动故障恢复)、哨兵模式(自动高可用,自动故障转移)和Redis Cluster(官方分布式解决方案,自动分片、容错和扩展)。此外,还有Codis、Redisson和Twemproxy等工具用于代理分片和负载均衡。选择方案需考虑应用场景、数据量和并发需求,权衡可用性、性能和扩展性。
325 2
|
3月前
|
缓存 分布式计算 NoSQL
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
88 2
|
3月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
219 0
|
3月前
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
70 0
|
7月前
|
NoSQL 算法 Java
技术好文:Redis实现分布式锁的7种方案
技术好文:Redis实现分布式锁的7种方案