...
redis架构
master:192.168.1.12 6384
slave: 192.168.1.13 6384
持久化
同时开启rdb与aof
aof appendfsync=always
rdb "900 1 300 10 60 10000"
备注
这两台服务同时有其他redis共用,数据量大小30m,开启rdb,规则rdb "900 1 300 10 60 10000"
故障现象
每5分钟,client端大批超过1S的请求,耗时主要在redis auth
从redis日志看大批量accept,几十毫秒后close connection
备注:前端是短连接,每次请求到关闭连接超过几十毫秒实际性能很低
故障排查
1、超时日志报出的频率与rdb做save基本吻合,尝试关闭rdb: config set save ""
2、关闭6384 rdb后,发现还是会继续抛出错误,且依旧是5分钟的频率
3、将其他实例所有redis的loglevel设置为notice,观察rdb情况,发现6381实例也是5分钟做一次rdb,大小30m,观察IO,瞬时util达到80%多(监控的滞后性,有可能达到100%),
于是关闭6381的rdb
4、将6384和6381的rdb都关闭后,错误不再抛出
5、开启6381的rdb,将appendfsync调整为everysec,继续观察,发现错误不再抛出
最终解决方案
1、主库的写并发很小,且client端做了读写分离,因此主库的持久化以及fsync机制不变
2、从库将appendonly关闭
结论
虽然每次rdb save的量只有几十M,但是瞬时还会将IO打满,阻塞redis主线程,由于redis是单线程,因此会导致瞬时的大量请求阻塞
...
浙公网安备 33010602011771号