redis - 从 RDB 加载并继续写入 AOF

redis - load from RDB and keep writing the AOF

我在组合工作 mod - RDB + AOF。
我正在寻找一种从 RDB 文件重启后加载的方法 - 主要用于快速重启。
除此之外,我还想继续写AOF
一旦知道有灾难,我就手动从AOF加载。
这是我当前的配置:(我知道 appendonly yes 说 AOF 将在重启后加载,我正在寻找来自 RDB 的等待加载并继续写入 AOF。)

aof-use-rdb-preamble yes
aof-load-truncated yes
aof-rewrite-incremental-fsync yes
appendfilename "appendonly.aof"
appendfsync everysec
appendonly yes

谢谢

如果两者都启用,Redis 将始终加载 AOF,因为 AOF 为您提供更好的持久性。

通过使用 aof-use-rdb-preamble yes,您已经两全其美了。你的 AOF 会时不时地自动重写,先是一个 RDB 文件,然后是一个 AOF 尾部。参见 redis.conf L1157

由于您希望有一个可预测的平均恢复时间 (MTTR),因此您希望调整 AOF 自动重写的参数,如 redis.conf LL113

中所述
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

您还可以使用 BGREWRITEAOF command

手动触发 AOF 重写 即使 appendonly 配置为 no

BGREWRITEAOF 也能正常工作。但是,请注意,每次调用 BGREWRITEAOF 时,您都会在 appendonly.aof 文件中获得几乎一个 rdb 文件。

然后,如果 appendonly 配置为 yes,你也会得到一个 AOF 尾(命令附加到 appendonly.aof 文件)。

BGREWRITEAOFBGSAVE 是昂贵的操作,并且会在 运行 期间降低服务器的性能。所以我建议你只使用 AOF,它已经自动或每次你 运行 BGREWRITEAOF.

给你日志压缩

您可以将 auto-aof-rewrite-percentage 设置为较低的值,例如 2% 或 5%。然后您可以使用这两种策略测试 MTTR(重新启动所需的时间)。我相信您会发现差异太小以至于无法单独组合这两种策略(RDB 和 AOF)。 AOF 已经给你 RDB-inside if aof-use-rdb-preamble yes