原文链接:http://blog.csdn.net/xyang81/article/details/51898465

1、无中心化

  • Redis Cluster采用无中心架构,每个节点都保存数据和整个集群的节点状态
  • 每个节点都和集群中的其它节点保持连接
  • 使用gossip协议传播信息以及发现新的节点
  • 节点不作为client请求的代理,client应该根据节点返回的错误信息重定向到目标client

2、数据分布(slot)

redis预设16384个slot(槽),集群中的每个master节点负责分管一部份slot,保存数据时,根据CRC16(key) mod 16384的值,决定将一个key放到哪个槽中,从而定位由哪个redis实例存储。当发生Redis节点增减时,调整桶的分布即可,实现了集群的动态扩容功能。同时也间接的说明redis集群最多只能有16384个节点。
例如:假设Redis集群有三个节点A/B/C,在开始创建的时候,集群中节点槽的分配如下:
Node A 分管slot的编号为:0 ~ 5460
Node B 分管slot的编号为:5461 ~ 10922
Node C 分管slot的编号为:10923 ~ 16383
当添加一个新的master节点D,假设为它分配900个slot,你可以从节点ABC三中各取300个分配给D,也可指定从A或B或C中移出900个slot分配给D,或选其中几个节点中各取一部份凑够900个分配给D即可。同样的,如果要将D节点移除,需要先将D节点分管的slot全部分配到其它master节点后才能移除,否则有无效的slot,集群将无法服务。

3、可用性:Master-Slave

  • 为了保证服务的可用性,Redis Cluster采取的方案是Master-Slave机制
  • 每个Redis Master Node可以有一个或者多个Slave Node。当Master Node挂掉时,会从Slave Node中选一个新的Master
  • 每个Master Node都负责分管一定范围的slot,当这些slot对应的Master和Slave都挂掉时,这部份slot对应的数据将不可用
  • 16384个slot必须被全部分配,否则集群将不可用。通过cluster info查看集群状态可以得知。

4、写

Redis Cluster采用异步复制机制
一个完整的写操作步聚:
1. client写数据到master
2. master回复client “OK”
3. master将数据传播更新到slave

存在数据丢失的风险:
1. 上述步聚1)和2)成功后,如果此时master crash,而数据还没有传播到slave。此时slave选主为master,但那部份数据可能就被丢失了。
2. 由于分区导致同时存在两个master,client向旧的master写入了数据
当然,由于Redis Cluster存在超时及故障恢复机制,第2个风险基本上可以忽略不计

5、数据迁移

Redis Cluster支持在线增、减节点。基于slot的数据分布方式大大降低了迁移成本,只需将数据slot从一个redis node迁移到另一个redis node即可完成迁移工作 。

当slot从一个Node A向另一个Node B迁移时,Node A和Node B都会有这个slot,Node A上slot的状态设置为MIGRATING,Node B上的状态被设置为IMPORTING。此时当客户端请求时,所有key在Node A上的请求都由A来处理,所有不在A上的key都由Node B来处理。同时,Node A上将不会创建新的key。

6、客户端操作的一些缺陷

  • 不支持多数据库,默认只有一个0号db,select 0
  • cluster环境下slave默认不接受任何读写操作,在slave执行readonly命令后,可执行读操作。执行readwrite命令后,可执行读写操作。
  • client端不支持多key操作(mget,mset等),但当keys集合对应的slot相同时支持mget操作。参考:hash_tag

参考文章:

中文:
http://redisdoc.com/topic/cluster-spec.html#cluster-spec
http://redisdoc.com/topic/cluster-tutorial.html

英文:
http://redis.io/topics/cluster-spec
http://redis.io/topics/cluster-tutorial

