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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值