核心操作概念
MinIO 部署的组件有哪些?
MinIO 部署由一组存储和计算资源组成,这些资源运行一个或多个 minio server
节点,这些节点共同充当单个对象存储库。
MinIO 的独立实例包含一个具有单个 minio server
节点的服务器池。独立实例最适合初始开发和评估。
MinIO 部署可以直接在 裸机
或非虚拟化基础设施中的物理设备上运行。或者,MinIO 可以在云服务上的虚拟机中运行,例如使用 Docker、Podman 或 Kubernetes。MinIO 可以本地运行、在私有云上运行,或在市场上提供的众多公共云中的任何一个上运行。
您设计、架构和构建系统的方式称为系统的 拓扑结构
。
MinIO 支持哪些系统拓扑结构?
MinIO 可以部署到三种类型的拓扑结构
分布式 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 部署。
考虑以下创建集群的命令,该集群包含两个服务器池,每个服务器池有 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 分布式部署支持扩展和停用,作为增加或减少可用存储的功能。
扩展包括向现有部署添加一个或多个服务器池。每个服务器池都包含专用的节点和存储,这些节点和存储有助于提高部署的整体容量。创建服务器池后,您无法更改其大小,但您可以随时通过添加或停用池来添加或删除容量。
有关更多信息,请参阅扩展 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 使用哈希算法来确认对象的完整性。此算法在对对象执行任何GET
和HEAD
操作时自动应用。对于版本化存储桶中的对象,PUT
操作也可以触发修复,如果 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 具有一个用于读取数据的仲裁和一个用于写入数据的单独仲裁。
通常,与读取对象所需的驱动器数量相比,MinIO 需要更多数量的可用驱动器来保持写入对象的能力。