文档

对象扫描器

概述

MinIO 使用内置扫描器检查对象是否需要修复,并执行任何计划的对象操作。这些操作可能包括

扫描器在两个级别执行这些功能:集群级别和存储桶级别。在集群级别,扫描器将所有存储桶分成组,并一次扫描一组存储桶。扫描器从上次扫描后添加的任何新存储桶开始,然后对其他存储桶的扫描进行随机化。扫描器在开始新一组扫描之前,会完成对所有存储桶组的检查。

在存储桶级别,扫描器将存储桶中的项目分组,并从该存储桶中扫描选定的项目。扫描器根据对象名称的哈希值选择要扫描的对象。在 16 次扫描范围内,MinIO 检查名称空间中的每个对象。MinIO 会完全扫描自上次扫描以来已知为新添加的任何前缀。

扫描长度

有多个因素会影响扫描完成所需的时间。

其中一些因素包括

  • 提供给 MinIO 的驱动器类型

  • 吞吐量和 IOPS 可用

  • 对象的数量和大小

  • MinIO 服务器上的其他活动

例如,默认情况下,MinIO 会暂停扫描器,以便为读写请求提供 I/O 操作。这会延长扫描完成所需的时间。

MinIO 在每次扫描之间等待的时间,是每次扫描操作完成所需时间的倍数。默认情况下,此倍数的值为 10.0,这意味着 MinIO 在一次扫描完成后,会等待 10 倍于操作时间,然后才开始下一次扫描。此倍数的值会根据已配置的 扫描器速度设置 而变化。

扫描器性能

许多因素会影响扫描器性能。其中一些因素包括

  • 可用的节点资源

  • 集群的大小

  • 擦除集的数量与驱动器数量的比较

  • 存储桶层次结构的复杂程度(对象和前缀)。

例如,一个从 100TB 数据开始,然后增长到 200TB 数据的集群,可能需要更多时间才能扫描整个存储桶和对象名称空间,前提是硬件和工作负载相同。同样,单个包含 16 个驱动器的擦除集,比相同数量的驱动器分成两个包含 8 个驱动器的擦除集,需要更长的时间才能扫描。

MinIO 将扫描器视为后台任务,并暂停它,以支持完成集群上的读写请求。随着集群或工作负载的增加,扫描器性能会下降,因为它会更频繁地让步,以确保正常 S3 操作的优先级。

您可以使用 MINIO_SCANNER_SPEED 环境变量或 scanner speed 配置设置来调整 MinIO 如何平衡扫描器性能与读写操作。

扫描器指标

MinIO 提供了许多与扫描器相关的 指标

使用 mc admin scanner info 查看扫描器的当前状态以及上次完整扫描的时间。这有助于理解扫描器操作提供的指标。

扫描器指标(包括使用指标)反映了上次完成的扫描。 PUTDELETE 操作自上次扫描后不会更新使用情况,直到下次扫描受影响的存储桶。

输出类似于以下内容

Overall Statistics
------------------
Last full scan time:   0d0h14m; Estimated 2885.28/month
Current cycle:         70464; Started: 2024-04-19 20:02:34.568479139 +0000 UTC
Active drives:         2

Last Minute Statistics
----------------------
Objects Scanned:       620 objects; Avg: 124.929µs; Rate: 892800/day
Versions Scanned:      620 versions; Avg: 2.801µs; Rate: 892800/day
Versions Heal Checked: 0 versions; Avg: 0ms
Read Metadata:         621 objects; Avg: 88.416µs, Size:
ILM checks:            656 versions; Avg: 663ns
Check Replication:     656 versions; Avg: 1.061µs
Verify Deleted:        0 folders; Avg: 0ms
Yield:                 3.086s total; Avg: 4.705ms/obj