Redis Cluster设计要点:
架构:无中心
Redis Cluster采用无中心结构,每个节点都保存数据和整个集群的状态
每个节点都和其他所有节点连接,这些连接保持活跃
使用gossip协议传播信息以及发现新节点
node不作为client请求的代理,client根据node返回的错误信息重定向请求
数据分布:预分桶
预分好16384个桶,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中
每个Redis物理结点负责一部分桶的管理,当发生Redis节点的增减时,调整桶的分布即可
例如,假设Redis Cluster三个节点A/B/C,则
Node A 包含桶的编号可以为: 0 到 5500.
Node B 包含桶的编号可以为: 5500 到 11000.
Node C包含桶的编号可以为: 11001 到 16384.
当发生Redis节点的增减时,调整桶的分布即可。
预分桶的方案介于“硬Hash”和“一致性Hash”之间,牺牲了一定的灵活性,但相比“一致性Hash“,数据的管理成本大大降低
可用性:Master-Slave
为了保证服务的可用性,Redis Cluster采取的方案是的Master-Slave
每个Redis Node可以有一个或者多个Slave。当Master挂掉时,选举一个Slave形成新的Master
一个Redis Node包含一定量的桶,当这些桶对应的Master和Slave都挂掉时,这部分桶对应的数据不可用
写
Redis Cluster使用异步复制
一个完整的写操作步骤:
1.client写数据到master
2.master告诉client "ok"
3.master传播更新到slave
存在数据丢失的风险:
1. 上述写步骤1)和2)成功后,master crash,而此时数据还没有传播到slave
2. 由于分区导致同时存在两个master,client向旧的master写入了数据。
当然,由于Redis Cluster存在超时及故障恢复机制,第2个风险基本上不可能发生
数据迁移
Redis Cluster支持在线增/减节点。
基于桶的数据分布方式大大降低了迁移成本,只需将数据桶从一个Redis Node迁移到另一个Redis Node即可完成迁移。
当桶从一个Node A向另一个Node B迁移时,Node A和Node B都会有这个桶,Node A上桶的状态设置为MIGRATING,Node B上桶的状态被设置为IMPORTING
当客户端请求时:
所有在Node A上的请求都将由A来处理,所有不在A上的key都由Node B来处理。同时,Node A上将不会创建新的key
多key操作
当系统从单节点向多节点扩展时,多key的操作总是一个非常难解决的问题,Redis Cluster方案如下:
1. 不支持多key操作
2. 如果一定要使用多key操作,请确保所有的key都在一个node上,具体方法是使用“hash tag”方案
hash tag方案是一种数据分布的例外情况
Reference:
Redis cluster tutorial
Redis cluster Specification
http://blog.csdn.net/yfkiss/article/details/39996129
相关推荐
在本文中,我们将深入探讨Redis Cluster的基本概念、配置要点以及如何配置一个简约版的Redis Cluster。 ### Redis Cluster基本概念 1. **节点(Node)**:Redis Cluster由多个独立运行的Redis实例组成,每个实例都...
本文将详细解析Linux环境下安装与配置Redis 6.2.2版本的过程,以及相关的技术要点。 首先,让我们了解一下Redis的基本概念。Redis是一个基于键值对的数据存储服务,支持多种数据类型,如字符串、哈希、列表、集合和...
Ruby RedisCluster 深度解析 Ruby是一种动态、面向对象的开发语言,以其简洁的语法和强大的元编程能力深受开发者喜爱。...理解并掌握上述要点,将有助于你在实际项目中有效地使用Ruby和RedisCluster。
三、Redis要点解析 1. 主从复制:为了提高可用性和数据安全性,Redis支持主从复制,一个主节点可以有多个从节点。 2. 路由与集群:Redis Cluster提供自动路由和数据分片,支持在多个节点上扩展数据存储。 3. 过期...
<bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration"> <property name="clusterNodes"> <ref bean="clusterRedisNodes3"/> <!-- 其他...
Redis Cluster设计要点 redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点...
以上就是关于【redis-cluster-lib】的相关知识点,包括Redis集群的基本原理、文件列表的功能解析以及集群搭建和管理的要点。通过理解和掌握这些知识,你可以有效地利用Redis集群来提升应用的性能和可靠性。
9. Redis 的 Cluster 机制:Redis 提供了 Cluster 机制,可以实现高可用性和负载均衡。 10. Redis 的安全机制:Redis 提供了多种安全机制,如身份验证、访问控制等。 在面试中,面试官可能会问到以下问题: 1. ...
3. **配置redis.conf**: 修改`redis.conf`文件中的`bind`和`daemonize`参数。`bind`用于指定Redis监听的地址,建议设置为`0.0.0.0`以便于局域网内的访问。`daemonize`设置为`yes`以实现Redis作为后台服务运行。 4....
- **分布式部署**:Redis Cluster提供了一种简单的水平扩展方法,支持自动分区。 #### 二、Redis数据类型详解 1. **字符串**(String) - 最基础的数据类型,可以存储最大值为512MB的数据。 - 常用命令包括`SET`...
- 集群搭建:理解Redis Cluster的分片原理,以及解决槽迁移、故障恢复等问题。 - 缓存策略:掌握缓存穿透、缓存雪崩和缓存击穿的解决方案,如布隆过滤器、预热策略等。 3. Redis高级特性: - Pub/Sub:发布订阅...
redis-server /path/to/redis-638x.conf ``` #### 9. 创建和启动Redis集群 创建Redis集群需要借助`redis-cli`工具,具体步骤如下: 1. 确保所有节点都已启动 2. 使用`redis-cli --cluster create`命令创建集群 ...
5. **Cluster**:Redis Cluster是Redis的分布式解决方案,通过槽分区实现数据分片。 **Redis学习资源** `Redis第二次课板书.txt`可能包含了课程中的讲解要点,包括基本概念、操作演示和实践案例。而`Redis - 02....
Redis Cluster是官方提供的分布式集群解决方案,可自动分片,处理大规模数据。 4. Redis事务与Lua脚本 Redis事务允许一次性执行多个操作,保证原子性。然而,Redis的事务并不像关系型数据库那样支持回滚。Lua脚本...
- Redis Cluster:官方提供的分布式解决方案,实现数据分片和故障转移。 - Sentinel:监控和自动故障恢复系统,保证主从服务的高可用性。 6. Redis与周阳和狂神说 - 周阳和狂神都是知名的Redis技术专家,他们的...
16. Cluster集群:Redis Cluster提供了数据分片和分布式功能,允许在多个节点间自动分布数据,同时保持容错能力。 17. 安全性:Redis默认不启用密码认证,出于安全考虑,应设置requirepass配置,限制未经授权的访问...
- **集群**:Redis Cluster 是 Redis 官方提供的分布式解决方案,支持自动分片和数据复制,能够在多台机器之间进行数据的分布存储。 #### 2. 解决Redis缓存问题的方法 - **缓存雪崩**:通过设置不同的过期时间或者...
本文旨在深入探讨Redis的核心特性、开发流程及实际应用场景,帮助读者全面理解Redis开发的关键要点。 #### Redis核心特性 1. **高性能** - **内存存储**:由于Redis将所有数据存储在内存中,因此能够提供极快的...
3. **Redis集群方案**: - **主从复制**:主节点负责写,从节点负责读,减轻主节点读压力。优点是数据备份和读写分离,但不能自动故障恢复和动态扩容。 - **Sentinel哨兵系统**:监控主从节点,当主节点故障时自动...