Redis 单线程架构导致无法充分利用 CPU 多核特性, 通常的做法是在一台机器上部署多个 Redis 实例。当多个实例开启 AOF 重写后, 彼此之间会产生对 CPU 和 IO 的竞争。本节主要介绍针对这种场景的分析和优化。

    优化方式:

    • 把子进程工作进行隔离, 具体方法是利用监控程序, 遍历每个 Redis 实例进行同步

    监控子进程运行状态的度量指标:

    image.png

    基于以上指标, 可以通过外部程序轮询控制 AOF 重写操作的执行:

    image.png

    说明:

    1. 外部程序定时轮询监控机器 (machine) 上所有 Redis 实例
    2. 对于开启 AOF 的实例,查看 (aof_current_size-aof_base_size/aof_base_size) 确认增长率
    3. 当增长率超过特定阈值 (如100%), 执行 bgrewriteaof 命令手动触发当前实例的 AOF 重写
    4. 运行期间循环检查 aof_rewrite_in_progress 和 aof_current_rewrite_time_sec 指标, 直到 AOF 重写结束
    5. 确认实例 AOF 重写完成后, 再检查其他实例并重复2)~4)步操作。从而保证机器内每个 Redis 实例 AOF 重写串行化执行