首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis主从复制原理总结

Redis主从复制原理总结

作者头像
HUC思梦
发布于 2020-09-03 09:33:42
发布于 2020-09-03 09:33:42
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。

全量同步 Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: - 从服务器连接主服务器,发送SYNC命令; - 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; - 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; - 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; - 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; - 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。

增量同步 Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。 Redis主从同步策略 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。 注意点 如果多个Slave断线了,需要重启的时候,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。

主从同步中需要注意几个问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1)在上面的全量同步过程中,master会将数据保存在rdb文件中然后发送给slave服务器,但是如果master上的磁盘空间有效怎么办呢?那么此时全部同步对于master来说
将是一份十分有压力的操作了。此时可以通过无盘复制来达到目的,由master直接开启一个socket将rdb文件发送给slave服务器。(无盘复制一般应用在磁盘空间有限但是网
络状态良好的情况下)
 
2)主从复制结构,一般slave服务器不能进行写操作,但是这不是死的,之所以这样是为了更容易的保证主和各个从之间数据的一致性,如果slave服务器上数据进行了修改,
那么要保证所有主从服务器都能一致,可能在结构上和处理逻辑上更为负责。不过你也可以通过配置文件让从服务器支持写操作。(不过所带来的影响还得自己承担哦。。。)
 
3)主从服务器之间会定期进行通话,但是如果master上设置了密码,那么如果不给slave设置密码就会导致slave不能跟master进行任何操作,所以如果你的master服务器
上有密码,那么也给slave相应的设置一下密码吧(通过设置配置文件中的masterauth);
 
4)关于slave服务器上过期键的处理,由master服务器负责键的过期删除处理,然后将相关删除命令已数据同步的方式同步给slave服务器,slave服务器根据删除命令删除
本地的key。

当主服务器不进行持久化时复制的安全性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在进行主从复制设置时,强烈建议在主服务器上开启持久化,当不能这么做时,比如考虑到延迟的问题,应该将实例配置为避免自动重启。
 
为什么不持久化的主服务器自动重启非常危险呢?
为了更好的理解这个问题,看下面这个失败的例子,其中主服务器和从服务器中数据库都被删除了。
 
设置节点A为主服务器,关闭持久化,节点BC从节点A复制数据。
这时出现了一个崩溃,但Redis具有自动重启系统,重启了进程,因为关闭了持久化,节点重启后只有一个空的数据集。
节点BC从节点A进行复制,现在节点A是空的,所以节点BC上的复制数据也会被删除。
当在高可用系统中使用Redis Sentinel,关闭了主服务器的持久化,并且允许自动重启,这种情况是很危险的。
比如主服务器可能在很短的时间就完成了重启,以至于Sentinel都无法检测到这次失败,那么上面说的这种失败的情况就发生了。
 
如果数据比较重要,并且在使用主从复制时关闭了主服务器持久化功能的场景中,都应该禁止实例自动重启。

无磁盘复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
通常来讲,一个完全重新同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据。
 
如果使用比较低速的磁盘,这种操作会给主服务器带来较大的压力。Redis从2.8.18版本开始尝试支持无磁盘的复制。
使用这种设置时,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储。

配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
主从复制的配置十分简单:把下面这行加入到从服务器的配置文件中即可。
slaveof 192.168.1.1 6379
 
当然你需要把其中的192.168.1.1 6379替换为你自己的主服务器IP(或者主机名hostname)和端口。另外你可以调用SLAVEOF命令,
主服务器就会开始与从服务器同步。
 
关于部分重新同步,还有一些针对复制内存缓冲区的优化参数。查看Redis介质中的Redis.conf示例获得更多信息。
 
