对象扫描器
概述
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
查看扫描程序的当前状态以及上次完整扫描的时间。这有助于理解扫描程序操作提供的指标。
扫描程序指标(包括使用指标)反映了上次完成的扫描。自上次扫描以来的 PUT
或 DELETE
操作不会在使用情况中更新,直到下次扫描受影响的存储桶。
输出类似于以下内容
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