跳至主内容
版本:4.2

免费磁盘空间警报

概述

当可用磁盘空间低于配置的限制(默认为 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.absolute` 和 `disk_free_limit.relative` 值时,在所有支持的 RabbitMQ 版本中,前者将优先。

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

© . This site is unofficial and not affiliated with VMware.