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月前
|
canal NoSQL 关系型数据库
Redis应用—7.大Value处理方案
本文介绍了一种用于监控Redis大key的方案设计及其实现步骤。主要内容包括:方案设计、安装与配置环境、binlog数据消费者。
343 29
Redis应用—7.大Value处理方案
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
3月前
|
监控 NoSQL 关系型数据库
保障Redis与MySQL数据一致性的强化方案
在设计时,需要充分考虑到业务场景和系统复杂度,避免为了追求一致性而过度牺牲系统性能。保持简洁但有效的策略往往比采取过于复杂的方案更加实际。同时,各种方案都需要在实际业务场景中经过慎重评估和充分测试才可以投入生产环境。
234 0
|
6月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
514 3
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
8月前
|
存储 监控 NoSQL
Redis集群有哪些方案
1. 主从复制集群 : 读写分离, 一主多从 , 解决高并发读的问题 2. 哨兵集群 : 主从集群的结构之上 , 加入了哨兵用于监控集群状态 , 主节点出现故障, 执行主从切换 , 解决高可用问题 3. Cluster分片集群 : 多主多从 , 解决高并发写的问题, 以及海量数据存储问题 , 每个主节点存储一部分集群数据
|
8月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
171 0
|
10月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
299 1
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
202 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比