可用性和弹性
本页从生产的角度概述了 MinIO 的可用性和弹性设计以及功能。
注意
本页内容旨在尽力而为地指导您了解 MinIO 预期的设计和可用性与弹性背后的理念。它不能取代 MinIO SUBNET 的功能,该功能允许在规划 MinIO 部署时与 MinIO 工程团队协调。
社区用户可以在 MinIO 社区 Slack 上寻求支持。社区支持仅以尽力而为的方式提供,对响应能力没有 SLA。
分布式 MinIO 部署
- MinIO 实施 擦除编码 作为在驱动器或节点级故障事件期间提供可用性和弹性的核心组件。
MinIO 将每个对象划分为数据和 奇偶校验 分片,并将这些分片分布在一个 擦除集 中。
此小型单节点部署在一个擦除集中有 16 个驱动器。假设默认 奇偶校验 为
EC:4
,MinIO 将对象划分为 4(四个)奇偶校验分片和 12(十二个)数据分片。MinIO 将这些分片均匀地分布在擦除集中的每个驱动器上。- MinIO 使用确定性算法为给定对象选择擦除集。
对于每个唯一的对象命名空间
BUCKET/PREFIX/[PREFIX/...]/OBJECT.EXTENSION
,MinIO 始终为读/写操作选择相同的擦除集。这包括该同一对象的 所有版本。- MinIO 需要 读和写配额 才能对擦除集执行读和写操作。
配额取决于部署配置的奇偶校验。读配额始终等于配置的奇偶校验,以便 MinIO 可以对任何没有丢失超过奇偶校验的驱动器的擦除集执行读操作。
使用默认奇偶校验
EC:4
,部署可以容忍每个擦除集中 4(四个)驱动器的丢失,并且仍然可以提供读操作。- 写配额取决于配置的奇偶校验和擦除集的大小。
如果奇偶校验小于擦除集驱动器数量的 1/2(一半),则写配额等于奇偶校验,并且功能类似于读配额。
MinIO 会自动增加写入退化擦除集的对象的奇偶校验,以确保对象可以满足与健康擦除集中的对象相同的 SLA。奇偶校验升级行为提供额外的风险缓解层,但不能替代修复或更换损坏的驱动器以使擦除集恢复到完全健康状态的长期解决方案。
此节点有两个硬盘发生故障。MinIO 使用升级后的奇偶校验
EC:6
来写入对象,以确保此对象满足与其他对象相同的 SLA。使用默认奇偶校验
EC:4
,部署可以容忍每个擦除集丢失 4 个硬盘,并且仍然可以提供写入操作。- 如果奇偶校验等于擦除集硬盘数量的一半,则写入仲裁数等于奇偶校验加 1(一个),以避免由于“脑裂”场景导致的数据不一致。
例如,如果由于网络故障,擦除集中的恰好一半硬盘被隔离,MinIO 将认为仲裁数丢失,因为它无法为写入操作建立 N+1 个硬盘组。
此节点有 50% 的硬盘发生故障。如果奇偶校验是
EC:8
,此擦除集无法满足写入仲裁数,MinIO 会拒绝向该集进行写入操作。由于擦除集仍然保持读取仲裁数,因此对现有对象的读取操作仍然可以成功。- 永久丢失的硬盘数量超过配置的奇偶校验的擦除集会发生数据丢失。
对于最大奇偶校验配置,如果硬盘丢失数量等于奇偶校验,则擦除集将进入“只读”模式。对于 16 的最大擦除集大小和 8 的最大奇偶校验,这将需要丢失 9 个硬盘才会发生数据丢失。
此擦除集丢失的硬盘数量超过配置的奇偶校验
EC:4
,因此已经丢失了读取和写入仲裁数。MinIO 无法恢复存储在此擦除集上的任何数据。瞬时或临时硬盘故障(例如由于存储控制器或连接硬件故障)可能会恢复到擦除集中的正常运行状态。
- MinIO 通过在池中的每个节点上对称地“条带化”擦除集硬盘来进一步降低擦除集故障的风险。
MinIO 会根据节点和硬盘数量自动计算最佳擦除集大小,其中最大集大小为 16(十六)。然后,它会选择池中每个节点的一个硬盘来填充每个擦除集,如果擦除集条带大小大于节点数量,则会循环选择。这种拓扑结构可以抵御单个节点甚至该节点上的存储控制器故障。
在此 16 x 8 部署中,MinIO 将计算 8 个擦除集,每个集有 16 个硬盘。它会在可用节点上分配每个节点一个硬盘来填充每个擦除集。如果有 8 个节点,MinIO 则需要为每个擦除集选择每个节点 2 个硬盘。
在上述拓扑结构中,池有 8 个擦除集,每个集有 16 个硬盘,这些硬盘跨 16 个节点条带化。每个节点将分配一个硬盘到每个擦除集。尽管丢失一个节点在技术上会导致丢失 8 个硬盘,但每个擦除集只会丢失一个硬盘。这在节点停机期间仍然可以保持仲裁数。
- 每个擦除集都独立于同一个池中的所有其他擦除集。
如果一个擦除集完全降级,MinIO 仍然可以对其他擦除集执行读取/写入操作。
一个池有一个降级的擦除集。尽管 MinIO 无法再对此擦除集提供读取/写入操作,但它可以继续对该池中的健康擦除集提供操作。
但是,丢失的数据仍然会影响依赖于 100% 数据可用性的工作负载。此外,每个擦除集都完全独立于其他擦除集,因此您无法使用其他擦除集将数据恢复到完全降级的擦除集。您必须使用 站点 或 存储桶 复制来创建用于恢复丢失数据的 BC/DR 就绪远程部署。
- 对于多池 MinIO 部署,每个池都需要至少一个保持读取/写入仲裁数的擦除集才能继续执行操作。
如果一个池丢失了所有擦除集,MinIO 就无法再确定给定的读取/写入操作是否将路由到该池。因此,MinIO 会停止对部署的所有 I/O 操作,即使其他池仍然处于运行状态。
此部署中的一个池已完全失效。MinIO 无法再确定要将 I/O 路由到哪个池或擦除集。继续操作可能会产生一个不一致的状态,其中一个对象及其版本位于不同的擦除集中。因此,MinIO 会在池恢复之前停止部署中的所有 I/O 操作。
要恢复对部署的访问,管理员必须将池恢复到正常运行状态。这可能需要根据故障的严重程度来格式化磁盘、更换硬件或更换节点。有关更完整的文档,请参阅 硬件故障后的恢复。
使用复制的远程服务器将丢失的数据恢复到部署。存储在健康池中的所有数据都将安全地保存在磁盘上。
对硬盘的独占访问
MinIO **需要** 对用于对象存储的硬盘或卷进行独占访问。其他进程、软件、脚本或人员不应直接对提供给 MinIO 的硬盘或卷,或者 MinIO 放置在其上的对象或文件执行任何操作。
除非 MinIO 工程师指示,否则不要使用脚本或工具直接修改、删除或移动提供给硬盘上的任何数据分片、奇偶校验分片或元数据文件,包括从一个硬盘或节点移动到另一个硬盘或节点。此类操作很可能会导致大范围的损坏和数据丢失,超出 MinIO 的修复能力。
复制的 MinIO 部署
- MinIO 实现 站点复制 作为在 MinIO 部署中发生大规模或小规模数据丢失的情况下确保业务连续性和灾难恢复 (BC/DR) 的主要措施。
每个对等站点都部署到独立的数据中心,以提供对大规模故障或灾难的保护。如果一个数据中心完全脱机,客户端可以故障转移到另一个站点。
- MinIO 复制可以自动 修复 由于瞬时或持续停机导致部分或全部数据丢失的站点。
数据中心 2 已关闭,站点 B 需要重新同步。负载均衡器处理路由操作到数据中心 1 的站点 A。站点 A 持续将数据复制到站点 B。
所有数据同步后,您可以恢复该站点的正常连接。根据复制延迟、站点之间的延迟和整体工作负载 I/O,您可能需要暂时停止写入操作,以允许站点完全赶上。
如果对等站点完全失效,您可以完全从配置中删除该站点。负载均衡器配置也应删除该站点,以避免将客户端请求路由到脱机站点。
然后,您可以通过 将其添加回站点复制配置 来恢复对等站点,无论是修复原始硬件还是完全更换硬件。MinIO 会自动开始重新同步现有数据,同时持续复制新数据。
- 站点可以在重新同步期间继续处理操作,方法是将
GET/HEAD
请求代理到健康的对等站点 站点 B 没有请求的对象,可能是由于复制延迟。它会将
GET
请求代理到站点 A。站点 A 返回对象,然后站点 B 将对象返回给请求的客户端。客户端接收来自第一个对等站点的结果以返回请求对象的任何版本。
PUT
和DELETE
操作使用常规复制过程进行同步。LIST
操作不会代理,并且要求客户端专门针对健康的对等方发出这些操作。