RabbitMQ流控-磁盘控制

当磁盘空间低于配置(disk_free_limit)的限制时(默认disk_free_limit.absolute=50MB),将触发警报,并阻塞所有生产者。目的是避免填充整个磁盘,否则将导致节点上的所有写操作失败,并可能导致RabbitMQ终止。为了减少磁盘被填满的风险,所有正在传入的消息都将被阻塞。在内存压力下,非持久化的暂态消息仍将page到磁盘,并将耗尽已经有限的磁盘空间。如果磁盘警报阈值设置得太低,并且消息被快速换出(到磁盘),则可能在磁盘空间检查期间耗尽磁盘空间并崩溃RabbitMQ(间隔至少10秒)。更保守的方法是将磁盘限制阈值设置为与系统上安装的内存数量相同(参见下面的配置)。

如果空闲磁盘空间低于配置的阈值,将触发警报。将至少每10秒监视代理数据库使用的驱动器或分区的空闲空间,以确定是否应该发出或清除磁盘警报。一旦代理启动,将立即启动监控,导致代理日志文件中出现一个条目:

=INFO REPORT==== 23-Jun-2012::14:52:41 ===
Disk free limit set to 953MB

在不被认可的平台上,监控功能将会被禁用,从而导致以下输入:

=WARNING REPORT==== 23-Jun-2012::15:45:29 ===
Disabling disk free space monitoring

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

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

当空闲磁盘空间低于配置的限制时,RabbitMQ将阻塞消息生产者并阻止基于内存的消息page到磁盘。这将减少磁盘空间耗尽导致崩溃的可能性,但不会完全消除它。特别是,如果正在快速换出(page)消息,可能会耗尽磁盘空间并在两次运行磁盘空间检测之间崩溃。更保守的方法是将限制设置为与系统上安装的内存数量相同(参见下面的配置部分)。

Configuring the Disk Free Space Limit

磁盘空闲空间限制使用参数disk_free_limit设置。默认情况下,数据库分区上需要50MB的空闲空间(关于默认数据库位置,请参阅http://www.rabbitmq.com/relocate.html的描述,默认地址:/var/lib/rabbitmq/mnesia/rabbit@localhost)。此配置文件将磁盘空闲空间限制设置为1GB:

disk_free_limit.absolute = 1GB
或
[{rabbit, [{disk_free_limit, 1000000000}]}]

也可以相对于机器中的RAM设置一个空闲空间限制。此配置文件将磁盘空闲空间限制设置为与机器上RAM数量相同:

disk_free_limit.relative = 1.0
或
[{rabbit, [{disk_free_limit, {mem_relative, 1.0}}]}]

当代理使用rabbitmqctl set_disk_free_limit disk_limit命令或rabbitmqctl set_disk_free_limit mem_relative fraction命令运行时,可以更改该限制。此命令将一直生效,直到代理关闭。在代理重新启动之后,还应该更改相应的配置设置。

你可能感兴趣的:(RabbitMQ)