RDB和AOF高可用
10 分钟阅读
•
877 字
+
521 词
RDB快照
- 手动触发:执行save(主线程执行会阻塞)或bgsave(fork一个子进程用于写入临时RDB文件,持久化交给子进程来处理,阻塞只会发生在fork阶段,生成RDB文件的默认配置使用的就是该命令)
-
自动触发:
- 在redis.conf配置save m n,在m秒内至少有n个key更改,自动触发bgsave
- 主从复制:从节点需要从主节点进行全量复制时会触发bgsave操作,把生成的RDB文件发送给从节点。
- shutdown命令,如果没有开启AOF持久化,那么也会触发bgsave
- 执行debug reload命令重新加载Redis会触发bgsave。
写时复制
优缺点
- RDB文件采用二进制格式数据和数据压缩的方式写磁盘,文件体积远小于内存大小,适合备份和全量复制。
- RDB文件加载恢复数据的速度远远快于AOF文件。
- 实时性不够,无法做到秒级持久化。
- 通过bgsave调用fork函数创建子进程,子进程属于重量级操作,频繁执行成本高。
AOF持久化
- always:同步写回,写命令执行完毕立刻将aof_buf缓冲区的内容写到aof文件。
- everysec:每秒写回,写命令执行完,日志只会写到AOF文件缓冲区,每隔一秒就把缓冲区的内容同步到磁盘。
- no:操作系统控制,写命令执行完,把日志写到AOF文件内存缓冲区,由操作系统决定何时同步到磁盘。
AOF重写瘦身
- 持久化实时性高
- 是一种追加日志,不会出现随机磁盘读写。
- 易于理解和解析的格式,包含所有操作的日志。
- 写操作执行成功才记录日志,避免了命令语法检查开销,同时不会阻塞当前写命令。
- 由于AOF记录的是一个个命令,因此故障恢复时要执行所有命令,如果命令太大,那么整个恢复过程会很缓慢。
- 文件系统对文件大小有限制,且追加效率随文件大小增加而降低。
- 写日志之前宕机,那么会丢失数据