Redis分布式方案一般有两种
(1)客户端分区,优点是分区逻辑可控,缺点是需要客户端处理数据路由、高可用、故障转移等。
(2)代理方案,优点是简化客户端逻辑和升级,缺点是加重架构复杂性和性能损耗。
Redis Cluster是官方提供的分布式解决方案,从3.0版本正式推出,和以上两种方案都不太一样,采用了虚拟槽分区,分区方式采用了hash分区,它并没有使用一致性hash(增减节点会导致部分数据无法命中,当使用少量节点时节点变化会导致影响数据映射),而是使用改进的一致性hash-虚拟槽方式分区。
Redis Cluster使用了 16384 个虚拟槽,槽被分配给节点管理。
节点通信使用Gossip协议,常用的消息有ping,pong,meet,fail。每个节点都会保存集群的完整拓扑信息和槽信息(这就避免了单点)。所以向任何一个节点发送请求,若数据在当前节点则命中,若不在则返回 MOVED IP PORT 消息,指明数据所在的节点信息,客户端只需要重新发送即可。即 crc16(key)->slot_num->节点 或者 crc16(key)->slot_num->节点返回MOVED信息,客户端可以 redirect到目标节点,疑问: 如果目标节点正在扩容或者摘除,如何处理???见下面分析。
Redis Cluster缺点:
1. 批量操作有问题,mget,mset命令只能支持具有相同slot值的key(所有可以使用 hash_tag 来把key映射到相同slot)
2. key事务支持有限,不能跨节点,也不能把大的对象映射到不同节点
3. 复制结构只支持一层,不支持树形结构,即从节点只有一层
集群扩容与节点摘除
集群扩容
(1)准备新节点
(2)加入集群(只需要向一个节点发送meet命令,Gossip协议就会传播至所有节点)
(3)迁移槽和数据
3.1 准备槽迁移计划,即要迁移哪个槽,默认的集群会尽量平均分配槽至各节点
3.2 向目标节点发送命令,目标节点做准备
3.3 向源节点发命令,源节点做准备
3.4 源节点循环获取要迁移的槽里面的key
3.5 源节点批量(pipeline)迁移数据至目标节点(期间是保证高可用(ASK机制保证),如何保证下面讲)
3.6 向集群所有的主节点发送命令,说明槽已经迁移至新节点
集群收缩
(1)当下线的节点不负责槽或者下线的节点是从节点,只需要通知其他节点,通知成功后下线节点即可
(2)如果当前节点有负责的槽,则和机器扩容步骤(3)一样,将本节点负责的槽迁移出去
集群请求路由
为了提升效率,Jedis本地会额外缓存一份slot到node的映射数据,所以一般情况下获取到的node是对的,若槽和节点映射有变化,会有MOVED信息,客户端会去节点获取slot到node最新信息更新本地。
MOVED路由
1. crc16(key)->slot槽,若节点是当前节点,则处理,若节点不是当前节点,则返回 MOVED 信息
2. 客户端向MOVED指向的节点重发请求
ASK重定向
1. crc16(key)->slot槽最终进入目标节点,若槽在迁移且对象不在,则返回ASK信息
2. 客户端向ASK信息的节点发送请求
所以即便在槽迁移过程中,集群仍然能保证高可用。
相关推荐
**RedisCluster集群与Spring访问Redis详解** Redis是一个高性能的键值数据库,广泛应用于缓存、消息中间件等场景。在大型分布式系统中,为了提供高可用性和数据冗余,我们通常会采用Redis Cluster来构建集群。本文...
这种方式使得数据自动分布在集群的不同节点上,实现数据的水平扩展。 三、主从复制 在Redis Cluster中,每个主节点都有零个或多个从节点,主节点负责处理写操作,从节点负责读操作,实现读写分离。当主节点发生故障...
Redis Cluster是Redis的分布式解决方案,它允许用户在多个节点间分散数据,以实现高可用性和水平扩展。在Java中操作Redis Cluster,我们需要了解以下几个关键知识点: 1. **Redis Cluster架构**: Redis Cluster...
Redis Cluster 是Redis提供的分布式解决方案,它可以将数据分散存储在多个节点上,实现数据的自动分片,提供高可用性和水平扩展性。然而,对于想要在JFinal项目中利用Redis Cluster特性的开发者来说,这需要额外的...
php操作Redis Cluster集群的实例教程涵盖了多个知识点,包括Redis Cluster集群的基本概念、PHP与Redis交互的不同方法以及如何使用Predis库与Redis Cluster集群进行通信。以下是详细介绍: 1. Redis Cluster概述: ...
Redis Cluster是一种分布式数据存储解决方案,它通过将数据分割成多个槽(slots)并分布到多个节点来实现水平扩展。每个节点都包含部分槽,当写操作发生时,数据会根据槽的映射分配到相应的节点。Cluster可以处理...
* 高扩展性:Redis 集群可以水平扩展,以应对高并发和大规模数据存储。 * 高性能:Redis 集群可以提供高性能,提高数据读写速度。 六、结语 使用 Docker 实现 Redis 集群搭建可以提供高可用性、高扩展性和高性能的...
当数据量或访问量增加时,可以通过添加新节点并重新分配槽来水平扩展Redis Cluster。这种方法可以在线进行,不会影响到现有服务。 10. **最佳实践** 遵循一些最佳实践,如避免使用需要跨节点操作的数据结构(如...
Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,从而实现高可用性和水平扩展。本文将详细介绍Redis Cluster的工作原理、配置、使用以及与MySQL数据库的配合。 **一、Redis ...
Redis Cluster是Redis官方提供的分布式解决方案,通过数据分片(Sharding)实现水平扩展。在Redis Cluster中,数据被分割成多个槽(Slots),每个节点负责一部分槽的存储。当客户端进行操作时,根据哈希算法确定数据...
Redis集群通过数据分片(Sharding)技术,将数据分散存储在多个节点上,每个节点只负责一部分数据,从而实现数据的水平扩展。每个节点都是独立的Redis实例,可以处理读写请求。集群中的节点之间通过Gossip协议进行...
Redis Cluster是Redis官方提供的分布式解决方案,它通过分片(Sharding)的方式实现了数据在多个节点间的自动分布,从而实现高可用性和水平扩展性。在Redis Cluster中,数据被分割成多个槽(Slots),每个节点负责一...
Redis Cluster通过将数据分割成多个槽(slots)并分布在多个节点之间来实现数据的分布式存储,每个节点负责一部分槽,从而达到水平扩展的目的。 **Spring与Redis的整合** Spring框架提供了一套完善的集成Redis的...
通过这种方式,可以有效地提高系统的水平扩展能力,并确保即使某个节点出现故障,服务仍然能够正常运行。 #### 二、安装部署准备 ##### 2.1 安装环境与依赖 根据给定文件,我们首先需要准备以下安装包: - `redis...
本文将深入探讨 Redis 集群的水平扩展过程。 首先,Redis 集群的基本架构包括多个主节点(Master)和对应的从节点(Slave)。主节点负责处理写操作,从节点则负责备份主节点的数据并处理读请求。数据在集群中的分布...
实验结果表明,在高并发访问数(例如10000以上)的场景下,RedisCluster的响应时间明显优于Codis系统,验证了RedisCluster分布式缓存系统在处理高并发访问时的高效率和优越性能。 关键词“分布式缓存”指的是分布式...
总的来说,Redis Cluster是实现大规模Redis部署的关键,它提供了高可用性和水平扩展性。通过本实战栗子的学习,你不仅可以了解其工作原理,还能掌握实际操作技巧,从而在实际工作中有效地应用Redis Cluster。
Redis 5.0引入了官方的集群解决方案——Redis Cluster,它允许用户在多个节点之间分布数据,以实现高可用性和水平扩展。Redis Cluster无需中心化的协调节点,而是通过节点间的互相通信来管理集群状态。每个节点都...