MinIO 纠删码计算器导览
真正让 MinIO 大放异彩的核心功能之一是它无需任何专用硬件(如 RAID 控制器卡或冗余 SAN 集群)即可确保数据冗余和持久性的能力。事实上,我们的工程师建议在没有任何额外硬件 RAID 的情况下在具有快速驱动器的普通 JBOD 系统上安装 MinIO。只需让 MinIO 使用远比 RAID 更高效的纠删码来处理数据冗余、复制和可用性。
在这篇文章中,我们将讨论纠删码和纠删集,然后深入探讨如何在设计部署时使用纠删码计算器,通过从一开始就选择正确的硬件配置设置来充分利用 MinIO。
纠删码和纠删集
在之前的博文中,纠删码 101,我们讨论了纠删码并深入研究了它的实施和最佳实践。简而言之,最常见的硬件故障类型之一是驱动器损坏,过去工程师传统上不得不依赖硬件 RAID(甚至软件 RAID)来实现数据冗余和可用性。RAID 可以保护数据免受单个服务器上驱动器故障的影响,但是当您涉及一个独立的物理服务器集群时,每个服务器都需要在自己的节点上单独管理自己的 RAID 奇偶校验和冗余。硬件 RAID 的一大缺点是需要很长时间才能在新驱动器上从故障驱动器重建数据。对于今天的数据量,它实际上什至可能不可行,因为在大多数情况下重建单个 TB 很可能需要几天时间。在 PB 规模(在单个盒子中是可能的),它甚至可能无法完全重建。擦除编码确保不需要单独的硬件冗余,而是将数据文件拆分为数据和奇偶校验块并对它们进行编码,以便即使无法恢复部分编码数据,也可以恢复主要数据。纠删码能够实现与硬件 RAID 卡相同级别的容错能力,但通过不仅跨多个驱动器而且跨多个节点对其进行条带化,从而具有更高的效率和性能。
但什么是擦除集?擦除集基本上是一组驱动器,一个集群根据驱动器总数被分成一个或多个Erasure Sets。MinIO 将确保数据和奇偶校验块确定且均匀地分布在擦除集中的所有可用驱动器中。MinIO 自动计算条带大小(在 2 到 16 之间)。为部署设置奇偶校验是可用性和总可用存储之间的平衡。较高的奇偶校验值以可用存储为代价提高了对驱动器或节点故障的弹性,而较低的奇偶校验值提供了最大存储量,同时降低了对驱动器/节点故障的容忍度。使用 MinIO 纠删码计算器探索奇偶校验对您计划的集群部署的影响。虽然可以自定义集合大小和奇偶校验,但几乎总是建议使用 MinIO 默认值。
使用计算器
让我们开始使用纠删码计算器。只需为计算器提供可能的硬件和软件配置,它就会告诉您最终的容量和容错能力。

