今天在线上环境中遇到了codis-server报警,按照常规处理流程进行处理,报错步骤如下:

  1. 首先将codis-slave的rdb文件移除,并重启codis-slave
  2. 在codis-dashbord中将codis-slave移除问题codis group
  3. 将codis-slave重新加入codis group,并测试在codis-master中写入数据,查看codis-slave中能否正常读取数据

没想到在新加入codis group同步数据时发生以下报错:

[13029] 15 Oct 13:56:29.063 # Client id=8443510 addr=10.24.193.69:30377 fd=6 name= age=187 idle=187 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=16365 oll=3917 omem=100541448 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.

[13029] 15 Oct 13:56:29.160 # Connection with slave 10.24.193.69:6379 lost.

[13029] 15 Oct 13:56:30.607 * Slave 10.24.193.69:6379 asks for synchronization

[13029] 15 Oct 13:56:30.607 * Full resync requested by slave 10.24.193.69:6379

[13029] 15 Oct 13:56:30.607 * Starting BGSAVE for SYNC with target: disk

[13029] 15 Oct 13:56:30.856 * Background saving started by pid 17765

[17765] 15 Oct 13:58:26.910 * DB saved on disk

[17765] 15 Oct 13:58:27.093 * RDB: 969 MB of memory used by copy-on-write

[13029] 15 Oct 13:58:27.492 * Background saving terminated with success

出现以上报错的原因是codis/redis默认配置中```repl-timeout```的时间为60s,当复制数据的时间超过60s时,codis/redis master就会认为连接超时主动断开连接,也就是```Connection with master lost```报错。当然简单的理解,复制的过程中肯定有两个参数,一个是复制时长,另一个就是每秒/每分钟复制数据占用服务器资源的大小```client-output-buffer-limit```参数就决定了客户端输出缓冲区内存使用量,所以我们可以通过调整这两个参数来解决此次问题。

解决Redis/Codis同步超时问题

我们的codis部分配置文件如下:

repl-timeout 60
client-output-buffer-limit slave 256mb 64mb 60

上面是master上的slave客户端,默认缓冲区大小限制:当缓冲区使用超过256mb,master会尽快杀掉它;当缓冲区使用大于64mb,且小于256mb的soft limit值时,并持续时间达60秒,也会被Master尽快杀掉。

综上所述

解决超时问题有两种方式:

  • 修改超时时间长短repl-timeout 60
  • 修改缓冲区占用内容大小限制client-output-buffer-limit

当数据同步完成后最好将配置修改为原配置,避免占用服务器资源过高引起其他问题

解决Redis/Codis Connection with master lost(复制超时)问题的更多相关文章

  1. 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理

    豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...

  2. Redis的master/slave复制

    摘自:Redis的master/slave复制 Redis的master/slave数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同 ...

  3. Redis Codis 部署安装

    背景 关于Redis的高可用除了只身的Sentinel和Cluster之外,还有一个用的比较多的是Codis,由于公司的Redis大部分都使用Codis,本文就针对Codis进行相关的安装部署进行说明 ...

  4. Linux下Redis主从复制以及SSDB主主复制环境部署记录

    前面的文章已经介绍了redis作为缓存数据库的说明,本文主要说下redis主从复制及集群管理配置的操作记录: Redis主从复制(目前redis仅支持主从复制模式,可以支持在线备份.读写分离等功能.) ...

  5. redis主从复制以及SSDB主主复制环境部署记录(四)

    redis配置主从和ssdb主主复制 参考:散尽浮华Linux下Redis主从复制以及SSDB主主复制环境部署记录 只做自己查阅. 环境要求:三台虚拟机一台做主,两台做从. 通过SSDB在redis做 ...

  6. Redis面试题详解:哨兵+复制+事务+集群+持久化等

    Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. ...

  7. 史上最全Redis面试题(含答案):哨兵+复制+事务+集群+持久化等

    Redis主要有哪些功能? 哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. S ...

  8. redis的主从机制 master&slave

    转载自:https://www.cnblogs.com/qwangxiao/p/9733480.html 一:master&slave的解释? master&slave就是主从复制,主 ...

  9. Caused by: java.net.ConnectException: Connection refused: master/192.168.3.129:7077

    1:启动Spark Shell,spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序. 启动Spark Shell, ...

随机推荐

  1. in文件注意事项及详细解释

    lammps做分子动力学模拟时,需要一个输入文件(input script),也就是in文件,以及关于体系的原子坐标之类的信息文件(data file)和势文件(potential file).lam ...

  2. Java按值传递、按引用传递

    一般我们会说Java基本类型采用值传递,对象以及数组采用引用传递.但事实上这只是表面上的现象.实质上,Java都是按值传递引用.(Java中“引用”的概念相当于C++中的指针,可以不断改变值) 一,对 ...

  3. C++强制转换

    static_cast,dynamic_cast, const_cast, reinterpret_cast dynamic_cast比static_cast多了安全检测,判断源和目标有无继承被继承关 ...

  4. Maven项目的拆分与聚合

    ---------------------siwuxie095                                     Maven 项目的拆分与聚合         1.对已有的 Ma ...

  5. iOS下JS与OC互相调用(八)--Cordova简单实战

    新建工程,添加Cordova 关键类 新建一个工程TestCordova 然后添加:confug.xml.Private 和 Public 两个文件夹里的所有文件 然后build 发现报错 为什么有会 ...

  6. 39. recover rotated sorted array恢复旋转排序数组

    一句话思路:从左边开始的三步翻转法 一刷报错: 不理解start.end是位置随机定义的.i,j是临时变量,为start,end服务 nums.size()区别于nums.length:用于范形变量. ...

  7. [leetcode]416. Partition Equal Subset Sum分割数组的和相同子集

    Given a non-empty array containing only positive integers, find if the array can be partitioned into ...

  8. ROS Learning-008 beginner_Tutorials ROS话题

    ROS Indigo beginner_Tutorials-07 ROS话题 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...

  9. HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署

    HHVM起源于Facebook公司,是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升.HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行 ...

  10. WCF生成客户端代理对象的两种方法的解释

    最近在封装WCF,有一些很好的实践就记录下来,大家可以放心使用,所有代码都已经调试过.如果有高手可以大家探讨一下. 在WCF中有两种不同的方法可以用于创建客户端服务对象,他们分别为: 1. 代理构造法 ...