rabbitmq 在管理控制台中显示错误的磁盘可用限制

rabbitmq showing wrong disk free limit in management console

正如标题所说,我有一个问题,rabbitmq 显示(并认为)有更多 space 可用,正如我告诉他的那样。

我在 2 个 RHEL pods 中 运行 2 个 rabbitmq 3.8.8 实例和 erlang 23.0。对于这些 pods,动态配置的 PersistentVolume 在 NFS 上绑定了 2GB 大小。 这意味着,每个 pod 都应该有 1GB 的 space 供自己使用。

在 rabbitmq.conf 我有以下内容:

vm_memory_high_watermark.relative = 0.9
total_memory_available_override_value = 1000MB
disk_free_limit.absolute = 1GB
management.load_definitions = /etc/rabbitmq/definitions.json

另外,当我启动 Rabbitmq 时,我在日志中看到配置被正确读取:

2020-10-13 08:26:51.726 [info] <0.427.0> Memory high watermark set to 858 MiB (900000000 bytes) 
2020-10-13 08:26:51.811 [info] <0.439.0> Enabling free disk space monitoring
2020-10-13 08:26:51.811 [info] <0.439.0> Disk free limit set to 1000MB

问题是,rabbitMQ 以某种方式认为,整个 NFS 免费 space 可用 - 54GB(如上面的屏幕截图所示)。所以我遇到了一个问题,超过 20 万条消息卡在其中一个 queues 中,填满了我给他的那些 2GB PersistentVolume,但并没有停止接受消息,因为他认为,还有更多 space可用。当然,整个 rabbitmq pod 崩溃了,因为它无法向 NFS 写入更多消息。

能不能指导一下,怎么设置才正确? 或者你知道吗,为什么 rabbitMQ 不尊重 disk_free_limit.absolute 值 ?

非常感谢

rabbitmq-diagnostics environment | grep disk_free_limit

将显示实际的 effective configuration value

在 Linux 上,RabbitMQ 将使用配置的绝对值,或通过 运行

计算其数据目录分区有多少磁盘 space
df -kP /path/to/directory

不知道 Kubernetes 配额。

我在 Kubernetes 上没有 NFS 分区可以尝试,但可以使用以下 rabbitmq.conf 文件进行基本测试

disk_free_limit.absolute = 3GB

不复现;配置值按预期使用。参见 1

关于你的问题:“为什么 rabbitMQ 不尊重 disk_free_limit.absolute 值” - 我认为它尊重(即使它错误地对待 k8s / pod 的空闲内存)。

该值在您附加的图像中显示为“954 MiB 低水印”- 这意味着当您只有 1 GB 可用磁盘时 space 代理将阻止发布者发布并将只允许消费者消费,直到磁盘上有更多 space 可用。

所以只要机器有超过 1 GB 的可用空间,它就会继续接受消息。

可能因为它错误地读取了它有 54 GB 的可用空间 space 它崩溃了,但是 disk_free_limit.absolute 值似乎被正确读取了。