排除 AOF 重写的空间不足

上次更新 2024 年 4 月 18 日

故障现象

我收到导致 AOF 重写空间不足的错误。

解决方案

由于重写 AOF 文件可能占用大量的磁盘空间,我们建议将持久存储(默认位置 /var/opt/redislabs/persist)调整为节点内存的 3-6 倍大小。

请参阅 文档 了解调整大小的建议。

分片分布

如果可能,请确保从属分片在集群节点中均匀分布,以便所有节点都能分担磁盘空间的使用。使用 API 请求 GET /v1/nodes 验证持久性文件的位置,然后查看 persistent_storage_path 的值。一个示例 JSON 正文为

[
    {
      "uid": 1,
      "status": "active",
      "uptime": 262735,
      "total_memory": 6260334592,
      "software_version": "0.90.0-1",
      "ephemeral_storage_size": 20639797248,
      "persistent_storage_path": "/var/opt/redislabs/persist",
      "persistent_storage_size": 20639797248,
      "os_version": "Ubuntu 14.04.2 LTS",
      "ephemeral_storage_path": "/var/opt/redislabs/tmp",
      "architecture": "x86_64",
      "shard_count": 23,
      "public_addr": "",
      "cores": 4,
      "rack_id": "",
      "supported_database_versions": [
        {
          "db_type": "memcached",
          "version": "1.4.17"
        },
        {
          "db_type": "redis",
          "version": "2.6.16"
        },
        {
          "db_type": "redis",
          "version": "2.8.19"
        }
      ],
      "shard_list": [1, 3, 4],
      "addr": "10.0.3.61"
    },
    {
      "uid": 1,
      "status": "active",
      "// additional fields..."
    }
]

根据前一个命令的结果,验证有足够磁盘空间,例如使用

df -h /var/opt/redislabs/persist

根据要求,持久存储的大小应该比 RAM(节点 RAM)大三倍

  • 检查持久性目录中是否存在“*.aof. prev”文件。如果不用,请将其删除。
  • 极端写入场景中,当 AOF 启用时,AOF 重写进程可能需要显着更多的磁盘空间来进行数据库持久性。

参考资料

请参阅以下文档了解更多有关该主题的信息。