Redis-AOF

什么是AOF

AOF 是Redis 持久化两种策略中的一种,它将用户命令以日志的形式追加到日志文件中。当恢复时就将日志文件中的操作从头到尾再执行一次。
AOF 默认不开启,当aof与rdb同时开启时使用的是aof

工作原理

360截图20210503105350663.jpg
fork出一个子进程将命令(读操作除外)追加到日志文件中

修复

当我们的日志文件出错时是无法启动redis的。对此,redis为我们提供了 redis-check-aof 来修复日志文件
本质是将错误操作删除
360截图20210503114609997.jpg

重写 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
    复制代码

补充

  1. 尽管aof和rdb同时开启时使用的是aof,但不建议只开启aof,rdb更适合备份且没有aof的潜在bug可留着以防不测。
  2. 因为RDB档案只用作后备用途,建议只在Slave(从盘)上持久化RDB档案,而且只要15分钟备份一次就够了,即只保留 save 900 1 这条规则。

3.使用AOF ,好处是在最恶劣情况下也只会丢失不超过两秒资料,启动指令码较简单只load自己的AOF档案就可以了,

  • 代价一是带来了持续的IO,

  • 二是AOF rewrite的最后将rewrite 过程中产生的新资料写到新档案造成的阻塞几乎是不可避免的。

      只要硬盘许可,应该尽量减少AOF rewrite的频率,
      AOF重写的基础大小预设值64M太小了,可以设到5G以上,预设超过原大小100%大小重写可以改到适当的数值。
    复制代码
  1. 如果不使用AOF ,仅靠 Master-Slave Repllcation(主从复制) 实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动。

        代价是如果Master/Slave(主从盘) 同时宕机,会丢失十几分钟的资料,
        启动指令码也要比较两个 Master/Slave 中的 RDB档案,载入较新的那个,微博就是这种架构。
    复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享