跳至主要内容
版本:4.0

可用磁盘空间警报

概述

当可用磁盘空间低于配置的限制(默认 50 MB)时,将触发警报,并且所有生产者将被阻塞。

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

工作原理

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

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

如果可用磁盘空间低于配置的限制,将触发警报。

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

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

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 命令更改限制。此命令的效果将在下一个节点重启之前生效。

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

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

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

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

© 2024 RabbitMQ. All rights reserved.