行测 kubeflow Jmeter 程序设计 centos7 overflow ajax concurrency 虚拟机 Egret Engine jquery绑定click事件 java常用的包 nfc卡片 本地安装mysql excel加减混合求和 mysql函数 python的编译器 python导入文件 java基本类型 java对象和类 java读取文件内容 java定义接口 java单继承 java中long linux安装系统 黑客攻防实战入门 运行时错误1004 decimalformat 猫爪 笔记本外接显示器好吗 电视免费软件 ps选择反向快捷键 数组求和 小米9截屏 mathcad 梦想世界科举答案 kz文件 bootskin dnf传说 dll文件
当前位置: 首页 > 学习教程  > 编程语言

Redis故障01-- keys命令导致集群崩溃

2020/12/28 19:48:35 文章标签:

keys命令导致集群崩溃 总是原理上知道keys命令很危险,线上禁用,会导致各种问题,终于见到真身了 一、redis-migrate-tool迁移失败,fork:cannot allocate memory导致 前一天晚上,我用redis-migrate-tool工具迁移哨兵数据到集群,也遇到问题 工具里边一直提示我Part…

keys命令导致集群崩溃

总是原理上知道keys命令很危险,线上禁用,会导致各种问题,终于见到真身了

一、redis-migrate-tool迁移失败,fork:cannot allocate memory导致

前一天晚上,我用redis-migrate-tool工具迁移哨兵数据到集群,也遇到问题

工具里边一直提示我Partial resynchronization for MASTER [] not possible(no cached master).我开始还理解这是在部分同步?为啥进行部分同步,英语没学好,看到源redis的日志之后我才理解了,tool工具里边说的是没有缓存的主节点数据.

下边是源redis中报出来的异常,cannot save in background:fork:cannot allocate memory

我以为就是内存不足,查看一下内存还有9个g,完全是够用的

 

于是乎更改一下内核参数,有以下三种方式更改

1.编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
2.sysctl vm.overcommit_memory=1
3.echo 1 > /proc/sys/vm/overcommit_memory

推荐2和3的方式更改,这样只更改一个overcommit_memory这一个参数值,如果使用第一种方式,不能确定文件里边的内容是否本来就生效的,这样可能更改更多的内核参数,所以不建议

修改之后重新同步,问题解决.

二、keys导致redis集群崩溃

迁移发生在前一天晚上,第二天上午就在我出去的半个小时里,监控报警了,失联了一对主从节点,集群状态fail

就如上图所示,每条keys命令执行需要1s,一共执行了30分钟差不多,阻塞产生的结果是什么呢?

redis集群间的通信是通过ping-pong来查看节点是否存活的,如果15s之内发出的ping都没有反馈,这个节点就被定义为失联,这时会发生主从替换,替换之后,从节点也面临相同的问题,keys阻塞节点,这时候从节点也会失联,同一对主从失联的结果就是集群fail,直到keys命令执行完成,redis集群才恢复正常,这是一次血的教训,从这一天开始我们生产就开始严格的规范禁止使用keys *,flushdb,flushall等命令了

 


本文链接: http://www.dtmao.cc/news_show_550389.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?