论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
Mysql
›
[Redis][主从复制][下]详细讲解
[Redis][主从复制][下]详细讲解
宁睿
论坛元老
|
2024-10-4 00:12:07
|
显示全部楼层
|
阅读模式
楼主
主题
1082
|
帖子
1082
|
积分
3256
1.复制
1.全量复制
什么时候进行全量复制?
首次和主节点进行数据同步
主节点不方便进行部分复制的时候
全量复制流程
:
从节点发送psync下令给主节点进⾏数据同步,由于是第⼀次进⾏复制,从节点没有主节点的运⾏ID和复制偏移量,以是发送psync ? -1
主节点根据下令,解析出要进⾏全量复制,复兴+FULLRESYNC相应
从节点接收主节点的运⾏信息进⾏保存
主节点执⾏bgsave进⾏RDB⽂件的长期化
主节点发送RDB⽂件给从节点,从节点保存RDB数据到当地硬盘
主节点将从⽣成RDB到接收完成期间执⾏的写下令,写⼊缓冲区中,等从节点保存完RDB⽂件后,主节点再将缓冲区内的数据补发给从节点,补发的数据仍然按照RDB的⼆进制格式追加写⼊到收到的rdb⽂件中,保持主从⼀致性
从节点清空⾃⾝原有旧数据
从节点加载RDB⽂件得到与主节点⼀致的数据
如果从节点加载RDB完成之后,而且开启了AOF长期化功能,它会进⾏bgrewrite操纵,得到最近的AOF⽂件
注意
:全量复制是⼀件⾼成本的操纵
主节点bgsave的时间, RDB在⽹络传输的时间,从节点清空旧数据的时间,从节点加载RDB的时间等
以是⼀般应该尽可能克制对已经有⼤量数据集的Redis进⾏全量复制
有磁盘复制 VS 无磁盘复制
默认情况下,进⾏全量复制需要主节点⽣成RDB⽂件到主节点的磁盘中,再把磁盘上的RDB ⽂件通过发送给从节点
Redi 从2.8.18版本开始⽀持⽆磁盘复制,
主节点在执⾏RDB⽣成流程时,不会⽣成RDB⽂件到磁盘中了,⽽是直接把⽣成的RDB数据通过⽹络发送给从节点
,如许就节省了⼀系列的写硬盘和读硬盘的操纵开销
2.1部分复制
部分复制重要是Redis针对全量复制的过⾼开销做出的⼀种优化措施
使⽤psync replicationId offset下令实现
什么时候进行部分复制?
当从节点正在复制主节点时,如果出现⽹络闪断大概下令丢失等非常情况时,从节点会向主节点要求补发丢失的下令数据,如果主节点的复制积压缓冲区存在数据则直接发送给从节点, 如许就可以保持主从节点复制的⼀致性
补发的这部分数据⼀般远远⼩于全量数据,以是开销很⼩
部分复制流程
:
当主从节点之间出现⽹络克制时,如果超过repl-timeout时间,主节点会以为从节点故障并克制复制连接
主从连接克制期间主节点依然相应下令,但这些复制下令都因⽹络克制⽆法及时发送给从节点,以是暂时将这些下令滞留在复制积压缓冲区中
当主从节点⽹络规复后,从节点再次连上主节点
从节点将之前保存的replicationId和复制偏移量作为psync的参数发送给主节点,哀求进⾏部分复制
主节点接到psync哀求后,进⾏须要的验证,随后根据offset去复制积压缓冲区查找合适的数据, 并相应+CONTINUE给从节点
主节点将需要从节点同步的数据发送给从节点,终极完成⼀致性
2.2复制积压缓冲区
复制积压缓冲区是
保存在主节点上的⼀个固定⻓度的队列
,默认⼤⼩为1MB
会记录最近一段时间修改的数据
总量有限,随着时间的推移,就会把之前的旧的数据逐渐删掉
当主节点有连接的从节点(slave)时被创建,这时主节点(master)相应写下令时,不但会把下令发送给从节点,还会写⼊复制积压缓冲区
由于
缓冲区本质上是先进先出的定⻓队列
,以是能实现保存最近已复制数据的功能,⽤于部分复制和复制下令丢失的数据补救
复制缓冲区相关统计信息可以通过主节点的info replication中
127.0.0.1:6379> info replication
# Replication
role:master
...
repl_backlog_active:1 // 开启复制缓冲区
repl_backlog_size:1048576 // 缓冲区最⼤⻓度
repl_backlog_first_byte_offset:7479 // 起始偏移量,计算当前缓冲区可⽤范围
repl_backlog_histlen:1048576 // 已保存数据的有效⻓度
复制代码
根据统计指标,
可算出复制积压缓冲区内的可⽤偏移量范围
:[repl_backlog_first_byte_offset, repl_backlog_first_byte_offset + repl_backlog_histlen]
如果当前从节点需要的数据,已经超出了主节点的积压缓冲区的范围,则⽆法进⾏部分复制,只能全量复制了
3.及时复制
主从节点在建⽴复制连接后,主节点会把⾃⼰收到的修改操纵,通过TCP⻓连接的⽅式,源源不断的传输给从节点,从节点就会根据这些哀求来同时修改⾃⾝的数据,从⽽保持和主节点数据的⼀致性
如许的⻓连接,需要通过
⼼跳包
的⽅式来维护连接状态
(这⾥的⼼跳是指应⽤层⾃⼰实现的⼼跳,⽽不是TCP⾃带的⼼跳)
主从节点相互都有⼼跳检测机制,各⾃模拟成对⽅的客⼾端进⾏通信
主节点默认每隔10秒对从节点发送ping下令,判定从节点的存活性和连接状态
从节点默认每隔1秒向主节点发送replconf ack {offset}下令,给主节点上报⾃⾝当前的复制偏移量
如果主节点发现从节点通信延迟超过repl-timeout配置的值(默认60秒),则判定从节点下线,断开复制客⼾端连接
从节点规复连接后,⼼跳机制继承进⾏
2.总结
单点问题
:
单个Redis节点,可用性不高
单个Redis节点,性能有限
主从复制的特点
:
Redis通过复制功能实现主节点的多个副本
主节点⽤来写,从节点⽤来读,如许做可以低落主节点的访问压⼒
复制⽀持多种拓扑结构,可以在适当的场景选择合适的拓扑结构
复制分为全量复制,部分复制和及时复制
主从节点之间通过⼼跳机制包管主从节点通信正常和数据⼀致性
主从复制配置的过程
:
主节点配置不需要改动
从节点在配置⽂件中加⼊slaveof 主节点ip 主节点端口的情势即可
主从复制的缺点
:
从机多了,复制数据的延时⾮常显着
主机挂了,从机不会升级成主机,只能通过⼈⼯⼲预的⽅式规复
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
宁睿
论坛元老
这个人很懒什么都没写!
楼主热帖
java前置学习
【RocketMQ】消息的存储
iOS Widget
简单的用Python对手机号进行加密 ...
【PostgreSQL】PostgreSQL重建与主库不 ...
k8s v-1.20版本部署详细过程[实测可用 ...
基于单片机的压力测控仿真设计(#0024) ...
❤️肝下25万字的《决战Linux到精通》 ...
Unity 将是驱动 C# 增长的引擎吗 ? ...
【iOS面试总结】疫情隔离中,线上面试 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
SQL-Server
DevOps与敏捷开发
Java
Postrge-SQL技术社区
linux
MES
IOS
快速回复
返回顶部
返回列表