文档

核心操作概念

MinIO 部署的组件是什么?

MinIO 部署包含一组存储和计算资源,这些资源运行一个或多个 minio server 节点,这些节点共同充当单个对象存储库。

MinIO 的独立实例包含一个服务器池,其中包含一个 minio server 节点。独立实例最适合于初始开发和评估。

MinIO 部署可以直接在 裸机 或非虚拟化基础设施中的物理设备上运行。或者,MinIO 可以在云服务上的虚拟机中运行,例如使用 Docker、Podman 或 Kubernetes。MinIO 可以在本地、私有云或市场上提供的许多公有云中运行。

您设计、架构和构建系统的方式称为系统的 拓扑

MinIO 支持哪些系统拓扑?

MinIO 可以部署到三种拓扑类型

  1. 单节点单驱动器,一个 MinIO 服务器,只有一个驱动器或文件夹用于数据

    例如,在本地 PC 上使用计算机硬盘驱动器上的文件夹进行测试。

  2. 单节点多驱动器,一个 MinIO 服务器,有多个挂载的驱动器或文件夹用于数据

    例如,单个容器,其中挂载了两个或多个卷。

  3. 多节点多驱动器,多个 MinIO 服务器,有多个挂载的驱动器或卷用于数据

    例如,使用 Kubernetes 管理和部署 pod 及其相关持久卷声明的生产部署。

分布式 MinIO 部署如何工作?

分布式部署利用了多个物理或虚拟机的计算和存储资源。在现代情况下,这通常意味着在私有云或公有云环境中运行 MinIO,例如使用 Amazon Web Services、Google Cloud Platform、Microsoft 的 Azure 平台或许多其他平台。

MinIO 如何管理多个虚拟或物理服务器?

虽然测试 MinIO 可能只涉及一台计算机上的单个驱动器,但大多数生产 MinIO 部署使用多个计算和存储设备来创建高可用性环境。服务器池是一组 minio server 节点,它们将自己的驱动器和资源汇集在一起以支持对象存储写入和检索请求。

MinIO 支持将一个或多个服务器池添加到现有 MinIO 部署中以进行横向扩展。当 MinIO 可用多个服务器池时,单个对象始终写入同一服务器池中的同一擦除集。

如果一个服务器池宕机,MinIO 会停止对所有池的 I/O,直到集群恢复正常运行。您必须将池恢复到工作状态才能恢复对部署的 I/O。在执行修复操作时,写入其他池的对象会安全地保留在磁盘上。

传递给 minio server 命令的 HOSTNAME 参数代表一个服务器池。

考虑以下示例启动命令,它创建一个包含 4 个 minio server 节点的单个服务器池,每个节点有 4 个驱动器,总共 16 个驱动器。

minio server https://minio{1...4}.example.net/mnt/disk{1...4}

             |                    Server Pool                |

在同一个 minio server 启动命令中启动服务器池可以使所有服务器池对等节点都感知到。

有关完整的语法和用法,请参见 minio server

我可以更改现有 MinIO 部署的大小吗?

MinIO 分布式部署 支持扩展和停用作为增加或减少可用存储的功能。

扩展包括向现有部署添加一个或多个 服务器池。每个服务器池包含专用节点和存储,它们有助于提高部署的整体容量。创建服务器池后,您无法更改其大小,但可以通过添加或停用池来随时添加或删除容量。

有关更多信息,请参见 扩展 MinIO 租户

对于包含多个服务器池的部署,您可以 停用 旧池并将该数据迁移到部署中的新池。一旦开始,停用就不能停止。MinIO 旨在将停用用于移除带有老化硬件的旧池,而不是作为定期在任何部署中执行的操作。

在停用和添加时保持池顺序

如果您在多池部署中停用一个池,您无法使用相同的节点序列来创建新池。例如,考虑具有以下池的部署

https://minio-{1...4}.example.net/mnt/drive-{1...4}
https://minio-{5...8}.example.net/mnt/drive-{1...4}
https://minio-{9...12}.example.net/mnt/drive-{1...4}

如果您停用 minio-{5...8} 池,您无法添加具有相同节点编号的新池。您必须在 minio-{9...12} 之后添加新池

https://minio-{1...4}.example.net/mnt/drive-{1...4}
https://minio-{9...12}.example.net/mnt/drive-{1...4}
https://minio-{13...16}.example.net/mnt/drive-{1...4}

如何管理一个或多个 MinIO 实例或集群?

有多种方法可以管理您的 MinIO 部署和集群

如何管理跨 MinIO 部署的对象分布?

MinIO 通过将新对象(即没有现有版本的对象)写入与所有可用服务器池上的总可用空间相比可用空间最多的服务器池来优化跨可用池的对象存储。MinIO 不会执行从旧池到新池重新平衡对象的代价高昂的操作。相反,新对象通常会路由到新池,因为它拥有最多的可用空间。随着该池的填充,新的写入操作最终会在部署中的所有池之间平衡。有关写入偏好计算逻辑的更多信息,请参见下面的 写入文件

扩展后跨所有池重新平衡数据是一项昂贵的操作,需要扫描整个部署并在池之间移动对象。根据要移动的数据量,这可能需要很长时间才能完成。