Redis集群技术架构相关推荐

  1. Redis集群技术及Codis实践

    前言 诚如开篇文章所言,高效运维包括管理的专业化和技术的专业化.前两篇我们主要在说些管理相关的内容,本篇说一下技术专业化.希望读者朋友们能适应这个转换,谢谢. 互联网早在几年前就已进入Web 2.0时 ...

  2. 分布式Redis集群--Cluster架构

    Cluster架构 Redis哨兵与Cluster集群模式对比 1. 哨兵模式 Redis3.0之前一般是通过哨兵工具来监测master节点的状态,若master节点宕机,则哨兵集群会进行主从切换,从 ...

  3. redis 集群 实操 (史上最全、5w字长文)

    文章很长,建议收藏起来慢慢读! 总目录 博客园版 为大家准备了更多的好文章!!!! 推荐:尼恩Java面试宝典(持续更新 + 史上最全 + 面试必备)具体详情,请点击此链接 尼恩Java面试宝典,34 ...

  4. 【15W字长文】主从复制高可用Redis集群,完整包含Redis所有知识点

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [7W字长文]使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx 主从复制高可用Redis集群 分布式架 ...

  5. Redis 集群介绍

    开源键值对存储数据库Redis在4月1日发布了3.0.0版.主要新特性包括:Redis Cluster,Redis子集的分布式实现:新的"嵌套字符串"对象编码减少缓存遗漏,大幅提高 ...

  6. Redis集群搭建(基于6.2.6版本)

    前言 Redis 在我们工作中使用非常广泛,之前在掘金平台上写过一篇Redis集群的搭建,但是是基于4.0.14版本的,使用的是redis-trib.rb进行搭建的,Redis5之后 推荐使用 red ...

  7. LINUX集群技术构建ANSYS分布式高性能计算平台

    (转载请注明出处)随着仿真理论和求解技术越来越成熟,人们对产品虚拟的开发要求越来越高,系统级多体耦合和多物理场耦合计算已经成为计算机仿真的发展方向,用户不在追求单一个体在单一物理场(如结构力学,流体力 ...

  8. 技术分享 | Redis 集群架构解析

    作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作.其他身份:柯基铲屎官. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.集群架构的 ...

  9. Redis集群——利用Gearman在Lnmp架构中做MySQL的缓存服务器

    一.概述 Redis的集群主要是使用切片技术来搭建的,简单来说就是把所有KEY分散存放到不同的redis节点上(不要把鸡蛋都放在一个篮子里). 1. 集群基本原理 Redis集群中内置了16384个槽 ...

最新文章

  1. 【转载】实现软件架构质量属性的战术
  2. MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image
  3. 物联网入门学什么开发板_物联网入门:如何构建DIY Blynk板
  4. Linux环境编译动态库和静态库总结
  5. cmd下特殊字符串的处理
  6. 二维波动方程matlab,二维波动方程matlab
  7. matlab晶闸管整流电路,整流电路MATLAB仿真实验
  8. matlab好看的字体,[转载]最合适写代码的字体
  9. 【web框架】【zheng学习笔记(二)】【外网正式环境下部署(CentOS7.4)】
  10. 教你win7去除快捷方式小箭头方法
  11. GitHub中国区前100名到底是什么样的人?
  12. R语言使用grid包的unit函数将数据对象转化为有计量单位的数据(例如转化为毫米单位、长度单位mm)
  13. Could not initialize proxy - the owning Session was closed
  14. android-ProGuard混淆
  15. 阿爸,通往地狱的路要走好
  16. 个人家用nas_方便易用的家用NAS私家云不超千元
  17. EtherCAT简介
  18. 架构设计---高可用的处理
  19. 网页无插件实时浏览海康和大华硬盘录像机视频技术解决方案
  20. 876. 链表的中间结点 (Python 实现)

热门文章

  1. CF 1716 C. Robot in a Hallway 思维 2000
  2. OS X下修改PC键盘键位
  3. Django:TypeError: __init__() missing 1 required positional argument: 'on_delete'
  4. 滑动门技术实现的导航菜单
  5. windows下文件名长度
  6. 人工智能:传教士与野人过河(BFS-基于对列和链表的实现)c++
  7. sql左连接和右连接区别是什么?
  8. 小学计算机课教学设计加教学反思,小学信息技术《插入表格》教学设计及教学反思...
  9. Spring boot jpa 多表关联查询
  10. 洛谷P4138 [JOISC2014]挂饰 题解