MinIO 擦除码计算器的引导游览

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