对象自愈
什么是自愈?
自愈是 MinIO 恢复受损、损坏或部分丢失对象的能力。 这类丢失或损坏可能来自多种情况,包括但不限于:
- 驱动器级错误或故障
- 操作系统或文件系统错误或故障
- bit rot
自愈与纠删码
MinIO 恢复受损对象的能力,直接取决于以下因素:
对象所在 纠删码集合 的驱动器总数
保留对象完整分片的可用驱动器数量
该纠删码集合的 校验设置
Parity 指 MinIO 在写入对象时创建的专用恢复分片数量。 例如,一个纠删码集合可能总共有 8 块驱动器,其中 3 块用于校验。 在这种情况下,MinIO 会把对象拆分为 5 个数据分片和 3 个校验分片。 MinIO 会将这 8 个分片分布到纠删码集合中的各块驱动器上。 不会有某一块驱动器只包含校验分片或只包含数据分片。 相反,MinIO 会以随机化方式写入每个对象的分片,以便将读取均匀分散到各块驱动器上。
当 MinIO 需要返回该对象时,它会查找对象对应的数据分片。 如果某些数据分片丢失或损坏,MinIO 会使用一个或多个校验分片来恢复对象。 如果在查找校验分片时发现某些校验分片也丢失或损坏,只要仍有足够的其他分片可供返回对象,MinIO 也会一并恢复这些校验分片。 在上述场景中,即使最多有 3 个数据分片丢失或损坏,MinIO 仍然可以成功恢复并返回该对象。
保留对象完整数据分片或校验分片的可用驱动器数量,必须大于或等于该纠删码集合中用于数据分片的驱动器数量。 在上述场景中,至少需要 5 块保留完整分片的驱动器在线且可用,MinIO 才能成功返回该对象。
MinIO 何时对对象执行自愈?
MinIO 提供了一套健壮的对象自愈机制。
在 GET 请求期间自愈
每当你通过 GET 或 HEAD 请求对象时,MinIO 都会自动检查该对象数据分片的一致性。 对于启用了版本控制的存储桶,MinIO 在 PUT 操作期间也会执行一致性检查。
如果所有数据分片都完好无损,MinIO 会直接从数据分片返回对象,而不会检查对应的校验分片。
如果对象存在丢失或损坏的数据分片,MinIO 会先使用可用的校验分片对对象执行自愈,然后再作为本次操作的一部分返回。 每个丢失或损坏的数据分片都必须有一个完好的校验分片可用,否则对象无法恢复。 如果某些校验分片丢失或损坏,只要仍有足够的其他校验分片可用于返回对象,MinIO 也会恢复这些校验分片。
通过对象扫描器自愈
MinIO 使用 对象扫描器 执行多项与对象相关的任务。 其中一项任务就是检查对象完整性,并在发现损坏或损毁时执行自愈。
在每一轮扫描中,MinIO 会根据对象名称的哈希值,从每 1,024 个对象中选择 1 个进行检查。
如果发现对象存在分片丢失,MinIO 会使用可用分片对对象执行自愈。 默认情况下,MinIO 不会 使用扫描器检查 bit rot 损坏。 这类操作的成本较高,而多个磁盘同时发生 bit rot 的概率较低。
通过手动请求自愈
管理员可以使用 mc admin heal 发起一次全系统自愈。 该过程会大量消耗资源,通常并非必需。
在部署上手动启动自愈流程之前,请先与 MinIO 工程师沟通。
自愈指标
MinIO 提供了若干 自愈指标,用于监控部署中的自愈过程状态。
有关可用 endpoint 和配置的更多信息,请参阅 指标与告警。
本页部分内容改编自 MinIO 对象存储文档,© 2020–至今 MinIO, Inc.,依据 CC BY 4.0 授权,由 Silo 项目转换与维护。归属与署名
本页为非官方中文翻译。如与英文原文有出入,以英文原文为准。