什么是AOF
AOF 是Redis 持久化两种策略中的一种,它将用户命令以日志的形式追加到日志文件中。当恢复时就将日志文件中的操作从头到尾再执行一次。
AOF 默认不开启,当aof与rdb同时开启时使用的是aof
工作原理
fork出一个子进程将命令(读操作除外)追加到日志文件中
修复
当我们的日志文件出错时是无法启动redis的。对此,redis为我们提供了 redis-check-aof 来修复日志文件
本质是将错误操作删除
重写 rewrite
由于我们不断的追加日志到文件中,这会导致我们的日志文件越来越庞大臃肿。对此,redis通过rewrite来压缩日志文件。
遍历新进程的内存中数据,每条记录有一条的Set语句。
重写aof文件的操作,并没有读取旧的aof文件,
而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。
复制代码
配置
- AOF默认不开启如果想要开启我们需要将配置文件中的
appendonly no
改为yes - appendfilename “appendonly.aof” 指明日志文件的名称,不建议修改
-
#同步策略 # appendfsync always appendfsync everysec 每秒同步一次 # appendfsync no 复制代码
- no-appendfsync-on-rewrite no
重写的时候是否不阻塞主进程,默认no即阻塞 最安全但有延迟,
yes则类似于appendfsync none 无延迟但可能会丢失数据
复制代码
-
auto-aof-rewrite-percentage 100 100代表当前AOF文件是上次重写的两倍时候才重写。 auto-aof-rewrite-min-size 64mb 当AOF文件大小大于该值时候才可能重写,4.0默认配置64mb 复制代码
补充
- 尽管aof和rdb同时开启时使用的是aof,但不建议只开启aof,rdb更适合备份且没有aof的潜在bug可留着以防不测。
- 因为RDB档案只用作后备用途,建议只在Slave(从盘)上持久化RDB档案,而且只要15分钟备份一次就够了,即只保留 save 900 1 这条规则。
3.使用AOF ,好处是在最恶劣情况下也只会丢失不超过两秒资料,启动指令码较简单只load自己的AOF档案就可以了,
-
代价一是带来了持续的IO,
-
二是AOF rewrite的最后将rewrite 过程中产生的新资料写到新档案造成的阻塞几乎是不可避免的。
只要硬盘许可,应该尽量减少AOF rewrite的频率, AOF重写的基础大小预设值64M太小了,可以设到5G以上,预设超过原大小100%大小重写可以改到适当的数值。 复制代码
-
如果不使用AOF ,仅靠 Master-Slave Repllcation(主从复制) 实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动。
代价是如果Master/Slave(主从盘) 同时宕机,会丢失十几分钟的资料, 启动指令码也要比较两个 Master/Slave 中的 RDB档案,载入较新的那个,微博就是这种架构。 复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END