数据库
首页 > 数据库> > Redis故障01-- keys命令导致集群崩溃

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

作者:互联网

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等命令了

 

标签:01,失联,keys,redis,--,集群,memory,节点
来源: https://blog.csdn.net/weixin_39523456/article/details/111872786