redis-replicator使用的一点点心得
目录
技术难点一:
技术难点二:
更多技术交流:https://github.com/singgel
源码地址:https://github.com/leonchen83/redis-replicator
技术难点一:
java伪装的slave从master获取的数据是redis protocol下的二进制数据,分为
1.RDB数据
2.PSYNC增量数据
Jedis单点有socket的预留接口方法sendCommand,问题,JedisCluster没有这个接口
解决:
1.将二进制数据直接用过CRC16获取到slot
2.根据slot对应的node
3.根据node在获取到Jedis的单点Client
以上同时要兼顾到整个cluster的连接池,不能反复的去创建connection
技术难点二:
在做压测的时候,1WOPS时出现slave,只接收了一部分数据,然后掉线
1.java的slave在dump到本地之后的数据,even处理阻塞
2.master的slave的alive时间设置太短
解决:
replicator参数里面有一个选线(Replicator)r.getConfiguration().setDiscardRdbEvent(true);
设置后rdb文件的解析过程将被忽略,更新offset标志位拉取同步最新的command
网上开源的
https://github.com/smartxing/redis-replicator
1 当启动一个slave node的时候,它会发送一个PSYNC命令给master node
2 如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据; 否则如果是slave node第一次连接master node,那么会触发一次full resynchronization
3 开始full resynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存中。RDB文件生成完毕之后,master会将这个RDB发送给slave,slave会先写入本地磁盘,然后再从本地磁盘加载到内存中。然后master会将内存中缓存的写命令发送给slave,slave也会同步这些数据。
4 slave node如果跟master node有网络故障,断开了连接,会自动重连。master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slave node。
什么时候发生全量同步,什么时候发生增量同步。 比如做数据迁移的时候需要考虑一下,如果在数据迁移中发生了重连,全量rdb重新会同步一份
1.redis什么时候会发生全量复制
a) redis slave首启动或者重启后,连接到master时
b) redis slave进程没重启,但是掉线了,重连后不满足部分复制条件
2.部分复制需要的条件
a) 主从的redis版本>=2.8
b) redis slave进程没有重启,但是掉线了,重连了master(因为slave进程重启的话,run id就没有了)
c) redis slave保存的run id与master当前run id一致 (注:run id并不是pid,slave把它保存在内存中,重启就消失)
d) redis slave掉线期间,master保存在内存的offset可用,也就是master变化不大,被更改的指令都保存在内存
实践
读写分离,redis通常用来做缓存,所以通过redis 复制策略,可以写主读从,减少master压力
主数据库禁止备份,从数据库备份,提升master性能, master挂掉后从slave提升为主
注意 不要直接操作master,不然master会把空的文件同步到slave,那样可能会造成数据全部丢失
redis-replicator使用的一点点心得相关推荐
- android编译modem,android modem调试的一点点心得
android modem调试的一点点经验 1. mv /system/lib/libserria_gps.so /system/ 这个是关掉gps 2. mv /system/lib/libnm-r ...
- 多元线性回归,岭回归,lasso回归(具体代码(包括调用库代码和手写代码实现)+一点点心得)
最近数据挖掘导论老师布置了一项作业,主要就是线性回归的实现,笔者之前听过吴恩达的线性回归的网课,但一直没有进行代码的实现,这次正好相对系统的整理一下,方便各位同学的学习,也希望能够对其进行优化,优化的 ...
- PMP新大纲,3A通过了考试,一点点心得供新人参考
2022年8月16日,终于等到了PMP的考试结果! PMP考试终于通过啦,太开心啦,嘿嘿嘿,3A的成绩使得考前的辛苦都是值得的! 下面想跟大家分享下我的学习及考试心得,希望能够帮到想要进行PMP考试的 ...
- 使用eclipse svn塔建(配置)时的一点点心得
有没有人遇到下面这种情况??自己创建的SVN如下: 但网上别人搭建好的是这样子的: 就是为什么我的只有个主文件,而没有src.webroot.meta-inf.web-inf等子文件呢?? 这是我找了 ...
- 我学习VC中所得的点点心得
1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习 ...
- 2021搞技术社区的一点点心得
2021, 我们发起建立了Python大学生学习社区. 2021, 我们团结一致拿下多次优质社区荣誉和纪念. 2021, 我们还一起参加了一些博客活动. 以及其他. 虽然说是大学生学习社区,但我们也并 ...
- 关于TransE表示学习的一点点心得 (1)
知识图谱中,TransE模型的translate究竟是什么意思? 字典里如实说 :translate 英 [trænzˈleɪt] 美 [trænzˈleɪt],v.翻译;译;被翻译;被译成; ...
- 关于数据库登陆名和数据库用户名的一点点心得
记得自己从开始编写与sql数据库相关的程序起,就一直采用sa登陆,也没有听人说过用户名和登陆名之间有什么关系,甚至都不知道这些东西,只知道sa权限很大,可以执行数据库中的所有东西,直至暑假,在看到某一 ...
- 初学python的体会心得-python初学心得
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python 是一门编程语言,任何编程语言从一开始就离不开动手实践,光靠看书.看视 ...
最新文章
- asp.net C#压缩打包文件例子
- linux软件安装卸载命令行
- Redux系列01:从一个简单例子了解action、store、reducer
- 学习设计模式 - 六大基本原则之开闭原则
- cmd xcopy 拷贝文件夹_u盘文件夹被病毒隐藏怎么解决 u盘文件夹被病毒隐藏解决方法【详细步骤】...
- proxytable代理不生效_深圳劳动纠纷律师为你解答劳动合同没有盖章是否生效
- 识别出脸部以及给脸部打马赛克
- 照片浏览器_照片审核不通过!这可能是史上最亏的中级失败理由!
- 下载并安装Redis教程
- (转载)每位开发人员都应铭记的10句编程谚语
- iOS开发之iPhone手机轻松获取UDID的六种方式
- 设定MyEclipse编辑代码区域文字的大小及非关键字的字体、字形和颜色
- HTML列表、表格、表单、超链接、音视频标签、内嵌
- RadarNet: Efficient Gesture Recognition Technique Utilizing a Miniaturized Radar Sensor
- 华为android打开usb调试模式,华为 PE-CL00 开启USB调试模式
- 两轮电动车高端VS中低端,雅迪、爱玛谁更靠近市场?
- SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelecto
- 一个完整的springboot项目所需要导入的依赖合集(方便查找)
- c语言循环结构排序,C语言循环结构
-C语言冒泡排序算法(附带源码)
- python怎样使用各个日期赤纬_Python-PyEphem方位和高度计算
热门文章
- postgresql整理
- 《神经科学:探索脑》学习笔记(第1章 神经科学导论)
- C#实现jQuery的方法连缀
- Django基础教程
- 从《100道光芒》到《可爱冠军的诞生》:湖南广电打响“参与式”电商突围战
- Amazon 中国区配置 PingIdentity 身份集成实现 Redshift 数据库群集单点登录
- 主频不同的服务器性能差异,0.2GHz主频差距可有可无?E3处理器实测
- 淘宝自动客服(旺旺机器人)
- 九亿少女的梦(python信息处理)
- 计算机新教师汇报课报道,提升专业促成长—开元路小学开展新教师汇报课记实...