从 MinIO 客户端版本 RELEASE.2022-11-07T23-47-39Z 开始,您可以使用 mc admin rebalance 手动启动跨所有服务器池的重新平衡操作。

重新平衡不会阻止正在进行的操作,并且与所有其他 I/O 并行运行。这可能会导致常规操作的性能降低。考虑在非高峰时段安排重新平衡操作,以避免影响生产工作负载。您可以随时启动和停止重新平衡

如何将对象上传到 MinIO?

您可以使用任何与 S3 兼容的 SDK 将对象上传到 MinIO 部署。每个 SDK 都执行与 PUT 操作等效的操作,该操作将对象传输到 MinIO 以进行存储。

MinIO 还实现了对 分段上传 的支持,客户端可以将对象拆分为多个部分,以提高传输的吞吐量和可靠性。MinIO 会重新组装这些部分,直到它拥有一个完整对象,然后将该对象存储在指定路径中。

MinIO 如何提供可用性、冗余性和可靠性?

MinIO 使用 擦除编码 来实现数据冗余和可靠性

MinIO 擦除编码是一种数据冗余和可用性功能,它允许具有多个驱动器的 MinIO 部署在集群中即使丢失多个驱动器或节点也能自动动态重建对象。擦除编码提供了对象级 修复,其开销远小于 RAID 或复制等相邻技术。

MinIO 实施了位腐烂修复来保护静止数据

位腐烂是任何存储设备上可能发生的随机、无声的数据损坏。位腐烂损坏不是由用户的任何活动引起的,系统操作系统本身也不知道损坏,也无法通知用户或管理员有关数据更改。

位腐烂的一些常见原因包括

  • 驱动器老化

  • 电流尖峰

  • 驱动器固件中的错误

  • 幽灵写入

  • 错误的读/写

  • 驱动程序错误

  • 意外覆盖

MinIO 使用哈希算法来确认对象的完整性。该算法在对对象执行任何 GETHEAD 操作时会自动应用。对于版本化的存储桶中的对象,PUT 操作也可以在 MinIO 识别出版本不一致时触发修复。如果对象因位腐烂而损坏,MinIO 可以根据对象奇偶校验分片的可用性自动 修复 对象。

MinIO 也可以使用 MinIO 扫描器 执行位腐烂检查和修复。但是,扫描器位腐烂检查默认情况下是 **关闭** 的。与低概率的位腐烂影响跨多个驱动器和节点分布的多个对象分片相比,扫描器期间的主动位腐烂修复对性能有很大影响。正常操作期间的自动检查通常足以解决位腐烂问题,MinIO 不建议将扫描器用于此类健康检查。

MinIO 将数据分布在 擦除集 中,以实现高可用性和弹性

擦除集是一组支持 MinIO 擦除编码 的多个驱动器。擦除编码提供了存储在 MinIO 部署中的数据的 高可用性、可靠性和冗余。

MinIO 将对象划分为块——称为 分片——并将它们均匀分布在擦除集中的每个驱动器上。即使丢失任何一个驱动器,MinIO 也可以继续无缝地处理读写请求。在最高冗余级别,MinIO 可以处理读请求,即使在部署中丢失了高达一半 (\(N / 2\)) 的驱动器,性能影响也很小。

MinIO 根据服务器池中的驱动器总数和 minio 服务器数量来计算服务器池中擦除集的大小和数量。有关更多信息,请参见 擦除编码基础

MinIO 自动动态修复损坏或丢失的数据

修复 是 MinIO 在某些事件导致数据丢失后恢复数据的能力。数据丢失可能是由于位腐烂、驱动器丢失或节点丢失造成的。

擦除编码 提供了持续的读写访问,即使对象部分丢失。

对驱动器的独占访问

MinIO **需要** 对为对象存储提供的驱动器或卷进行独占访问。任何其他进程、软件、脚本或人员都不得对提供给 MinIO 的驱动器或卷,或 MinIO 放置在其上的对象或文件执行任何操作。

除非 MinIO 工程师指示,否则不要使用脚本或工具直接修改、删除或移动提供的驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点到另一个驱动器或节点。此类操作很可能会导致大范围的损坏和数据丢失,超出了 MinIO 的修复能力。

MinIO 使用奇偶校验在对象级别写入数据保护

具有多个驱动器的 MinIO 部署将可用驱动器划分为数据驱动器和奇偶校验驱动器。MinIO 擦除编码在写入对象时将有关对象内容的附加哈希信息添加到奇偶校验驱动器。MinIO 使用奇偶校验信息来确认对象的完整性,并在必要时恢复给定驱动器或一组驱动器上丢失、丢失或损坏的对象分片。

MinIO 可以容忍丢失与擦除集中可用奇偶校验设备数量相同的驱动器总数,同时仍提供对对象的完全访问权限。

使用法定人数提供读写功能

必须可用的最小驱动器数量才能执行任务。MinIO 对读取数据有一个法定人数,对写入数据有一个单独的法定人数。

通常,MinIO 要求更多可用的驱动器才能维护写入对象的能力,而不是读取对象所需的驱动器数量。