Redis被 bgrewriteaof阻塞的解决方法

本文介绍了在使用Redis的AOF持久化策略时遇到的bgrewriteaof阻塞问题,分析了由于磁盘IO冲突导致的错误信息,并提出了两种解决方法:1. 修改配置文件redis.conf,将no-appendfsync-on-rewrite参数设置为yes;2. 动态调整参数config set no-appendfsync-on-rewrite yes。然而,改变此参数可能带来数据安全风险,即在rewrite期间Redis宕机会导致更大范围的数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间在现网上面部署了 多个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 过程中的所有数据。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值