让我们看一下可以提供给计算器的一些参数,这些参数将为我们提供所需的命令行参数。
可以通过 MC 管理 CLI 工具设置奇偶校验设置。但是您也可以通过将奇偶校验设置作为配置变量作为环境变量或在 /etc/default/minio.conf 中传递来自定义奇偶校验设置。重申一下,新对象将采用新设置,旧对象保留旧设置,直到它们被重新上传或服务器端复制。
机架数量:对于更大的部署,MinIO 允许您配置机架数量,以便纠删码知道机架级别的奇偶校验,其中节点是本地的但在不同的机架中。
每个机架的服务器数量:通常,基本配置是单个机架,我们通常建议在该机架中安装多个服务器。
每台服务器的驱动器数量:我们建议每台服务器至少至少有 4 个驱动器。但这确实处于性能和容量范围的低端。虽然可以通过添加额外的服务器池来增加集群的大小,但这会增加正在进行的系统维护的额外复杂性,以及数据访问方式的细微差别,因为每个服务器池都是不同的 S3 API 端点。就驱动器而言,我们建议从一开始就构建尽可能强大的服务器。
驱动器容量:不仅驱动器的数量,每个驱动器的大小也很重要。每个驱动器的容量越大,需要添加到服务器的驱动器就越少,或者您可以通过用高容量驱动器填充服务器来最大化 MinIO 容量,以实现最佳存储配置。
纠删码条带大小:MinIO 将每个对象拆分为数据和奇偶校验块。条带大小(S)是数据块(K)和校验块(M)的总数,即S=K+M。
纠删码奇偶校验:更高的奇偶校验 (M) 以在驱动器或服务器发生故障时提高可用性和数据弹性为代价来降低存储效率。较低的奇偶校验 (M) 以提高的存储效率换取降低的可用性/弹性。
Usable Capacity:说完一切之后,这是可用于存储对象的实际可用容量。它还显示了原始容量以及为奇偶校验相关操作分配的空间的使用效率。
驱动器/服务器/机架故障容限:根据所选配置,计算器还会显示整个硬件堆栈中各个级别的故障容限。例如,在上面的示例中,服务器容忍度为 2,这意味着 8 台服务器中最多有 2 台可以在任何给定时间离线。在最大奇偶校验时,MinIO 最多可以容忍每个擦除集丢失一半的驱动器 ((N / 2) - 1),并且仍然执行读写操作。MinIO 默认为每个对象 4 个奇偶校验块,容忍每个擦除集丢失 4 个驱动器。
CLI 参数:这是您在 /etc/default/minio 中或作为容器环境变量的一部分添加到 `minio server` 命令末尾的最终配置字符串。
配置硬件
如您所见,您的团队需要考虑许多硬件参数,然后才能为您的应用程序部署正确的配置。因此,值得花一些时间简要了解您应该购买哪种硬件,以匹配您在计算器中选择的纠删码设置。
驱动器:由于这里的主要用例是存储,所以让我们从谈论驱动器开始。有许多不同类型的驱动器,每种驱动器在成本、性能和用例方面都有很大差异。通常,如果您在生产中使用 MinIO 集群作为基本对象存储,那么您可能应该考虑像 SSD 这样的东西,它可以在成本和性能之间取得良好的平衡。如果您正在处理超过一年的备份和存档数据,并且不经常查询,但它仍然需要可查询,尽管不是以闪电般的速度,那么它将被抽走并分层到更实惠的媒体。在这些情况下,您很可能会在归档层中使用简单的主轴 SATA HDD 以节省成本。这就是 MinIO 的美妙之处;它非常简单、灵活并且可以在无数硬件上运行。
NIC:在驱动之后,NIC 速度可能是需要考虑的最重要因素之一。由于数据可能会跨多个服务器存储,因此您需要确保服务器之间的数据传输速度尽可能快。1 Gbps 甚至 10 Gbps 以太网 NIC 的时代已经一去不复返了。如今,如果您真正想要顶级性能,则需要至少获得 25 Gbps 的速度,最好使用双 NIC 以增加冗余并隔离集群内流量。为了获得高性能,我们还推荐使用 100 Gbps NIC。
CPU:MinIO 具有很高的 CPU 效率,最多使用不到 20% 的 CPU 核心来执行 CPU 密集型任务,例如纠删码、加密、压缩和其他操作。话虽如此,请根据您的应用程序和用例做出决定。我们建议您至少获得一个具有 8 个 CPU 内核的 CPU,以获得最佳性能和一般操作。
内存:与 CPU 类似,MinIO 不是内存密集型应用程序,尽管在其各种操作过程中,它可能会突然需要大量内存,然后再放弃。建议通常为集群中的每台服务器分配 128GB 内存。
服务器/机架:MinIO 不仅推荐驱动级冗余,而且我们还推荐使用多台服务器将数据分布在物理节点和机架之间,作为保持高性能和高可用性的预防措施。商用服务器硬件已经取得了长足的进步,但服务器仍然会出现故障。尽管服务器故障比驱动器故障少得多,但它们仍然会发生,这有助于您在发生之前做好准备。
在最终确定您的硬件之前,请务必联系我们的工程团队,根据您的应用程序要求为您的集群提供最佳配置。
使用纠删码计算器的好处
如您所见,使用该计算器将极大地帮助您在构建集群的早期阶段。在 MinIO,我们总是说集群的初始配置是最关键的。如果您还不是我们的客户,我们可以在我们工程团队的指导下帮助您进行设计、架构和实施。如果您已经是客户,那么只需单击 MinIO 工程团队即可使用SUBNET帮助您设计最有效的集群设置计划。多年来,我们的工程师致力于配置多个集群,可以指导您根据您的最佳要求进行设置。
该计算器可以非常轻松地可视化集群拓扑、配置和可用的净可用容量,以确保您购买的硬件符合您的要求。如果您有任何问题,请务必在Slack上联系我们!