跳到主要内容
版本: 4.1

磁盘空间不足警报

概述

当可用磁盘空间降至配置的限制以下(默认为 50 MB)时,将触发警报,并且所有生产者都将被阻止。

目的是避免填满整个磁盘,这将导致节点上的所有写入操作失败,并可能导致 RabbitMQ 终止。

工作原理

为了降低填满磁盘的风险,所有传入消息都被阻止。瞬态消息(通常不会持久化)在内存压力下仍然会分页到磁盘,并将占用已经有限的磁盘空间。

如果磁盘警报设置得太低,并且消息分页速度很快,则有可能在磁盘空间检查之间(至少间隔 10 秒)耗尽磁盘空间并导致 RabbitMQ 崩溃。更保守的方法是将限制设置为与系统上安装的内存量相同(请参阅下面的配置)。

如果可用磁盘空间量降至配置的限制以下,则会触发警报。

将至少每 10 秒监控一次 Broker 数据库使用的驱动器或分区可用空间,以确定是否应引发或清除磁盘警报。

监控将在节点启动时开始。它将留下一个日志条目,如下所示

2019-04-01 12:02:11.564 [info] <0.329.0> Enabling free disk space monitoring
2019-04-01 12:02:11.564 [info] <0.329.0> Disk free limit set to 950MB

在无法识别的平台上,磁盘可用空间监控将被停用,从而导致如下条目

2019-04-01 11:04:54.002 [info] <0.329.0> Disabling disk free space monitoring

在集群中运行 RabbitMQ 时,磁盘警报是集群范围的;如果一个节点低于限制,则所有节点都将阻止传入消息。

RabbitMQ 定期检查可用磁盘空间量。磁盘空间检查的频率与上次检查时的空间量有关。这是为了确保在空间耗尽时及时发出磁盘警报。通常,磁盘空间每 10 秒检查一次,但随着限制的接近,频率会增加。当非常接近限制时,RabbitMQ 将以每秒 10 次的频率进行检查。这可能会对系统负载产生一定影响。

当可用磁盘空间降至配置的限制以下时,RabbitMQ 将阻止生产者并防止基于内存的消息分页到磁盘。这将降低因磁盘空间耗尽而崩溃的可能性,但不会完全消除它。特别是,如果消息分页速度很快,则有可能在两次磁盘空间监视器运行之间的时间内耗尽磁盘空间并崩溃。更保守的方法是将限制设置为与系统上安装的内存量相同(请参阅下面的配置部分)。

配置磁盘可用空间限制

磁盘可用空间限制通过 disk_free_limit 设置进行配置。默认情况下,数据库分区上需要有 50MB 的可用空间(有关默认数据库位置,请参阅文件位置的描述)。此配置文件将磁盘可用空间限制设置为 1GB

disk_free_limit.absolute = 1000000000

该值也可以使用内存单位(KB、MB GB 等)进行设置,如下所示

disk_free_limit.absolute = 1GB

可以使用 rabbitmqctl set_disk_free_limit 命令在 Broker 运行时更改限制。此命令的效果将持续到下次节点重启。

当效果应在节点重启后仍然存在时,也应更改相应的配置设置。

绝对和相对可用磁盘空间低水位线

当意外地同时设置了 disk_free_limit.absolutedisk_free_limit.relative 值时,在所有受支持的 RabbitMQ 版本中,前者将优先。

disk_free_limit.absolute 是两种选项中推荐的选项,因为它更容易理解。

© . All rights reserved.