今天在线上环境中遇到了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. Andriod Studio adb 安装应用

    原文链接:https://blog.csdn.net/u014608640/article/details/51833304 下面的命令安装.重新安装和卸载应用程序. 安装:adb -s HT9BYL ...

  2. sql server 数据库学习

    http://m.blog.csdn.net/anxpp/article/details/51295020

  3. mybatis什么时候需要声明jdbcType?

    经常会见到以下两种写法:1. #{bookId}2. #{bookId,jdbcType=INTEGER}一般情况下,两种写法都可以.它们都可以获取Dao层传递过来的参数.但是,当传入的参数为null ...

  4. poj1611(并查集简单应用)

    题目链接:http://poj.org/problem?id=1611 思路: 显然是一个并查集的题,很简单,只要将一个group中的学生并在一起,最后遍历1到n-1,看有多少学生的祖先与0的祖先相等 ...

  5. 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)

    要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...

  6. 第七章 二叉搜索树 (d2)AVL树:插入

  7. ECMAScript6新特性之继承

    class Animal{ constructor(name){ this.name = name; } get name(){ return this._name; } set name(val){ ...

  8. phpStudy3——往数据库中添加数据

    前言: 前边介绍了查询数据库的方法,这里介绍下往数据库中添加数据的方法. 项目需求: 用户在前端页面输入的用户名和手机号码,点击提交后后端判断手机号码是否已经存在.如果不存在,那么插入数据库到数据库, ...

  9. 复制带随机指针的链表 · Copy List with Random Pointer

    [抄题]: 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点. 返回一个深拷贝的链表. [思维问题]: [一句话思路]: 完完全全地复制,否则不好操作. 1-> ...

  10. swift和OC - 拆分数组 和 拆分字符串

    1. 拆分数组 /// 根据 数组 截取 指定个数返回 多个数组的集合 func splitArray( array: [Date], withSubSize subSize: Int) -> ...