前段时间在现网上面部署了 多个redis节点。
因为这些redis数据不能丢失。
选择的持久化策略是 AOF.
大家用aof都有这这样的一个问题 就是aof文件要是不定期进行rewrite的话 , 就会不断的增大。
所以,对这些redis节点 进行了定期的rewrite.
和 aof相关的主要参数配置如下:
redis 127.0.0.1:6380> config get *append*
1) "appendonly"
2) "yes"
3) "no-appendfsync-on-rewrite"
4) "no"
5) "appendfsync"
6) "everysec"
redis 127.0.0.1:6380> config get *aof*
1) "auto-aof-rewrite-percentage"
2) "100"
3) "auto-aof-rewrite-min-size"
4) "67108864"
在这种配置的情况下 bgrewriteaof 时,系统会有大量的错误信息。
解决的办法:
1.修改配置文件 redis.conf
中的参数
no-appendfsync-on-rewrite 为 yes
默认值是 no
#yes : 在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。
#no : 在日志重写时,命令追加操作照常进行
2. 动态参数的修改:
config set no-appendfsync-on-rewrite yes
no-appendfsync-on-rewrite 的解释:
在默认情况下 当aof进行重写的时候,aof的同步信息不是关闭的。
在这种情况下 。子进程rewrite在写硬盘 主进程 aof也在写硬盘。在rewrite的过程中 子进程对主进程造成了磁盘阻塞(disk io冲突),导致了报警信息的产生。
但是这个参数修改成 yes之后 ,又会有安全上的问题。
当rewrite的过程中 要是redis down掉的话 丢失的数据 就不是之前appendfsync 定下的策略。
而是整个 rewrite 过程中的所有数据。