集群化的方案

Redis的Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis的数据根据一定的规则分配到多台机器。

Redis集群方案

Redis Cluster 集群模式通常具有:高可用、可扩展性、分布式、容错等特性。Redis分布式方案一般有两种:

客户端分区方案

客户端就已经决定数据会被存储到哪个 redis 节点或者从哪个 redis 节点 读取数据。其主要思想是采用 哈希算法 将 Redis 数据的 key 进行散列,通过 hash 函数,特定的 key会 映射 到特定的 Redis 节点上。

客户端分区方案 的代表为 Redis Sharding,Redis Sharding 是 Redis Cluster 出来之前,业界普遍使用的 Redis 多实例集群方法。Java 的 Redis 客户端驱动库 Jedis,支持 Redis Sharding 功能,即 ShardedJedis 以及 结合缓存池 的 ShardedJedisPool。

优点

不使用第三方中间件,分区逻辑可控,配置简单,节点之间无关联,容易线性扩展,灵活性强。

缺点

客户端 无法 动态增删 服务节点,客户端需要自行维护 分发逻辑,客户端之间无连接共享,会造成连接浪费。

代理分区方案

客户端发送请求到一个代理组件,代理解析客户端的数据,并将请求转发至正确的节点,最后将结果回复给客户端。

  • 优点:简化 客户端 的分布式逻辑,客户端 透明接入,切换成本低,代理的 转发 和 存储 分离。

  • 缺点:多了一层 代理层,加重了 架构部署复杂度 和 性能损耗。

代理分区 主流实现的有方案有 Twemproxy 和 Codis。

Twemproxy

Twemproxy 也叫 nutcraker,是twitter 开源的一个 redis 和 memcache 的 中间代理服务器 程序。Twemproxy 作为 代理,可接受来自多个程序的访问,按照 路由规则,转发给后台的各个 Redis 服务器,再原路返回。Twemproxy 存在 单点故障 问题,需要结合 Lvs 和 Keepalived 做 高可用方案。

  • 优点:应用范围广,稳定性较高,中间代理层 高可用。

  • 缺点:无法平滑地 水平扩容/缩容,无 可视化管理界面,运维不友好,出现故障,不能 自动转移。

Codis

Codis 是一个 分布式 Redis 解决方案,对于上层应用来说,连接 Codis-Proxy 和直接连接 原生的 Redis-Server 没有的区别。Codis 底层会 处理请求的转发,不停机的进行 数据迁移 等工作。Codis 采用了无状态的 代理层,对于 客户端 来说,一切都是透明的。

优点

实现了上层 Proxy 和底层 Redis 的 高可用,数据分片和自动平衡,提供 命令行接口 和 RESTful API,提供 监控 和 管理 界面,可以动态 添加 和 删除 Redis 节点。

缺点

部署架构 和 配置复杂,不支持 跨机房 和 多租户,不支持 鉴权管理。

Cluster集群方案

Cluster模式是Redis3.0开始推出,由多个节点群组成的分布式服务集群,Redis的数据分布在这些节点中。集群不需要Sentinel哨兵也可以完成故障自动迁移。 使用集群时需要将redis配置文件中的cluster-enable配置打开。

采⽤⽆中⼼结构,每个节点保存数据和整个集群状态, 各个节点会互相通信,采⽤gossip协议交换节点元数据信息,每个节点都和其他所有节点连接。一个集群⾄少需要6个节点才可以保证⾼可⽤,即3主3从。

客户端随机地 请求任意一个 Redis 实例,然后由 Redis 将请求 转发 给 正确 的 Redis 节点。Redis Cluster 实现了一种 混合形式 的 查询路由,但并不是 直接 将请求从一个 Redis 节点 转发 到另一个 Redis 节点,而是在 客户端 的帮助下直接 重定向( redirected)到正确的 Redis 节点。

核心原理

redis cluster集群采⽤数据分⽚中的哈希槽来进⾏数据存储与读取的,Cluster会预分好16384个槽,每个节点负责其中的一部分槽位。当需要在 Redis集群中放置⼀个数据时,Cluster默认会根据 CRC16算法CRC16(key) mod 16384 的值,决定将⼀个key放到哪个槽位中。

常见的配置
  • cluster-enabled yes:开启集群模式(cluster)

  • cluster-config-file:该参数指定了集群配置文件的位置,记录集群节点信息。以集群模式启动时,会首先寻找是否有集群配置文件,如果有则使用文件中的配置启动,如果没有,则初始化配置并将配置保存到文件中

  • cluster-node-timeout time:节点连接超时时间

  • cluster-announce-ip ip:集群节点的ip,当前节点的ip

  • cluster-announce-port port:集群节点映射端⼝

优点

无中心节点,数据按照 槽 存储分布在多个 Redis 实例上,可以平滑的进行节点 扩容/缩容,支持 高可用 和 自动故障转移,运维成本低。

缺点

严重依赖 Redis-trib 工具,缺乏监控管理,需要依赖 Smart Client (维护连接,缓存路由表,MultiOp 和 Pipeline 支持)。

  • Failover 节点的 检测过慢,不如 中心节点 ZooKeeper 及时。
  • Gossip 消息具有一定开销。
  • 无法根据统计区分 冷热数据。

