redis版本4.0.12
在服务器上启动两台redis实例,6379和6380
生成测试数据
创建主从复制,6379为主
使用防火墙模拟主从复制连接中断
模拟在复制中断过程中,主库正常接受请求
数据量约156K
将主从实例停止并删除日志和转储文件之后重复前面的步骤将环境恢复到主从复制状态。
模拟主从复制中断
生产更多的数据量导入主库
数据量约2M
恢复中断
查看恢复之后主库与从库的日志
cat master.out
cat slave.out
从两次的日志当中可以看出来,数据量少的时候主从连接恢复的时候,同步数据采用的是部分同步,而数据量多的时候采用的是完全同步。这是因为当中断期间主库接受的数据量小于repl-backlog-size的值就会采用部分同步,反之就会使用完全同步。repl-backlog-size的默认值为1M。
部分同步是通过向主库发送,中断前最后使用的offset和主实例ID向主库发送部分同步请求,主库首先确认ID与自己是否一致,之后判断offset能否从backlog缓冲区中获取。如果可以获取,从就可以获得连接断开期间所有写命令,完成同步。
完全同步需要创建后台线程生成转储文件,这需要额外的内存开销,之后还需将转储文件传输给从库,而部分同步则不需要,所以部分同步的代价更小应当更多的使用部分同步,当主库接收数据量较大的时候,默认的repl-backlog-size值很容易导致使用完全同步。所以需要根据数据量调整repl-backlog-size的值,计算公式如下:
t * (master_repl_offset2 – master_repl_offset1) / (t2 – t1)
t是主从连接可能断开的时间,秒为单位,master_repl_offset通过峰值期间Info命令获取。
更多精彩干货分享
点击下方名片关注
IT那活儿
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129904.html
摘要:线程有几种状态生命周期是怎样的线程有五种状态创建就绪运行阻塞死亡。当线程获得到等待的资源资源或者引起阻塞的条件得到满足时调用或,会从阻塞状态进入就绪状态。使用,允许最多个线程同时访问资源。 转载请注明出处: 贴一贴我的后端开发面试题。 本文是面试回寝室后凭记忆罗列出来的问题,大概90%的问题都在这里面了,有几个问题的实在是想不起来了= =,有些问题自我感觉回答的不好,所以我是查了资料...
摘要:常规的知识点整理将持续更新不仅仅做缓存使用,某种场景下可以当做数据库使用,替换,因为是可以持久化的,所以可以直接和进行交互而则不能当数据库使用,只能作缓存使用,不能替换。的实际处理速度完全依靠主进程的执行效率。 redis 常规的知识点整理---将持续更新... 1.redis 不仅仅做缓存使用,某种场景下可以当做数据库使用,替换 mysql,因为 Redis 是可以持久化的,所以可以...
摘要:以下为大家整理了阿里巴巴史上最全的面试题,涉及大量面试知识点和相关试题。的内存结构,和比例。多线程多线程的几种实现方式,什么是线程安全。点击这里有一套答案版的多线程试题。线上系统突然变得异常缓慢,你如何查找问题。 以下为大家整理了阿里巴巴史上最全的 Java 面试题,涉及大量 Java 面试知识点和相关试题。 JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节。 S...
摘要:作用默认,即,适当调整年轻代大小,可以一定层度上较少出现的概率其余性能调优常用参数设置指定的初始和最大堆内存大小,两值可以设置相同,以避免每次垃圾回收完成后重新分配内存。 Java性能优化之针对分代垃圾回收调整 [TOC] JVM内存的系统级的调优主要的目的是减少Minor GC的频率和Full GC的次数,过多的Minor GC和Full GC是会占用很多的系统资源,影响系统的吞吐...
阅读 1249·2023-01-11 13:20
阅读 1557·2023-01-11 13:20
阅读 1011·2023-01-11 13:20
阅读 1680·2023-01-11 13:20
阅读 3971·2023-01-11 13:20
阅读 2519·2023-01-11 13:20
阅读 1310·2023-01-11 13:20
阅读 3486·2023-01-11 13:20