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的思想,将缓存的 ...
随机推荐
- Junit单元测试、反射、注解
Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. * Junit使用:白盒测试 * 步 ...
- sbt 设置
修改 sbtopts for shell # zkk -sbt-dir D:/DATA/.sbt -sbt-boot D:/DATA/.sbt/boot -ivy D:/DATA/.ivy2 修改 s ...
- SQLite-外键约束/表链接查询
外键约束: 表一的某个字段关联到表二的某个字段 例子: 国家表:t_country
- Servlet&JSP复习笔记 02
1.Servlet获取请求参数 获取请求参数依靠的是表单元素的name属性,广泛意义来说id属性是给客户端使用的,name属性是服务器使用的. a.获取Name-Value的方法: - getPara ...
- java连接外部接口获取数据工具类
package com.yqzj.util; import org.apache.log4j.LogManager;import org.apache.log4j.Logger; import jav ...
- 可用的 .net core 支持 RSA 私钥加密工具类
首先说明 MS并不建议私钥加密,而且.net 于安全的考虑,RSACryptoServiceProvider类解密时只有同时拥有公钥和私钥才可以,原因是公钥是公开的,会被多人持有,这样的数据传输是不安 ...
- Android recycleview item水波纹效果
item的xml 根标签下添加如下三个属性 android:clickable="true" android:focusable="true" android: ...
- maven中指定build一个project中几个特定的子modules
问题由来: 一个项目可能会有多个子module,在特定情况下可能只需要build其中几个module. 例如我的项目的目录结构如下 myproject |------------module_one ...
- IntelliJ的.iml文件及相关的Class Not Found 问题
.iml 文件是IntelliJ IDEA 自动创建的模块文件,用于Java应用开发,存储一些模块开发相关的信息,比如一个Java组件, 插件组件,Maven组件等等, 还可能会存储一些模块路径信息, ...
- Derby 命令
SHOW [ TABLES | VIEWS | PROCEDURES | FUNCTIONS | SYNONYMS ] { IN sche -- 列出表.视图.过程.函数或同义词 SHOW INDEX ...