知识库

Neo4j 在磁盘空间不足时的行为 (3.4+)

继 3.4.0 版本中引入的实例磁盘空间不足后恢复流程的改进之后,本文旨在提供当这种情况发生时 Neo4j 行为的概述。

在 3.4 之前,磁盘空间不足会导致事务日志损坏。当我们尝试追加内容但设备上没有剩余空间时,它们会损坏。这本身没什么问题,因为从用户的角度来看,事务实际上从未提交,问题是我们无法从这种情况中恢复。

这是 3.4+ 上的预期行为(和恢复)

独立实例

  • 实例磁盘空间不足

  • JVM 不会崩溃,但 Neo4j 处于不可用状态(需要手动干预)

  • 手动释放服务器上的空间

  • 重启实例

因果集群

  • 实例磁盘空间不足

  • JVM 不会崩溃,但 Neo4j 处于不可用状态(需要手动干预)

  • 会自动选举一个新的领导者,并且写操作可以立即恢复

  • 手动释放旧领导者上的空间

  • 使用 neo4j-admin unbind 解除实例绑定(如果可以,这会在启动时触发本地数据库的恢复,而不是存储副本)

  • 重启实例

如果未重启,旧领导者仍将作为集群的一部分(作为跟随者),因为驱动程序认为如此,因此客户端请求可能会路由到它并超时

尽管我们试图使此过程尽可能无缝,但这仍然被视为灾难性场景。您应始终在操作系统级别监控磁盘空间利用率,以防止此类情况发生。