当前位置: 首页 > news >正文

Azure Redis Cache (5) Redis Cache Cluster集群模式

  《Windows Azure Platform 系列文章目录》

  

  Redis Cluster 3.0之后的版本,已经支持Redis Cluster集群模式,Redis Cluster采用无中心架构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下

  

 

  架构特点:

  1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽

  2.节点的fail是通过集群中超过半数的节点检测失效时才生效

  3.客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

  4.redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value

  5.Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中

 

  Redis Cluster集群节点分配:

  假设我们的Redis Cluster有三个节点,分别是A,B和C,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

  节点A覆盖:0-5460

  节点B覆盖:5461-10922

  节点C覆盖:10923-16383

 

  插入数据:

  如果插入一个值,按照Redis Cache Cluster的哈希槽的算法: CRC16('key')%16384 = 6782。 就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据   

 

  新增一个主节点:

  新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:

  节点A覆盖:1365-5460

  节点B覆盖:6827-10922

  节点C覆盖:12288-16383

  节点D覆盖:0-1364,5461-6826,10923-12287

  同样删除一个节点也是类似,移动完成后就可以删除这个节点了

 

  所以我们在设置Redis Cache集群的Scale Out,需要小心处理,因为数据会产生移动,消耗大量的IO

 

相关文章:

  • 白盒测试
  • SQL Server 2008 部分改变
  • Python将被加入高考科目
  • [转]使用WinINet和WinHTTP
  • Microsoft Ribbon for WPF 正式发布
  • 【原创】简单的局域网内无线文件传输(1)
  • 给初学者:JavaScript 中数组操作注意点
  • 阿里研究院崔瀚文:“单身经济”背后的“新家园”
  • 在Hyper-V下Linux不能使用鼠标
  • 005——VUE中的v-text与v-html的使用
  • 控制反转IOC与依赖注入DI
  • 开源免费接口管理平台 eoLinker V3.1.7发布+开源版部署指南一份
  • Android ListView A~Z快速索引(改进版)
  • AFNetworking 源码阅读
  • 利用JQuery制作自定义Alert Box
  • Codepen 每日精选(2018-3-25)
  • css选择器
  • ERLANG 网工修炼笔记 ---- UDP
  • Java Agent 学习笔记
  • Javascript设计模式学习之Observer(观察者)模式
  • JavaScript实现分页效果
  • Lucene解析 - 基本概念
  • MQ框架的比较
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • python大佬养成计划----difflib模块
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 分布式任务队列Celery
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 我与Jetbrains的这些年
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • !$boo在php中什么意思,php前戏
  • (3)(3.5) 遥测无线电区域条例
  • (Python第六天)文件处理
  • (安卓)跳转应用市场APP详情页的方式
  • (补)B+树一些思想
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)http-server应用
  • (转载)Linux网络编程入门
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .htaccess 强制https 单独排除某个目录
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 提取注释生成API文档 帮助文档
  • .net反混淆脱壳工具de4dot的使用
  • .NET企业级应用架构设计系列之结尾篇
  • [ linux ] linux 命令英文全称及解释
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [04] Android逐帧动画(一)
  • [17]JAVAEE-HTTP协议