核心操作概念
MinIO 部署包含哪些组件?
一个MinIO部署包含一组运行一个或多个实例的存储和计算资源minio server共同作为单一对象存储仓库运行的节点。
一个独立的MinIO实例包含一个具有单个服务器的服务器池minio servernode.
独立实例最适合初始开发和评估。
MinIO部署可以直接在物理设备上运行,bare metal或者在非虚拟化基础设施上运行。
或者,MinIO 可以在云服务的虚拟机中运行,例如使用 Docker、Podman 或 Kubernetes。
MinIO 可以在本地运行、在私有云中运行,或者在市场上任何可用的公有云中运行。
你设计、架构和构建系统的具体方式被称为系统的topology.
MinIO 支持哪些系统拓扑?
MinIO 可以部署到三种类型的拓扑结构中:
分布式 MinIO 部署是如何工作的?
分布式部署利用多台物理或虚拟机的计算和存储资源。 在现代场景中,这通常意味着在私有云或公有云环境中运行MinIO,例如在亚马逊网络服务、谷歌云平台、微软Azure平台或许多其他云平台中。
MinIO 如何管理多个虚拟或物理服务器?
虽然测试 MinIO 可能只涉及单台计算机上的单个驱动器,但大多数生产环境的 MinIO 部署会使用多个计算和存储设备来创建高可用性环境。
服务器池是一组minio server汇集其驱动器和资源以支持对象存储写入和检索请求的节点。
MinIO 支持向现有 MinIO 部署添加一个或多个服务器池以实现水平扩展。 当 MinIO 有多个服务器池可用时,单个对象始终写入同一服务器池中的同一纠删码组。
如果一个服务器池发生故障,MinIO将暂停对所有池的I/O操作,直到集群恢复正常运行。 您必须将该池恢复至正常工作状态,才能重新启用部署的I/O功能。 在执行修复操作期间,写入其他池的对象将安全保留在磁盘上。
TheHOSTNAME传递给minio servercommand 代表一个服务器池:
考虑以下示例启动命令,它创建了一个包含4个minio server4个驱动器组成的节点,总共16个驱动器。
minio server https://minio{1...4}.example.net/mnt/disk{1...4}
| Server Pool |
在同一位置启动服务器池minio serverstartup 命令启用对所有服务器池对等节点的感知。
看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分布式部署支持扩容和下线功能,以增加或减少可用存储容量。
扩展包括添加一个或多个服务器池添加到现有部署中。 每个服务器池由专用节点和存储组成,这些资源共同构成部署的总容量。 创建服务器池后,您无法更改其大小,但可以通过添加或停用池来随时增加或减少容量。
看Baremetal: 扩展 MinIO 部署和Kubernetes: Expand a MinIO Tenant有关裸机和 Kubernetes 基础设施中扩展的更多信息。
对于具有多个服务器池的部署,您可以退役较旧的存储池并将该数据迁移到部署中的较新存储池。 一旦开始,停用操作无法停止。 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 Client 版本 RELEASE.2022-11-07T23-47-39Z 开始,您可以使用以下命令在所有服务器池中手动启动重新平衡操作:mc admin rebalance.
再平衡不会阻塞正在进行的操作,并且与所有其他I/O并行运行。 这可能导致常规操作性能下降。 建议在非高峰时段安排再平衡操作,以避免影响生产工作负载。 您可以随时启动和停止再平衡操作。
如何将对象上传到 MinIO?
您可以使用任何与S3兼容的SDK将对象上传到MinIO部署。 每个SDK执行相当于PUT操作的功能,将对象传输到MinIO进行存储。
MinIO 还实现了对multipart uploads在 MinIO 中,客户端可以将一个对象分割成多个部分,以提高传输的吞吐量和可靠性。 MinIO 会重新组装这些部分,直到形成一个完整的对象,然后将该对象存储到指定路径。
MinIO 如何提供可用性、冗余和可靠性?
MinIO 用途擦除编码用于数据冗余和可靠性
MinIO Erasure Coding 是一种数据冗余和可用性功能,它允许配备多块硬盘的 MinIO 部署在集群中多块硬盘或节点发生故障的情况下,仍能自动实时重建对象。 Erasure Coding 提供对象级愈合与RAID或复制等相邻技术相比,其开销显著降低。
MinIO 实现位衰减修复功能以保护静态数据
比特衰减是指存储设备上可能发生的随机、静默的数据损坏。 比特衰减损坏并非由用户的任何活动引发,而且仅凭系统操作系统也无法感知这种损坏,无法就数据变更向用户或管理员发出通知。
比特衰减的一些常见原因包括:
老化驱动器
电流尖峰
驱动器固件中的错误
phantom writes
错误定向的读取/写入
驱动程序错误
意外覆盖
MinIO 使用哈希算法来确认对象的完整性。
该算法在任何时候都会自动应用GET和HEAD对象操作。
对于版本化存储桶中的对象,PUT操作也可以在MinIO识别出版本不一致时触发修复。
如果对象因位衰减而损坏,MinIO可以自动治愈该对象取决于该对象的奇偶校验分片的可用性。
MinIO 还可以使用MinIO 扫描器然而,扫描仪位衰减检查是关闭默认情况下。 与比特衰减影响分布在多个驱动器和节点上的多个对象分片的低概率相比,扫描器期间的主动比特衰减修复具有较高的性能影响。 正常操作期间的自动检查通常足以应对比特衰减,MinIO 不建议使用扫描器进行此类健康检查。
MinIO 分布式数据存储Erasure Sets高可用性和弹性
一个擦除集是支持 MinIO 的多个驱动器的组合擦除编码Erasure Coding 为存储在 MinIO 部署上的数据提供高可用性、可靠性和冗余性。
MinIO 将对象划分为块——称为分片—并将它们均匀分布在纠删集中的每个驱动器上。 即使任何单个驱动器发生故障,MinIO 仍能继续无缝处理读写请求。 在最高冗余级别下,即使损失多达一半的驱动器,MinIO 仍能以最小性能影响处理读取请求。\(N / 2\)) 的部署驱动器总数。
MinIO根据服务器池中驱动器总数计算擦除集的大小和数量和数量minio集合中的服务器。请参阅擦除编码基础欲了解更多信息。
MinIO 自动实时修复损坏或丢失的数据
愈合MinIO 能够在发生导致数据丢失的事件后恢复数据。 数据丢失可能由比特衰减、驱动器故障或节点故障引起。
擦除编码如果对象部分丢失,提供持续的读写访问权限。
驱动器独占访问
MinIO需要 独家对象存储所提供的驱动器或卷的访问权限。 任何其他进程、软件、脚本或人员均不得执行任何直接对提供给 MinIO 的驱动器或卷,或 MinIO 置于其上的对象或文件执行操作。
除非得到 MinIO 工程团队指示,否则不得使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、校验分片或元数据文件,包括在不同驱动器或节点间的转移操作。 此类操作极有可能导致大范围损坏和数据丢失,超出 MinIO 的自我修复能力范围。
MinIO 在对象级别通过奇偶校验实现数据保护
具有多个驱动器的MinIO部署将可用驱动器划分为数据驱动器和校验驱动器。 MinIO纠删码在写入对象时,会向校验驱动器添加有关对象内容的额外哈希信息。 MinIO使用校验信息来确认对象的完整性,并在必要时恢复给定驱动器或驱动器组上丢失、缺失或损坏的对象分片。
MinIO 可以容忍丢失最多相当于擦除集中可用奇偶校验设备总数的驱动器数量,同时仍能完全访问对象。
提供具有仲裁机制的读写功能
执行任务必须可用的最小驱动器数量。 MinIO 有一个用于读取数据的仲裁机制和一个用于写入数据的独立仲裁机制。
通常,MinIO 需要更多可用驱动器来维持写入对象的能力,而读取对象所需的驱动器数量则相对较少。