解决 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 重写过程可能需要更多磁盘空间才能进行数据库持久化。

参考资料

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