今天在线上环境中遇到了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. keynote

    [keynote] 1.如何保证文档加载完才运行代码? 2.元素选择器. 3.属性选择器. 4.更新css. 5.更复杂的例子. 6.常用事件. 7.hide & slow 8.您可以使用 t ...

  2. HTTP协议图示详解

    一.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. ...

  3. SSL原理分析

    SSL协议的工作流程: 服务器认证阶段:       1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接:      2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则 ...

  4. mac下将根目录/更改组到普通用户,导致sudo不能用

    背景:这是个很愚蠢的故事,我更改了根目录下所有文件的拥有者为普通用户[chown -R xxx / ].结果sudo/su命令都不能用了……   问题:一旦用sudo命令或su命令就提示: sudo: ...

  5. url获取参数

    参考http://www.runoob.com/w3cnote/js-get-url-param.html function getQueryVariable(variable) { var quer ...

  6. javascript 中 if (window != top) top.location.href = location.href;的意思

    如果当前窗口不是顶级窗口,就强制修改为顶级窗口: 目的是为了不让别人用iframe嵌入你的页面

  7. 43. Multiply Strings (String)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  8. vmware14中安装centos7并使用docker发布spring-boot项目

    1.vmare中centos7安装(同一路由器无线网络下) 1.1选择桥接模式 1.2修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33(这里不一 ...

  9. CentOS 7安装Samba 4.6 版本步骤及错误解决方法

    首先通过这次教训,让我养成一个好习惯:备份  备份  备份      不管做什么配置或者更改什么东西之前先做好备份! 还有我本身的一个坏毛病:眼高手低! 工厂有一台服务器,由以前的运维装的Samba ...

  10. .net 4.0的Lazy<T>方法,反射实现延迟加载。

    //自己山寨.public class YaLazy<T> { private bool _isValueCreated = false; public bool IsValueCreat ...