中文文档

核心运营概念

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中国提供商业技术支持和技术托底服务。

更安心的分布式环境,请联系电话:4008-566-339。

分布式的MinIO部署如何工作?

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

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

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

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

如果一个服务器池出现故障,MinIO会停止对所有池的I/O操作,直到集群恢复正常运作。您必须使池恢复正常操作以恢复对部署的I/O操作。 在执行修复操作时,其他池中写入的对象仍然安全保存在磁盘上。

HOSTNAME 参数传递给 minio server 表示服务器池:

考虑以下示例启动命令,该命令创建一个具有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部署。 考虑以下命令,该命令创建由两个服务器池组成的集群,每个服务器池具有4个 minio server 节点和每个节点4个驱动器,总共32个驱动器。

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

             |                    Server Pool                |

每个服务器池都有一个或多个 纠删码编码集合 ,具体取决于池中驱动器和节点的数量 。

为了确保高可用性和耐久性,MinIO强烈建议生产集群在服务器池中 最少 包含4个 minio server 节点。

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

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

扩展包括向现有部署添加一个或多 服务器池 。 每个服务器池都由专用节点和存储组成,这些节点和存储有助于提高部署的整体容量。 创建服务器池后,就不能更改其大小,但可以随时通过添加或退出服务器池来增加或移除容量。

请查看和阅读: Expand a MinIO Tenant 了解更多信息。

对于具有多个服务器池的部署,您可以 停用 旧池并将该数据迁移到部署中的较新池。 一旦开始,退役就无法停止。 MinIO 打算退役以用于删除具有老化硬件的旧池,而不是作为在任何部署中定期执行的操作。

Maintain pool order when decommissioning and then adding

如果在多池部署中停用一个池, 不能将相同的节点序列用于新池. 例如,考虑一个部署,其中有以下资源池:

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部署和集群:

  • 使用命令行空具 mc and mc admin

  • 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 重新组装这些部分,直到获得完整的对象,然后将该对象存储在指定的路径中。

经过10年,全世界都认可MinIO的可用性和稳定性,那么MinIO是如何保障高可用、冗余性和数据持久性的?

MinIO使用 Erasure Coding(纠删码) 保障数据的安全、冗余和持久性。

MinIO 纠删码是一种数据冗余和可用性功能,允许具有多个驱动器的 MinIO 部署自动动态重建对象,尽管集群中多个驱动器或节点丢失。 纠删码提供对象级 修复,其开销比 RAID 或复制等相邻技术要少得多。

MinIO使用腐位保护(Bit Rot)修复和保护静态数据

比特腐败是指可能发生在任何存储设备上的数据随机、静默损坏。 比特腐败不受用户的任何活动所促使,也不单单依赖于操作系统本身来识别并通知用户或管理员数据发生了更改。

常见的导致比特腐败的原因包括:

  • 设备老化

  • 电流突波

  • 磁盘固件错误

  • 幻写

  • 读/写方向错误

  • 驱动程序错误

  • 意外覆盖

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

MinIO还可以使用 MinIO扫描器 执行位旋转检查和修复。 然而,默认情况下扫描器的位旋转检查是 关闭 的。 在扫描器运行期间进行活跃的位旋转修复与位旋转影响分布在多个驱动器和节点上的多个对象片段的概率低相比,性能影响很大。 在正常操作期间的自动检查通常对于位旋转来说已经足够,MinIO不建议使用扫描器进行此类健康检查。

MinIO分布式数据保护请阅读 纠删码(Erasure Sets) 了解我们的高可用和数据保护策略。

纠删码的集合是一组支持 MinIO 的多个驱动器,可以查看参考: Erasure Coding(纠删码). 纠删码为 MinIO 部署上存储的数据提供高可用性、可靠性和冗余性。

MinIO 将对象划分为块(称为 分片 ),并将它们均匀地分布在纠删码集合中的每个驱动器中。 尽管丢失任何单个驱动器,MinIO 仍可以继续无缝地服务读写请求。 在最高冗余级别,MinIO 可以以最小的性能影响来处理读取请求,尽管部署中的总驱动器丢失了多达一半 (\(N / 2\)) 。 MinIO 根据集合中的驱动器总数 集合中的 minio 服务器数量来计算服务器池中纠删码集合的大小和数量。 请参考和阅读 纠删码(Erasure Coding)的基础知识 了解更多信息。

Exclusive access to drives

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

除非由MinIO工程部门指导,否则不要使用脚本或工具直接修改、删除或移动提供给MinIO的驱动器上的任何数据片段、校验片段或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。 这些操作很可能会导致广泛的数据损坏和丢失,超出了MinIO的修复能力。

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

修复(Healing) 是MinIO在某些事件导致数据丢失后恢复数据的能力。 数据丢失可能来自位损坏、驱动器丢失或节点丢失。

Erasure Coding(纠删码) 如果对象部分丢失,则提供持续的读写访问。

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

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

MinIO 可以容忍丢失最多等于纠删码集合中可用奇偶校验设备数量的驱动器总数,同时仍提供对对象的完全访问。

通过 Quorum 提供读写功能

执行任务必须可用的最小驱动器数量。 MinIO 有一个用于读取数据的仲裁和一个用于写入数据的单独仲裁。

通常,与读取对象所需的数量相比,MinIO 需要更多数量的可用驱动器来维持写入对象的能力。

Join Slack 商业支持购买咨询