硬盘故障恢复
MinIO 支持对故障硬盘进行热插拔,用新的健康硬盘替换。MinIO 会检测并修复这些硬盘,无需重启任何节点或整个部署。 MinIO 修复 仅在被替换的硬盘上进行,在大多数情况下对部署性能的影响微乎其微或可以忽略不计。
MinIO 修复可确保恢复到硬盘上的所有数据的一致性和正确性。
驱动器的独占访问
MinIO 要求对提供给对象存储的驱动器或卷进行独占访问。任何其他进程、软件、脚本或个人都不应直接对提供给 MinIO 的驱动器或卷,或者 MinIO 放置在它们上面的对象或文件执行任何操作。
除非得到 MinIO 工程团队的指示,否则不要使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个。这类操作极有可能导致大范围的损坏和数据丢失,超出 MinIO 的修复能力。
以下步骤提供了更详细的硬盘更换流程。这些步骤假设 MinIO 部署中的每个节点都按照文档化的先决条件,使用 /etc/fstab 和每个硬盘的卷标来管理硬盘。
1) 卸载故障硬盘
使用 umount 卸载每个故障硬盘。例如,以下命令卸载位于 /dev/sdb 的硬盘。
umount /dev/sdb
2) 更换故障硬盘
从节点硬件上移除故障硬盘,并用已知的健康硬盘替换。更换的硬盘必须满足以下要求:
已格式化为 XFS 并且为空。
硬盘类型相同(例如 HDD、SSD、NVMe)。
性能相等或更高。
容量相等或更大。
使用容量更大的替换硬盘不会增加集群的总存储空间。MinIO 使用服务器池中最小硬盘的容量作为所有硬盘的容量上限。
以下命令将一个硬盘格式化为 XFS,并为其分配一个与故障硬盘相匹配的卷标。
mkfs.xfs /dev/sdb -L DRIVE1
MinIO 强烈建议 使用基于卷标的挂载方式,以确保硬盘顺序在系统重启后保持一致。
3) 检查并更新 fstab
检查 /etc/fstab 文件,并根据需要进行更新,使故障硬盘的条目指向新格式化的替换硬盘。
如果使用基于卷标的硬盘分配方式,请确保每个卷标都指向正确的新格式化硬盘。
如果使用基于 UUID 的硬盘分配方式,请根据新格式化的硬盘更新每个挂载点的 UUID。您可以使用
lsblk查看硬盘的 UUID。
例如,考虑以下情况:
$ cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
LABEL=DRIVE1 /mnt/drive1 xfs defaults,noatime 0 2
LABEL=DRIVE2 /mnt/drive2 xfs defaults,noatime 0 2
LABEL=DRIVE3 /mnt/drive3 xfs defaults,noatime 0 2
LABEL=DRIVE4 /mnt/drive4 xfs defaults,noatime 0 2
注意
依赖于挂载外部存储的云环境实例,如果一个或多个远程文件挂载返回错误或失败,可能会遇到启动失败。例如,一个挂载了持久性 EBS 卷的 AWS ECS 实例,如果一个或多个 EBS 卷挂载失败,使用标准的 /etc/fstab 配置可能会导致启动失败。
您可以设置 nofail 选项来屏蔽启动时的错误报告,并允许实例在存在一个或多个挂载问题的情况下启动。
对于具有本地连接磁盘的系统,您不应使用此选项,因为屏蔽硬盘错误会阻止 MinIO 和操作系统以正常方式响应这些错误。
对于前面的示例命令,无需对 fstab 进行任何更改,因为位于 /mnt/drive1 的替换硬盘与故障硬盘使用了相同的卷标 DRIVE1。
4) 重新挂载更换后的硬盘
使用 mount -a 重新挂载在本流程开始时卸载的硬盘。
mount -a
该命令应导致所有被替换的硬盘被重新挂载。
5) 监控 MinIO 的硬盘检测和修复状态
对于由 systemd 管理的安装,使用 mc admin logs 命令或 journalctl -u minio 来监控重新挂载硬盘后的服务器日志输出。输出应包含识别每个已格式化空硬盘的消息。
使用 mc admin heal 来监控部署的整体修复状态。MinIO 会积极修复被替换的硬盘,以确保从降级状态快速恢复。
6) 后续步骤
监控集群是否出现进一步的硬盘故障。某些批次的硬盘可能会在相近的时间内接连发生故障。对于硬盘故障率高于预期的部署,应安排专门的维护来更换已知有问题的批次。可以考虑使用 MinIO SUBNET 与 MinIO 工程团队协作,以获得任何此类操作的指导。