Redis:slave flush old data造成实例不可用
一、问题描述
2019-02-22凌晨02:42分前后,收到集群中 [10.32.52.8:6500] 实例不可用告警,登陆管理界面查看此实例在正常运行状态,期间未出现机器宕机或实例直接挂掉的现象。

二、排查过程
1、同时排查Redis集群中这对主从实例在问题发生时间点前后的日志,从实例在02:39分开始一次全量的主从同步,02:40-02:49 从实例正在执行“Flush old data”,这个过程Redis不接收任何请求连接,导致监控告警“实例不可用”;


2、查看主实例[10.32.52.13:6400] 日志,在02:24分,由于从实例客户端的输出缓冲区超过了限制,主实例主动关闭了从实例的连接,造成这对主从断连,
其中client-output-buffer-limit slave 512mb 128mb 60 表示从实例客户端输出缓冲区大小超过512M或者超过128M情况下持续60s,主实例会主动关闭从实例连接,
Client List中的omem=441802576 表示从实例输出缓冲区大小为421M,触发了关闭连接操作;

3、主从实例被断开后,从实例再次发起连接请求,由于这个时间点业务有大量的数据写到主实例,主实例自动触发了一次aof重写操作,再次建立主从连接后,主从进行了一次全量同步。
主从全量同步流程如下:

三、根因分析
1、主从在进行全量同步期间,由于数据量太大,从实例清理内存数据耗时长达9分钟,这期间从实例不接受任何连接请求和访问,监控告警实例不可用。
四、解决方法
1、进行水平扩容,降低集群中单实例容量的大小,单实例大小保持在12G最合理,最好不超过15G,减少全量同步消耗的时间。
五、思考
1、集群中一对主从实例的userd_memory相差6G左右,但是实例中的对象数相同,为什么?
解答:这是因为从实例因为以上原因,均有执行过全量复制,全量复制时主实例的rdb文件中不会把过期key持久化,从实例加载主实例的rdb文件,不会有过期key被加载,所以相差的部分我们可以理解为主实例的过期数据。

Redis:slave flush old data造成实例不可用的更多相关文章
- Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享
Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享 2014-09-09 14:14:25 标签:会话共享 主从 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- 039——VUE中组件之子组件中data使用实例与text-xtemplate的使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring Boot + Spring Data + Elasticsearch实例
Spring Boot + Spring Data + Elasticsearch实例 学习了:https://blog.csdn.net/huangshulang1234/article/detai ...
- Redis的高并发、持久化、高可用架构设计
就是如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用 我这里会选用我之前讲解 ...
- 搭建实时同步data guard的最高可用-切换主备
搭建实时同步data guard的最高可用-切换主备 首先保证主库在归档模式下:错过N次了 准备二台机器(hostname gw hosts ech0)host-only [root@node1 ~] ...
- Redis源码阅读(二)高可用设计——复制
Redis源码阅读(二)高可用设计-复制 复制的概念:Redis的复制简单理解就是一个Redis服务器从另一台Redis服务器复制所有的Redis数据库数据,能保持两台Redis服务器的数据库数据一致 ...
- Redis整合Spring结合使用缓存实例(三)
一.Redis介绍 什么是Redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...
- Redis整合Spring结合使用缓存实例
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的 ...
- Redis整合Spring结合使用缓存实例(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的 ...
随机推荐
- 通过Dockerfile 文件为linux images 添加新用户
要求: (1)增加一个新用户,名为mynewuser (2)让这个用户有root权限 (3)设置其密码为mynewpassword (4)Container启动后以mynewuser登录,并且直接到m ...
- 一.Memcached企业服务
1.Memcached是什么,有什么作用? Memcached是一个开源的.高性能的内存缓存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思. ...
- 吴裕雄--天生自然 pythonTensorFlow图形数据处理:TensorFlow图像处理函数
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt #读取图片 image_raw_data = tf ...
- 吴裕雄--天生自然Linux操作系统:Linux常用命令大全
系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) ...
- 发生 Configuration system failed to initialize 错误的一个特例
一般情况下,.net 程序启动时发生 Configuration system failed to initialize 错误, 大都与 config 文件中 <configSections&g ...
- Iterator模式
Iterator英文意思是重复做某件事,中文翻译为迭代器,这个设计模式中主要有Iterator(迭代器),ConcreteIterator(具体的迭代器),Aggergate(集合),Concrete ...
- 共克时艰,停工不停学 Serverless 在线课堂免费开课
二月份,Serverless 团队联合腾讯云大学与云+社区免费推出 Serverless 在线直播课程,课程涵盖 Serverless 架构解密.技术解析以及不同应用场景下的最佳实战指导,让你从 0 ...
- 以puppeteer抓取微指数,puppeteer基本示例,docker部署headless
还是直接上代码 https://github.com/cclient/weizhishu-puppeteer 根据关键字获取微博指数 早期版本以常规的构造cookie,token,sign的访问api ...
- WebService客户端生成方法
1.使用JDK的wsimport.exe产生客户端代码 打开cmd命令框,输入如下格式命令: 格式:wsimport -s "src目录" -p "生成类所在包名&quo ...
- swagger-ui不显示问题定位
1. 现象1 正常情况是 group会显示default/v2/api-docs 不知道是什么原因, 一个app可以展示,但另一个app不展示,配置也基本相同 1.1 定位过程 正常的app访问时的结 ...