【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)相关推荐

  1. 视频回顾丨带你逛腾讯全球数字生态大会「腾讯技术工程」展区

    5月21-23日,为期三天的"腾讯全球数字生态大会"在昆明滇池国际会展中心召开,除了大咖云集的主论坛.干货满满的分论坛,大会展区里也干货满满,各种优秀解决方案.技术应用和黑科技引人 ...

  2. 三星带着Bixby搅局中国市场,还说自己是「一家AI技术公司」

    撰文 | 王艺 「到现在都不支持刷脸解锁的手机,还能叫旗舰机吗?」中国区 Bixby 开发总负责人张代君说,「三星在消费类电子技术厂商和半导体厂商之外,更是一家 AI 技术公司.」 11 月 21 日 ...

  3. 「数字电子技术基础」3.逻辑代数基础

    目录 逻辑代数 逻辑变量与逻辑常量 基本逻辑运算 与 或 非 常用组合逻辑运算 与非: 或非: 与或非: 异或: 同或: 逻辑代数基本定理 1.代入定理 2.反演定理 3.对偶定理 逻辑运算公式 逻辑 ...

  4. 「低代码系列报道」华为云打造行业aPaaS集群,抢占SaaS发展黄金十年

    <中智观察>第1692篇推送 作者:木易 编辑:小宏 编审:杨小天 头图来源:财经头条 低代码.无代码作为可视化编程平台,在新冠疫情大爆发的催化下,正以惊人的速度在全球市场持续增长. 美国 ...

  5. 「专升本信息技术」计算机基础知识单选题集 (12)

    [01]八进制数64转换成十进制数,正确答案是() A.50        B.49        C.52        D.53 [C]对于任何一个二进制数.八进制数.十六进制数,均可以先写出它的 ...

  6. 「专升本信息技术」计算机基础知识单选题集 (13)

    [01]下列不属于物联网应用的是() A.通过手机远程控制家中多个电器的运行        B.电视遥控器遥控电视        C.智能公交系统        D.快递物品的位置查询服务 [B]电视 ...

  7. 「专升本信息技术」计算机基础知识单选题集 (09)

    [01]软件与程序的区别在于() A.程序就是软件,软件就是程序        B.程序是由用户自己编写的,而软件是由厂家提供的        C.程序是用高级语言编写的,而软件用机器语言编写的    ...

  8. 「 非著名技术人 」高永亮,一枚懂业务的技术人员

    小编导读 高哥,是一个热心,大度,有高度有理想有抱负的有为青年. 热心肠,经历也比较丰富,有困难也许高哥能帮到你. 请记住,有事找高哥! 感谢高哥的分享~ 高永亮,Database.Linux.Aix ...

  9. 「 非著名技术人 」倪升武,从破茅草屋出来的学神级人物

    武哥简介 倪升武,现就职于科大讯飞.前华为软件开发工程师,CSDN 博客专家,CSDN 达人课作者.毕业于同济大学,学位硕士.曾先后就职于 eBay.爱奇艺.华为.熟悉 C/C++.Java.Spri ...

最新文章

  1. 网络分布式软件bonic清除
  2. 哪种编程语言又快又省电?有人对比了27种语言
  3. matplotlib可视化基本散点图、在图像多个指定区域绘制方框、进行自定义色彩填充(Draw Multiple Rectangles)
  4. 从设备像素比到移动适配
  5. 获取文件名和路径函数
  6. oracle中extents存在的理由
  7. Eclipse如何调整字体大小
  8. 配置使用EF6.0常见的一些问题及解决方案
  9. ./ffmpeg: error while loading shared libraries: libx264.so.138: cannot open shared object file: No s
  10. Jquery 获取元素内容
  11. rewrite伪静态
  12. 2021-08-31
  13. 程序员修炼之道(通俗版)——第八章
  14. 转载 Android端调用Caffe模型实现CNN分类
  15. xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
  16. hhkb mac设置_HHKB MAC 配置指南 操作指南 快捷键
  17. 罗云彬:实现水波特效的代码例子
  18. xiaopiu简单使用
  19. dz plugin.php,DZ支付积分充值插件 Discuz码支付免签约即时到账插件 Discuz手机支付插件...
  20. Arduino之个人健康助理——简易智能药盒系列2

热门文章

  1. TinEye图片搜索引擎
  2. 先做个“键盘侠”, 再来写程序
  3. Ubuntu 下的nis认证
  4. iphone相册储存空间已满_iphone可用存储空间已满?教你快速回收存储空间
  5. 词根词缀prim/prehend/pri/psych等延伸词汇
  6. 关键词文章自动生成的四大要点
  7. 比DOORS好用的需求管理系统有哪些?对比10大需求管理工具
  8. python解压多层压缩包,兼容tar.gz .tgz .zip .7z .gz
  9. Python是个啥?为啥大家都在学?
  10. JavaScript中如何严格的判断NaN