Redis Cluster(Redis 3.X)设计要点

转载 2015年11月19日 14:21:21
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方案是一种数据分布的例外情况

Redis Cluster(Redis 3.X)设计要点

Redis 3.0.0 RC1版本10.9号发布,Release Note这个版本支持Redis Cluster,相信很多同学期待已久,不过这个版本只是RC版本,要应用到生产环境,还得等等Redis ...
  • yfkiss
  • yfkiss
  • 2014年10月13日 18:57
  • 24573

Redis Essentials 读书笔记 - 第九章: Redis Cluster and Redis Sentinel (Collective Intelligence)

Chapter 9. Redis Cluster and Redis Sentinel (Collective Intelligence)上一章介绍了复制,一个master可以对应一个或多个slave...
  • stevensxiao
  • stevensxiao
  • 2016年05月09日 14:12
  • 1963

唯品会大规模 Redis Cluster 的生产实践

分享大纲 本次分享内容如下: 1、生产应用场景 2、存储架构演变 3、应用最佳实践 4、运维经验总结 关于这4部分的内容介绍: 第1、2部分:介绍redis cluster在唯品会的...
  • yubinpll9110
  • yubinpll9110
  • 2016年06月07日 14:58
  • 1237

redis sentinel & cluster 原理分析

1. Redis集群实现分析 1.1  sentinel 1.   功能 Sentinel实现如下功能: (1)monitoring——redis实例是否正常运行。 (2)notification...
  • bubayimao
  • bubayimao
  • 2015年09月29日 11:10
  • 3014

Redis 学习笔记(十四)Redis Cluster介绍与搭建

Redis Cluster 介绍与搭建1. Redis Cluster介绍Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需...
  • men_wen
  • men_wen
  • 2017年06月03日 16:58
  • 3694

Redis 高级: Redis 集群cluster

Redis 是一个基于内存的Nosql 数据库,常用于做缓存。 通常在生产环境中,不建议使用单点Redis ,因为这样会有单点风险; 通常会为Redis搭建集群,最常见的莫过于使用redis-Sent...
  • zgf19930504
  • zgf19930504
  • 2016年07月25日 16:14
  • 1271

redis cluster--简介

redis3.0是redis cluster版本。
  • whycold
  • whycold
  • 2015年01月10日 20:53
  • 2422

Redis Cluster架构优化

Redis Cluster架构优化在《全面剖析Redis Cluster原理和应用》中,我们已经详细剖析了现阶段Redis Cluster的缺点: 无中心化架构 Gossip消息的开销 不停机升级困...
  • dc_726
  • dc_726
  • 2015年09月25日 15:01
  • 18417

redis cluster 集群架构

关于redis cluster 集群 redis cluster集群是分布式的。 1.1 redis 集群数据分片(redis cluster data sharding)-哈希槽的概念 有M个...
  • naixiyi
  • naixiyi
  • 2016年05月06日 22:09
  • 5231

Codis VS redis-cluster简单比较

Codis Redis-cluster 备注 Redis版本 2.8.13分支开发 >= 3.0   部署 ...
  • lcuzzc
  • lcuzzc
  • 2015年11月30日 18:08
  • 3619
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis Cluster(Redis 3.X)设计要点
举报原因:
原因补充:

(最多只允许输入30个字)