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. sublime 支持 vue 语法

    具体步骤如下: 1.如果你没安装Package Control,请先安装,安装方法请自行百度.安装OK后,接下来步骤请参考第2步即可. 2.如果你已经安装过Package Control,安装vue高 ...

  2. 网页中插入javascript的几种方法

    网页中插入javascript的方法常见的有两种: 一.直接使用html标记 JavaScript 可以出现在 html的任意地方.使用标记<script>…</script> ...

  3. 网络最大流算法—Dinic算法及优化

    前置知识 网络最大流入门 前言 Dinic在信息学奥赛中是一种最常用的求网络最大流的算法. 它凭借着思路直观,代码难度小,性能优越等优势,深受广大oier青睐 思想 $Dinic$算法属于增广路算法. ...

  4. AIX查看HBA卡的WWN号

    1,获得AIX主机连接的光纤设备:        # lsdev -Cc adapter -S a | grep fcs         fcs0      Available 09-08 FC Ad ...

  5. VMware Vsphere 6.0安装部署 vCenter Server安装

    几个不同的组件 vCenter Server:对ESXi主机进行集中管理的服务器端软件,安装在windows server 2008R2或以上的操作系统里,通过SQL 2008R2 或以上版本的数据库 ...

  6. Python-Flask项目开发--为什么需要搭建虚拟环境?

    在使用python开发过程中,需要使用到某些工具包/框架等,需要联网下载.   例如,联网安装Flask框架flask-0.10.1版本:pip install flask==0.10.1   此时, ...

  7. WPF转换器

    1. 前文 在普遍的也业务系统中, 数据要驱动到操作的用户界面, 它实际储存的方式和表达方式会多种多样, 数据库存储的数字 0或1, 在界面用户看到显示只是 成功或失败, 或者存储的字符.或更多的格式 ...

  8. 关于Blocking IO,non-Blokcing IO,async IO的区别和理解

    来源:http://shmilyaw-hotmail-com.iteye.com/blog/1896683 概括来说,一个IO操作可以分为两个部分:发出请求.结果完成.如果从发出请求到结果返回,一直B ...

  9. Oracle与MySQL的转化差异

    1.nvl函数.        Oracle 中 : nvl (join_count , 0)        MySQL中:if(join_count is null,'0',join_count)  ...

  10. AC自己主动机模板

    AC自己主动机模板-- /* * AC自己主动机模板 * 用法: * 1.init() : 初始化函数 * 2.insert(str) : 插入字符串函数 * 3.build() : 构建ac自己主动 ...