redis集群原理及三种模式解析
1:主从模式
使用sync或者psync进行通信
初次同步:
->从服务器接收slaveof
->像主服务器发送sync或psync命令
->主服务器执行BGSAVE生成RDB文件,并使用缓冲区记录现在开始所有执行命令
->主服务器发送rdb到从服务器
->从服务器开始复制,同步完成后
->主服务器把缓冲区记录的新命令发送给从服务器,知道从服务器执行并保持一致
sync全部同步,psync可以从断开的地方同步,2.8版本以后支持
psync如何实现部分重同步:
主从都会复制一个偏移量,主发送了5就N+5,从接收了5就n+5,当n一致就是数据一致,有偏差,差值就是字节数,字节数如果小于主服务器的(复制积压缓冲区大小)就直接发送缓冲区的部分数据,反之已然要全部复制
复制积压缓冲区:
主服务器维护的先进先出的字节队列,默认1Mb.每个字节都有自己的偏移量。当重连,主收到从的偏移量后,如果偏移量在缓冲区之中,只要发送后面的数据就行。
记录主服务器ID:
主服务器都有一个自己的ID,当从重连主,判断是不是一个id,是就判断是不是需要全量复制。不是那就换了主机器,直接全量。
2:哨兵模式
gossip通信
主从不高可用,需要人工切换主
sentinel和redis都是集群,保证高可用,监视redis集群
1:sentinel每隔10s给主发送信号,获取集群中主从的信息,然后对从同样建立连接。
2:sentinel会每秒发送信息给主,是否返回PONG,判断主是否下线。如果sentinel(A)没有收到主的回复,则A认为主,主观下线。当主管下线》N/2,则为客观下线。N最小为3,2个认为就可以。
3:选举leader sentinel 来下线主,通过raft一致性算法选举
大致思路:每个sentinel发现后都要和其他申请自己成为leader,其它可以同意或者拒绝,超过一半的就是主。不同意就一直过一段时间重试。如果收到请求的节点没有选过其他人,则会同意将A设置成主库
4:选举新的主服务器:
选择健康的-》优先级高的-》选择偏移量最大的-》leader sentinel发送命令给主和从,替换为新的组合。
3:redis cluser
哨兵实现了高可用,但是主依然只有一台。redis 3.0采用去中心化的方式进行了完善
一个redis集群有多个节点,每个节点都有自己和其他的信息,以及新加入的节点信息。
整个数据库有16384个插槽,通过cluster addslots 2 3 4 分配个机器指定的插槽。
通过crc16取模计算key所在的插槽和节点,再取数据
执行流程:
1:客户端请求随机发到任意的节点
2:计算键值所在的插槽
3:判断是否是当前节点,是直接执行命令,否返回客户端moved错误,会带着正确的节点地址与端口
4:客户端直接转向正式的
高可用:
每个节点都有主从,主节点负责槽,从节点负责复制某个主节点的数据,并在主节点下线时代替主
例如a节点下可能有b,c,d的数据都可以进行备份和替换。
故障转移:
Y与哨兵模式相同:
会定期向其它节点发消息,然后就是主观下线,客观下线
通过raft算法选举出新的leader成为主节点(当前节点下)
新的主节点把之前的主的槽分配给自己。
广播出去自己成为新的主,开始接收和处理自己负责的节点
总结:
本文主要介绍了Redis三种集群模式,总结一下
- 主从模式 可以实现读写分离,数据备份。但是并不是「高可用」的
- 哨兵模式 可以看做是主从模式的「高可用」版本,其引入了Sentinel对整个Redis服务集群进行监控。但是由于只有一个主节点,因此仍然有写入瓶颈。
- Cluster模式 不仅提供了高可用的手段,同时数据是分片保存在各个节点中的,可以支持高并发的写入与读取。当然实现也是其中最复杂的。
4.Redis分片是什么?
即使使用哨兵模式,redis集群的每个节点都有全部数据,所以存在木桶效应,总数剧存储取决于最小的数据。
每个分片其实就是上面第三种架构所说的一个小的节点集群,里面有一个主多个从,然后有所属的卡槽。
增加节点:
通过meet命令。
新加节点要么成为某一个分片的从节点,要么成为主节点并分配卡槽
分配未分配的卡槽,直接分配
分配已分配的卡槽
无数据直接通过命令操作即可
有数据,就需要对数据进行迁移,因为迁移卡槽不会把数据一同迁移过去。
先迁移卡槽,然后通过migrate命令进行卡槽数据迁移
数据量太大怎么办?
进行迁移时,假设要把0号插槽从A迁移到B,此时redis-trib.rb会依次执行如下操作:
(1)在B执行cluster setslot 0 importing A。
(2)在A执行cluster setslot 0 migrating B。
(3)执行cluster getkeysinslot 0 获取0号插槽的键列表。
(4)对第3步获取的每个键执行migrate命令,将其从A迁移到B。
(5)执行cluster setslot 0 node B来完成迁移。
(1)(2)的功能就是,客户端-》键值是否在本节点-》在执行(不在返回信息-》客户端-》新节点获取)
卡槽发现:
-c可以自动处理,优化应该计算每个redis的key在哪个卡槽,并缓存记录直接请求对应的卡槽。
故障修复:
集群中的每个节点每隔1秒就会随机选择5个节点,然后选择其中最久没有响应的节点发送ping命令参考文档:初学乍练redis:分片与集群_wzy0623的专栏-CSDN博客_redis分片和集群区别
redis集群原理及三种模式解析相关推荐
- Redis集群部署的三种模式
一.Redis简介 Redis 是一款完全开源免费.遵守BSD协议的高性能(NOSQL)的key-value数据库.它使用ANSI C语言编写,支持网络.可基于内存亦可持久化的日志型.Key-Valu ...
- Redis集群搭建的三种方式
一.Redis主从 1.1 Redis主从原理 和MySQL需要主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生性能瓶颈,特别是在读压力上,为了分担压力,Redis支持主从复制. ...
- Redis集群部署的三种方式
Redis集群的部署方式: 1.主从复制:2.Sentinel哨兵机制:3.cluster集群. 第一种集群方式,部署简单,分为一主一从,或一主N从.数据分布是在所有节点通过replication复制 ...
- redis 集群搭建的三种方式
文章目录 一.Redis主从 二.Redis哨兵 三.Redis集群 一.Redis主从 二.Redis哨兵 三.Redis集群 下载redis wget http://download.redis. ...
- redis集群版配置三种方式
redis的三种集群方式 redis有三种集群方式:主从复制,哨兵模式和集群. 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC命名后,开始执行BGSAV ...
- 分布式一致性协议 Gossip 和 Redis 集群原理解析
分布式一致性协议 Gossip 和 Redis 集群原理解析 Redis 是一个开源的.高性能的 Key-Value 数据库.基于 Redis 的分布式缓存已经有很多成功的商业应用,其中就包括阿里 A ...
- Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群
Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群 前言 建议 官方译文 什么是 Sentinel? Sentinel 优点 Redis 配置文件 maste ...
- java集群解析文件_干货:一文详解Redis集群原理核心内容
集群原理 一个系统建立集群主要需要解决两个问题:数据同步问题和集群容错问题. Naive方案 一个简单粗暴的方案是部署多台一模一样的Redis服务,再用负载均衡来分摊压力以及监控服务状态.这种方案的优 ...
- Redis 集群原理,再也不怕面试被问倒
图片来自 Pexels 本文主要围绕如下几个方面介绍集群: 集群简介 集群作用 配置集群 手动.自动故障转移 故障转移原理 本文实现环境: CentOS 7.3 Redis 4.0 Redis 工作目 ...
- 手把手搭建redis集群-三台虚拟机(三主三从)
Redis集群环境搭建: Redis 集群简介: Redis 是一个开源的 key-value 分布式存储系统,由于其出众的性能,大部分互联网企业将其用来作为服务端分布式缓存使用.Redis 在 3. ...
最新文章
- 基于wsimport生成代码的客户端
- python是结构化语言_NLP是如何工作的:把自然语言(尽可能)结构化
- MySQL-查询结果缓存
- ZOJ - 3777 Problem Arrangement(状压dp)
- 秒,在解答这个C语言题目上,我们都败了
- 虚拟服务器配置推荐,如何选择虚拟主机配置
- iTOP-i.MX6Q开发板支持安卓Android6.0系统
- c语言综合性程序设计,《C语言程序设计》综合性实验报告撰写格式
- python 格林威治时间转换为标准时间格式
- DataCastle[职位预测竞赛]冠军——我们都爱苍老师
- SQL语言基础及数据定义功能
- 京东android面试题2019,2019京东的面试题(牛客)
- 汽车厂商 API数据接口
- 《奇葩说》撞题郭敬明,面对“死亡”,AI竟然赚足眼泪和流量?
- 获取秒懂百科视频地址/获取百度百科视频地址
- gpt4和gpt3.5对比有什么提升?
- pcb只开窗不镀锡_阻焊开窗加强散热这种做法是伪科学还是真科学
- 项目记录一:用Python识别图片中指定颜色标记块并绘制其最小矩形框以及坐标点
- 解决win10识别不了绿联USB2.0转串口DB9打印线的问题
- 著名cad软件cad2022直装版
热门文章
- 软件开发文档的编写---软件研制任务书 (2015-03-14 17:55:03)转载▼ 标签: 软件 文档 任务书 需求 要求	分类: 软件过程改进 一. 简介 客户要
- 噪音通道模型_噪声信道模型(NoiseChannelModel)
- Ubuntu的HBase2.2.2安装
- Excel做的慢?学会这些Excel技巧和26个快捷键,让你效率翻十倍!
- 使用微信模板消息时,使发送的文本消息换行展示
- php进销存源码系统开发
- 完成端口学习笔记(一):完成端口+控制台 实现文件拷贝
- steam社区、好友列表无法打开问题通解
- oracle -varchar ,varchar2
- win7企业版激活秘钥激活kms安装激活教程