当前位置:网站首页>简述redis集群的实现原理
简述redis集群的实现原理
2022-07-25 16:38:00 【wwzroom】
简述redis集群的实现原理
1.Redis Cluster 工作原理
(多主,每个主节点存的内容不一样,每个主节点都有自己的从节点,与MySQL(每个节点都一样)不一样)
在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素。
为了解决单机性能的瓶颈,提高Redis 性能,可以使用分布式集群的解决方案
1.1早期Redis 分布式集群部署方案:
客户端分区:由客户端程序决定key写分配和写入的redis node,但是需要客户端自己处理写入分配、高可用管理和故障转移等
代理方案:基于三方软件实现redis proxy,客户端先连接之代理层,由代理层实现key的写入分配,对客户端来说是有比较简单,但是对于集群管节点增减相对比较麻烦,而且代理本身也是单点和性能瓶颈。
redis 3.0版本之后推出了无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存当前节点数据和整个集群状态,每个节点都和其他所有节点连接
1.2Redis Cluster特点如下
所有Redis节点使用(PING机制)互联
集群中某个节点的是否失效,是由整个集群中超过半数的节点监测都失效(相当于哨兵),才能算真正的失效
客户端不需要proxy即可直接连接redis,应用程序中需要配置有全部的redis服务器IP,直接和redis服务器沟通。
redis cluster把所有的redis node 平均映射到 0-16383个槽位(slot)上,读写需要到指定的redisnode上进行操作,因此有多少个redis node相当于redis 并发扩展了多少倍,每个redis node 承担16384/N个槽位
Redis cluster预先分配16384个(slot)槽位,当需要在redis集群中写入一个key -value的时候,会使用CRC16(key) mod 16384之后的值,决定将key写入值哪一个槽位从而决定写入哪一个Redis节点上,从而有效解决单机瓶颈。
2.Redis cluster 基本架构
假如三个主节点分别是:A, B, C 三个节点,采用哈希槽 (hash slot)的方式来分配16384个slot 的话它们三个节点分别承担的slot 区间可以是:
节点A覆盖 0-5460
节点B覆盖 5461-10922
节点C覆盖 10923-16383

客户端发请求过来,会把key进行hash(crc16算法)运算,得到的数组对16384进行取模,余数为0-16383之间的数字,三个节点的话,就进行分配,每一个节点分配一点的节点号,然后根据节点号进行存放数据。
3.Redis cluster 主从架构
Redis cluster的架构虽然解决了并发的问题,但是又引入了一个新的问题,每个Redis master的高可用如何解决?那就是对每个master 节点都实现主从复制,从而实现 redis 高可用性

4.总结
redis cluster每台主机都有自己的ip,客户端可以直接和redis进行通讯,不需要代理,每台主机之间互相通讯,判断对方的存活性并,并进行主从自由切换,正常工作下,多台主节点可以对于访客的key -value进行分配记录,(通过槽位分配,实现不同的key -value写入不同的主节点),从而能够实现高并发。
下图为客户端访问redis过程,核心是重定向(不需要代理)。
边栏推荐
- ReBudget:通过运行时重新分配预算的方法,在基于市场的多核资源分配中权衡效率与公平性
- 【图像隐藏】基于混合 DWT-HD-SVD 的数字图像水印方法技术附matlab代码
- 什么是链游系统开发?链游系统开发如何制作
- Promise date
- Verifiable random function VRF
- [MySQL] takes you to the database
- [xiao5 chat] check the official account < the service provided by the official account has failed, please wait a moment>
- Record locks
- 152. 乘积最大子数组
- Google Earth Engine——全球建筑物GlobalMLBuildingFootprints矢量集合下载
猜你喜欢

Mqtt x cli officially released: powerful and easy-to-use mqtt 5.0 command line tool

Cookie、cookie与session区别

谁动了我的内存,揭秘 OOM 崩溃下降 90% 的秘密

使用 Terraform 在 AWS 上快速部署 MQTT 集群

复旦大学EMBA2022毕业季丨毕业不忘初心 荣耀再上征程

伦敦银K线图的各种有用形态

优必选大型仿人服务机器人Walker X的核心技术突破

【故障诊断】基于贝叶斯优化支持向量机的轴承故障诊断附matlab代码

Win11自带画图软件怎么显示标尺?

Paper notes: highly accurate protein structure prediction with alphafold (alphafold 2 & appendix)
随机推荐
Shared lock
7.依赖注入
只有1000元能买什么理财产品赚钱?
[OBS] frame loss and frame priority before transmission
Sum arrays with recursion
80篇国产数据库实操文档汇总(含TiDB、达梦、openGauss等)
Attachment handling of SAP Fiori
Fudan University EMBA peer topic: always put the value of consumers in the most important position
LVGL 7.11 tileview界面循环切换
MySQL linked table query, common functions, aggregate functions
What is chain game system development? How to make chain game system development
Chain game development ready-made version chain game system development detailed principle chain game source code delivery
Rebudget汇报PPT
unity 最好用热更方案卧龙 wolong
自定义mvc项目登录注册和树形菜单
ILSSI认证|六西格玛DMAIC的历程
Understanding service governance in distributed development
Win11自带画图软件怎么显示标尺?
Baidu rich text editor ueeditor image width 100% adaptive, mobile terminal
MySQL pessimistic lock