Redis 3.0.0 RC1版本号10.9号公布,Release Note
这个版本号支持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 Cluster(Redis 3.X)设计要点的更多相关文章

  1. Redis Cluster(Redis集群)的搭建和使用

    Reids集群准备知识: (1)Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据 ...

  2. Redis Cluster

    使用 Redis Cluster Redis 3.0 在2015年出了Stable版本,3.0版本相对于2.8版本带来的主要新特性包括: 实现了Redis Cluster,从而做到了对集群的支持: 引 ...

  3. 全面剖析Redis Cluster原理和应用 (转)

    1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生 ...

  4. 全面剖析Redis Cluster原理和应用

    全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...

  5. Redis Cluster集群知识学习总结

    Redis集群解决方案有两个: 1)  Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...

  6. 全面剖析Redis Cluster原理和应用 (good)

    redis redis cluster注意的问题 : 1.‘cluster-require-full-coverage’参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基 ...

  7. redis cluster集群中键的分布算法

    Redis Cluster Redis Cluster是Redis的作者 Antirez 提供的 Redis 集群方案 —— 官方多机部署方案,每组Redis Cluster是由多个Redis实例组成 ...

  8. Redis Cluster 数据分片

    介绍 Redis Cluster Redis 集群是 Redis 提供的分布式数据库方案, 集群通过分片(sharding) 来进行数据共享, 并提供复制和故障转移功能. 节点 一个 Redis 集群 ...

  9. Redis Cluster 分区实现原理

    Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:如何将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀:如何保证客户端 ...

  10. redis cluster集群部署

    上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...

随机推荐

  1. VS中创建自定义一个VC工程为基础的开发向导的总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 VS允许用户进行自定义开发向导.自定义开发向导的好处在于将常用的设置都通过向导生成,从而大大提供开发效率.特别是在开发 ...

  2. log大全

    http://www.iconfont.cn/search/index?q=%E6%88%91%E7%9A%84&page=3

  3. WHU 1470 Join in tasks 水题

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1470 大概是给你一个队列,每次移动队头的数到队尾并减1,如果本身这个数为1就删去. 然后a ...

  4. HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)

    pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序 ...

  5. SICP 习题 (1.39)解题总结

    SICP 习题1.39沿着习题1.37, 1.38的方向继续前行,要求我们依据德国数学家J.H.Lambert的公式定义tan-cf过程,用于计算正切函数的近似值. J.H.Lambert的公式例如以 ...

  6. 使用wpaint绘图软件时:Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0.

    使用wpaint绘图软件时:Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': Th ...

  7. POJ 1082 Calendar Game

    Adam and Eve enter this year's ACM International Collegiate Programming Contest. Last night, they pl ...

  8. Caused by: java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getServletContext()L

    在做项目的时候,出现Caused by: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletCo ...

  9. 13.Zookeeper的java客户端API使用方法

    转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027

  10. 1.1 Introduction中 Producers官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Producers 生产者(Producers) Producers publish ...