崩了。。求助
1
jyf 2018-04-09 10:05:26 +08:00 1
至少你要给个两个命令输出信息的截图啊
|
2
sujin190 OP @jyf #1 就是 redis-cli info 之后看到 key space 加起来有将近 200 多万 key,忘了保存截图了
唉,惊讶的发现 slave 切 master 之后,瞬间数据 key space 信息只剩 30 多万 key 了,血崩。。 |
3
monsterxx03 2018-04-09 11:16:08 +08:00 via iPhone 1
因为你里面有很多 expire 的 key,忘了哪个版本之前,del 是不会同步到 slave 的,所以切了之后一下次全部 expire 了
|
4
sujin190 OP @monsterxx03 #3 还是 2.8,那么 slave 的内存怎么回收呢? bgsave 的时候似乎能处理过期问题,这跪了。。
|
5
judeng 2018-04-09 11:25:04 +08:00 1
info 命令显示的包含过期键,过期键 bgsave 时不会同步到 slave 上
|
6
rrfeng 2018-04-09 12:11:19 +08:00 via Android
keys
expires 楼主没学好英文吗? |
9
swulling 2018-04-09 12:45:16 +08:00
expire 的 key 没有不是很正常么,为啥叫雪崩?
|
10
monsterxx03 2018-04-09 12:45:57 +08:00 2
其实你应该可以不用管, 数据并没丢,只是 expire 的 key 被删除了, redis 的清除过期 key 的机制有好几种, 如果你去读 slave, 读到一个 过期的 key 会在访问时删除,如果内存达到了你设置的 max-memory, 过期的 key 会被优先踢出去.
info 看到的里面 keys 是包含过期 key 的. |
12
sujin190 OP @judeng #11 slave,从某天开始突然不 bgsave,又没注意,被坑了,不知道这种情况会是啥问题,难道是内存不足,无法完成 bgsave 么?
master 是关闭持久化的,虽然是 bgsave 但是,似乎还是导致延时上涨,所有就由 slave 来 bgsave 了 |
13
sujin190 OP @swulling #9 血崩,表示我现在很崩溃,master 被系统 kill 掉了,slave 的 bgsave 自己停了,数据也不知道哪去了大半。。。
|
14
sujin190 OP @monsterxx03 #10 哦,master 被系统 kill 掉了,从库数据只剩一小半,奇怪了,说起来怎么防止 redis 被系统 oom kill 掉呢?
|
15
monsterxx03 2018-04-09 20:12:59 +08:00 via iPhone 1
搜下 redis vm.overcommit_memory,估计你没设才会在 bgsave 的时候 oom,但还是要设置下 redis 的 max memory,占用内存到物理内存肯定会被 kill
|
16
sujin190 OP @monsterxx03 #15 好的,我研究下,感谢!
|
18
catinred 2018-04-10 10:05:02 +08:00
建议楼主先读读 Redis 的 FAQ https://redis.io/topics/faq
|
19
sujin190 OP @kimown #17 slave 最后同步 master 的时间是正常的,bgsave 无法成功应该是内存不足的问题,可以看 @monsterxx03 #15 的提示
master 被系统 oom killer 是因为整台机器都给 redis 用了,所以没有设置最大内存使用,也没有设置 swap,redis 有峰值使用所以差不多申请了所有的物理内存,虽然平时只用差不多一般,机器上还部署有监控系统的 agent,所以其在某次申请内存的时候触发了系统 oom killer,也没有对 redis 进程的 oom_adj 进行特别设置,所以系统果断 kill 掉了 redis 进程 数据少了大半的问题就简单了,发现时 redis 已经被 kill 掉了一晚上了,所以都过期了啊 可以看看这个 https://cachecloud.github.io/2017/02/16/Redis%E7%9A%84Linux%E7%B3%BB%E7%BB%9F%E4%BC%98%E5%8C%96/ 说起来做了监控,但没加 redis 的告警,业务使用 redis 连不上也不出系统错误,而是除了其他业务错误,导致其他系统告警完全忽略了,也是自己给自己挖了好大的坑 |