Redis Cluster(Redis 3.X)设计要点
Redis 设计 cluster 要点
2023-09-11 14:21:00 时间
Redis 3.0.0 RC1版本号10.9号公布,Release Note
这个版本号支持Redis Cluster。相信非常多同学期待已久,只是这个版本号仅仅是RC版本号,要应用到生产环境,还得等等
Redis Cluster设计要点:
每一个节点都和其它全部节点连接,这些连接保持活跃
使用gossip协议传播信息以及发现新节点
node不作为client请求的代理,client依据node返回的错误信息重定向请求
每一个Redis物理结点负责一部分桶的管理,当发生Redis节点的增减时,调整桶的分布就可以
比如,如果Redis Cluster三个节点A/B/C,则
Node A 包括桶的编号能够为: 0 到 5500.
Node B 包括桶的编号能够为: 5500 到 11000.
Node C包括桶的编号能够为: 11001 到 16384.
当发生Redis节点的增减时,调整桶的分布就可以。
预分桶的方案介于“硬Hash”和“一致性Hash”之间,牺牲了一定的灵活性。但相比“一致性Hash“,数据的管理成本大大减少
每一个Redis Node能够有一个或者多个Slave。当Master挂掉时,选举一个Slave形成新的Master
一个Redis Node包括一定量的桶,当这些桶相应的Master和Slave都挂掉时,这部分桶相应的数据不可用
一个完整的写操作步骤:
1.client写数据到master
2.master告诉client "ok"
3.master传播更新到slave
存在数据丢失的风险:
1. 上述写步骤1)和2)成功后,master crash,而此时数据还没有传播到slave
2. 因为分区导致同一时候存在两个master,client向旧的master写入了数据。
基于桶的数据分布方式大大减少了迁移成本,仅仅需将数据桶从一个Redis Node迁移到还有一个Redis Node就可以完毕迁移。
1. 不支持多key操作
2. 如果一定要使用多key操作。请确保全部的key都在一个node上。详细方法是使用“hash tag”方案
hash tag方案是一种数据分布的例外情况
Reference:
Redis cluster tutorial
Redis cluster Specification
这个版本号支持Redis Cluster。相信非常多同学期待已久,只是这个版本号仅仅是RC版本号,要应用到生产环境,还得等等
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
相关文章
- redis实战笔记(3)-第3章 Redis命令
- redis安装与使用(windows端)+Redis设置Auth认证保护+redis的管理工具:Redis Desktop Manager
- 网络协议之:redis protocol 详解
- [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
- redis性能监控(一): Redis Info 命令 - 获取 Redis 服务器的各种信息和统计数值
- Redis单线程已经很快了6.0引入多线程
- mongodb和redis设计原理简析
- Redis提供的持久化机制(RDB和AOF)【转载】
- Redis的逐出算法
- Redis开发 - 1. 认识redis
- windows下使用redis,Redis入门使用,Redis基础命令
- Redis_redis分布式锁-SETNX
- 浅析Redis(整合Springboot、订阅发布、集群、雪崩、穿透、击穿)
- Redis学习---Redis操作之List
- Redis持久化策略
- redis(1.21)redis6.0安装
- Redis(1.17)redis客户端管理
- Redis(1.10)Redis哨兵搭建使用
- JAVA接口设计幂等性问题(redis+token解决方案)
- 曹工说Redis源码(8)--面试时,redis 内存淘汰总被问,但是总答不好
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
- Tomcat通过Redis实现session共享的完整部署记录
- 【Redis】- Redis 7.0 Multi Part AOF的设计和实现
- Redis--缓存设计与性能优化