【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)
集群化的方案
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集群机制方案的原理和指南(入门篇)相关推荐
- 视频回顾丨带你逛腾讯全球数字生态大会「腾讯技术工程」展区
5月21-23日,为期三天的"腾讯全球数字生态大会"在昆明滇池国际会展中心召开,除了大咖云集的主论坛.干货满满的分论坛,大会展区里也干货满满,各种优秀解决方案.技术应用和黑科技引人 ...
- 三星带着Bixby搅局中国市场,还说自己是「一家AI技术公司」
撰文 | 王艺 「到现在都不支持刷脸解锁的手机,还能叫旗舰机吗?」中国区 Bixby 开发总负责人张代君说,「三星在消费类电子技术厂商和半导体厂商之外,更是一家 AI 技术公司.」 11 月 21 日 ...
- 「数字电子技术基础」3.逻辑代数基础
目录 逻辑代数 逻辑变量与逻辑常量 基本逻辑运算 与 或 非 常用组合逻辑运算 与非: 或非: 与或非: 异或: 同或: 逻辑代数基本定理 1.代入定理 2.反演定理 3.对偶定理 逻辑运算公式 逻辑 ...
- 「低代码系列报道」华为云打造行业aPaaS集群,抢占SaaS发展黄金十年
<中智观察>第1692篇推送 作者:木易 编辑:小宏 编审:杨小天 头图来源:财经头条 低代码.无代码作为可视化编程平台,在新冠疫情大爆发的催化下,正以惊人的速度在全球市场持续增长. 美国 ...
- 「专升本信息技术」计算机基础知识单选题集 (12)
[01]八进制数64转换成十进制数,正确答案是() A.50 B.49 C.52 D.53 [C]对于任何一个二进制数.八进制数.十六进制数,均可以先写出它的 ...
- 「专升本信息技术」计算机基础知识单选题集 (13)
[01]下列不属于物联网应用的是() A.通过手机远程控制家中多个电器的运行 B.电视遥控器遥控电视 C.智能公交系统 D.快递物品的位置查询服务 [B]电视 ...
- 「专升本信息技术」计算机基础知识单选题集 (09)
[01]软件与程序的区别在于() A.程序就是软件,软件就是程序 B.程序是由用户自己编写的,而软件是由厂家提供的 C.程序是用高级语言编写的,而软件用机器语言编写的 ...
- 「 非著名技术人 」高永亮,一枚懂业务的技术人员
小编导读 高哥,是一个热心,大度,有高度有理想有抱负的有为青年. 热心肠,经历也比较丰富,有困难也许高哥能帮到你. 请记住,有事找高哥! 感谢高哥的分享~ 高永亮,Database.Linux.Aix ...
- 「 非著名技术人 」倪升武,从破茅草屋出来的学神级人物
武哥简介 倪升武,现就职于科大讯飞.前华为软件开发工程师,CSDN 博客专家,CSDN 达人课作者.毕业于同济大学,学位硕士.曾先后就职于 eBay.爱奇艺.华为.熟悉 C/C++.Java.Spri ...
最新文章
- 网络分布式软件bonic清除
- 哪种编程语言又快又省电?有人对比了27种语言
- matplotlib可视化基本散点图、在图像多个指定区域绘制方框、进行自定义色彩填充(Draw Multiple Rectangles)
- 从设备像素比到移动适配
- 获取文件名和路径函数
- oracle中extents存在的理由
- Eclipse如何调整字体大小
- 配置使用EF6.0常见的一些问题及解决方案
- ./ffmpeg: error while loading shared libraries: libx264.so.138: cannot open shared object file: No s
- Jquery 获取元素内容
- rewrite伪静态
- 2021-08-31
- 程序员修炼之道(通俗版)——第八章
- 转载 Android端调用Caffe模型实现CNN分类
- xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
- hhkb mac设置_HHKB MAC 配置指南 操作指南 快捷键
- 罗云彬:实现水波特效的代码例子
- xiaopiu简单使用
- dz plugin.php,DZ支付积分充值插件 Discuz码支付免签约即时到账插件 Discuz手机支付插件...
- Arduino之个人健康助理——简易智能药盒系列2
热门文章
- TinEye图片搜索引擎
- 先做个“键盘侠”, 再来写程序
- Ubuntu 下的nis认证
- iphone相册储存空间已满_iphone可用存储空间已满?教你快速回收存储空间
- 词根词缀prim/prehend/pri/psych等延伸词汇
- 关键词文章自动生成的四大要点
- 比DOORS好用的需求管理系统有哪些?对比10大需求管理工具
- python解压多层压缩包,兼容tar.gz .tgz .zip .7z .gz
- Python是个啥?为啥大家都在学?
- JavaScript中如何严格的判断NaN