记录一下那天晚上的排查过程。实例重启后长时间不可用,日志显示正在加载持久化文件,业务侧缓存全部失效,数据库被打穿。
这类报错背后常见的原因有几处,逐个排除就行。持久化文件过大,加载耗时随体积线性增长。也可能是实例内存不足,加载过程中频繁换页。
少数情况下是用的是实时快照而不是追加日志,恢复点较旧。
上来先看文件大小和加载耗时
ls -lh /var/lib/redis/ && tail -20 /var/log/redis/redis.log
再往下确认实例内存余量
free -h
评估切换持久化方式
redis-cli config get appendonly
剩下的就是按内存规划分片部署
redis-cli info keyspace
白天有业务在跑,能验证的部分都压到了晚上做。
别只看报错消失,验证要多做一步。重启后加载时间缩短到可接受范围,缓存恢复速度满足业务要求。
单实例数据量太大时,重启就是一次长时间故障;按业务分片并控制单实例体积比换持久化方式更有效。报错文案容易误导,真正的原因往往在相邻那一层的日志里。