使用repl-diskless-sync配置参数来启动无磁盘复制。使用repl-diskless-sync-delay 参数来配置传输开始的延迟时间,以便等待
更多的从服务器连接上来。查看Redis介质中的Redis.conf示例获得更多信息。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
node.js 安装与 npm 加速
本文记录 node.js 安装过程。 Linux 安装 官网链接:https://nodejs.org/zh-cn/ 方法1 下载代码包: 下载后解压,将文件夹/bin目录添加到系统路径即可使用npm命令管理node.js包 方法2 下载二进制文件包 命令行可以: wget https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz 下载后解压并移动至系统目录: # 解压缩 tar -xf node-v16.14.2-lin
为为为什么
2022/08/06
2.8K0
node.js 安装与 npm 加速
Typora+PicGo+Gitee或github实现markdown自带图床效果
这里可以选择gitee,gitee由于众所周知的原因有时候会很慢,无奈选择gitee
星哥玩云
2022/05/28
6280
Typora+PicGo+Gitee或github实现markdown自带图床效果
你要是还学不会,请提刀来见 Typora+PicGo+Gitee + node.js 打造个人高效稳定优雅图床
经过前面两弹的介绍,相信大家对图床都不陌生了吧,但是小魔童觉得这样做法还是不方便,使用 github的仓库来存放图片,如果不能上外网的话是不能展示图片的,自己可以上外网还不行,需要别人上外网才可以看到我文章中的图片,这也太难了。。。
阿兵云原生
2022/09/13
5820
ES | Linux下基于ElasticSearch的head插件安装
wget https://nodejs.org/dist/v10.15.2/node-v10.15.2-linux-x64.tar.xz
码神联盟
2019/07/31
4.9K0
ES | Linux下基于ElasticSearch的head插件安装
hexo博客的安装
10.查看当前目录已安装插件:npm list PS:NPM安装插件过程:从http://registry.npmjs.org 下载对应的插件包(该网站服务器位于国外,所以经常下载缓慢或出现异常),解决办法往下看↓↓↓↓↓↓。 CNPM介绍: 1.说明:因为谷歌安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果谷歌的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事来自官网:“这是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步“。 2.官方网址:http://npm.taobao.org 安装:命令提示符执行npm install cnpm -g 3. --registry=https://registry.npm.taobao.org 4.注意:安装完后最好查看其版本cnpm -v或关闭命令提示符重新打开,安装完直接使用有可能会出现错误 注:CNPM跟NPM用法完全一致,只是在执行命令时将谷歌改为CNPM。
兮动人
2021/06/11
4500
hexo博客的安装
如何免费高效拥有自己的图床呢
私人令牌:https://gitee.com/profile/personal_access_tokens/new
青梅煮码
2023/03/13
8690
如何免费高效拥有自己的图床呢
PicGo:搭建图床
传送门:https://github.com/Molunerfinn/PicGo/releases
张小驰出没
2021/04/15
1.6K0
PicGo:搭建图床
搭建自己的图床
在大佬的指导下,开始学习了一些MarkDown语法、然后用自己的服务器搭建了一个私人博客(后来觉得麻烦就给停掉了,现在写文章主要是在CSDN跟微信公众号),尝试写了几篇文章后,经常会思考的一个问题是“文章中的这些图片咋搞啊?”,因为MarkDown语法中的图片包含一个公网可以访问的URL,我所以我要想办法把我本地的图片转换成公网可以访问的URL。 我最初的想法是用自己的服务器搭一个Nginx做静态资源转发,后来想了想感觉不太妥,因为这样一来当我服务器过期后,我之前上传的图片就丢失了,那么历史文章中的图片也就全部木得了。。。无奈之下去寻求了一下大佬的意见,大佬给我指了一条明路—>搭建图床。
敲得码黛
2021/02/22
8.7K0
搭建自己的图床
windows下安装ElasticSearch的Head插件
转载自https://www.cnblogs.com/hts-technology/p/8477258.html
allsmallpig
2021/02/25
6030
【ES三周年】linux-centos7安装elasticsearch-head插件
①从官网https://nodejs.org/en/download下载 node-v8.11.3-linux-x64.tar.xz
张同学tty
2023/04/03
1.7K0
【ES三周年】linux-centos7安装elasticsearch-head插件
【进阶系列】Node.js专题
http://www.cnblogs.com/shanyou/archive/2012/08/03/2620796.html
江中散人_Jun
2023/10/16
3810
【进阶系列】Node.js专题
Node.js安装教程
这篇摘要介绍了Node.js的安装教程。首先,文中简要概述了Node.js的定义和用途,突出了其在构建高性能网络应用方面的优势。接着,详细说明了在不同操作系统上安装Node.js的步骤,包括在Windows、Mac和Linux系统上的具体操作指南。文中强调了正确选择版本和使用包管理工具的重要性,以确保安装过程的顺利进行。最后,提供了简单的测试步骤,验证Node.js是否成功安装。这篇摘要为初学者提供了清晰而全面的Node.js安装指南。
Damon小智
2024/02/03
1.3K0
Node.js安装教程
【elasticsearch系列】安装elasticsearch-head插件
安装elasticsearch-head插件,需要依赖nodeJs环境,故首先我们先搭建nodeJs环境; 此part先将此篇文章需要的各个官网列出来: node官网:https://nodejs.org/en/download/ node中文网:http://nodejs.cn/download/current/ elasticsearch-head GitHub:https://github.com/mobz/elasticsearch-head
沁溪源
2021/09/09
1.7K0
【elasticsearch系列】安装elasticsearch-head插件
Gitee + PicGo 免费个人图床搭建!
平时我们写博客或者 markdown 时候会用到图片,markdown 文件一旦脱离本地观看,里面的图片便很难维护显示,这时候就需要用到图床,给图片使用网络地址。
微客鸟窝
2021/12/02
1.6K0
Gitee + PicGo 免费个人图床搭建!
【Elasticsearch全文搜索引擎实战】之Head插件实践 简介1. ES 5.0+ 版本Head插件安装2. 配置3. 启动4. 访问5. 安全问题(严重)6. 小结
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github也都采用它做的搜索。 更多Elasticsearch的相关知识,请阅读官网《Elasticsearch: 权威指南》。
mantou
2019/02/13
1.1K0
【Elasticsearch全文搜索引擎实战】之Head插件实践
		简介1. ES 5.0+ 版本Head插件安装2. 配置3. 启动4. 访问5. 安全问题(严重)6. 小结
CentOS 7 安装Node
因为下载来的文件是.xz方式压缩的,不能直接使用linux命令tar解压,我们先使用xz命令解压
游魂
2018/09/18
3.5K2
CentOS 7 安装Node
蛋疼的ElasticSearch(二)之配置ElasticSearch Head插件
Interesting things What did you do today 先入为主 ElasticSearch Head是什么? ElasticSearch Head是集群管理、数据可视化、
用户2032165
2018/06/06
1.8K0
安装npm及cnpm(Windows)
1.前往node.js官网下载并安装工具,这里安装路径选到D盘,D:\Program Files\nodejs
kirin
2020/06/22
3.3K0
安装npm及cnpm(Windows)
一文读懂JSON数据可视化
JSON Crack数据可视化工具 SON Crack 是一个很方便的 JSON 数据可视化工具。 该项目不是简单的展示 JSON 数据,而是将其转化为类似思维导图的形式,支持放大/缩小、展开/收缩、搜索节点、导出图片等操作。对于经常和json格式的数据打交道的人会非常有帮助。 “忘了那烦人的引号、大括号和冒号吧”​
QGS
2023/12/12
6670
[还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
前者适合新手,后者适合老手(方便大家查找,从而过滤掉某些步骤,节约时间成本) 所以大家按需查看哟。
秋意零
2022/04/16
1.2K0
[还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
推荐阅读
相关推荐
node.js 安装与 npm 加速
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验