硬件检查清单
在规划生产,分布式MinIO部署的硬件配置时,请使用以下检查清单。
需要考虑的因素
在为MinIO实现选择硬件时,请考虑以下因素:
- 启动时存储的数据量(以TB为单位) 
- 预计未来两年内数据大小的增长 
- 平均对象大小和数量 
- 数据保存的平均时间(以年为单位) 
- 部署的站点数量 
- 预期的桶(Bucket)数量 
生产环境硬件建议:
以下清单遵循 MinIO 的 推荐配置 用于生产部署。 提供的指导旨在作为一个基线,并不能取代 MinIO SUBNET 性能诊断、架构审查以及直接向工程团队提供的支持。
MinIO,就像任何分布式系统一样,从选择给定 服务器池 中所有节点相同的配置中受益。 确保在池节点之间选择一致的硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)。
如果节点具有不同的硬件或软件配置,部署可能会显示出不可预测的性能。 那些从将陈旧数据存储在成本较低的硬件中受益的工作负载,应该 instead 部署一个专门的 “warm” 或 “cold” MinIO 部署,并将数据 过渡 到那个层级。
MinIO does not provide hosted services or hardware sales
请访问我们的 参考硬件 页面,了解更多来自我们硬件合作伙伴精选的服务器和存储组件。
| 描述 | Minimum | Recommended | |
|---|---|---|---|
| 专门为MinIO租户服务的Kubernetes工作节点。 | 每个租户有4个工作节点。 | 每个租户有8+个工作节点。 | |
| 每个MinIO服务器pod有4个持久卷(Persistent Volumes, PVs)。 | 每个MinIO服务器pod有8+ 个持久卷(Persistent Volumes, PVs)。 | ||
| 25GbE | 100GbE | ||
| 服务器级CPU,支持现代SIMD指令(AVX-512),例如Intel® Xeon® 可扩展系列或更高级别。 | 每个MinIO Pod配备4个虚拟CPU(vCPU)。 | 每个MinIO Pod配备8+ 个虚拟CPU(vCPU)。 | |
| 可用的内存应满足或超过每个服务器的使用需求 并留有合理的缓冲区。 | 每个工作节点有32GB的可用内存。 | 每个工作节点有128GB+ 的可用内存。 | 
重要
以下因素对 MinIO 性能的影响最大,按重要性排序:
| Network Infrastructure | 有限的吞吐量会限制性能。 | 
|---|---|
| Storage Controller | 旧的固件、有限的吞吐量或故障的硬件会限制性能并影响可靠性。 | 
| Storage (Drive) | 旧的固件、缓慢/老化/故障的硬件会限制性能并影响可靠性。 | 
在考虑其他硬件资源,如计算相关的限制之前,应优先确保这些领域的必要组件的安全。
上述最小推荐反映了 MinIO 在协助企业客户在各种 IT 基础架构上部署时,同时保持所需的服务级别协议(SLA)/服务级别目标(SLO)的经验。 虽然 MinIO 可以在低于最低推荐拓扑的配置上运行,但任何潜在的成本节省都可能以牺牲可靠性、性能或整体功能为代价。
网络
MinIO建议使用高速网络来支持所连接存储设备(集合驱动器、存储控制器和PCIe总线)的最大吞吐量。以下表格提供了给定物理或虚拟网络接口支持的最大存储吞吐量的一般指导线。 此表格假定所有网络基础架构组件,如路由器、交换机和物理电缆,也支持NIC带宽。
| 网卡带宽 (Gbps) | 预计聚合存储吞吐量 (GBps) | 
| 10Gbps | 1.25GBps | 
| 25Gbps | 3.125GBps | 
| 50Gbps | 6.25GBps | 
| 100Gbps | 12.5GBps | 
网络对MinIO的性能影响最大,每台主机带宽会人为地限制存储器的潜在性能,也就是我有很高效的硬盘如NVMe SSD,但是我的网络只有10Mbps,那么我的速度也就只能达到10Mbps(1.25MB)。 那么以下是网络吞吐量限制的示例,假定磁盘具有约100MB/s的持续I/O。
- 1GbE 网络链接最多支持125MB / s或一个磁盘 
- 10GbE 网络可以支持约1.25GB/s, 潜在地支持10-12个磁盘 
- 25GbE 网络可以支持约3.125GB/s,潜在地支持约30个磁盘 
Memory
内存主要限制了每个节点可以同时处理的最大并发连接数。
您可以使用以下公式计算每个节点的最大并发请求数:
\(totalRam / ramPerRequest\)
要计算每个请求使用的RAM量,请使用以下公式:
\(((2MiB + 128KiB) * driveCount) + (2 * 10MiB) + (2 * 1 MiB)\)
10MiB 是默认的擦除块大小版本1。 1 MiB 是默认的擦除块大小版本2。
下表列出了基于主机驱动器的数量和系统 空闲 RAM的最大并发请求数量:
| Number of Drives | 32 GiB of RAM | 64 GiB of RAM | 128 GiB of RAM | 256 GiB of RAM | 512 GiB of RAM | 
|---|---|---|---|---|---|
| 4 Drives | 1,074 | 2,149 | 4,297 | 8,595 | 17,190 | 
| 8 Drives | 840 | 1,680 | 3,361 | 6,722 | 13,443 | 
| 16 Drives | 585 | 1,170 | 2.341 | 4,681 | 9,362 | 
下表提供了根据节点上本地存储的总量分配给MinIO使用的内存的一般指南:
| Total Host Storage | Recommended Host Memory | 
|---|---|
| Up to 1 Tebibyte (Ti) | 8GiB | 
| Up to 10 Tebibyte (Ti) | 16GiB | 
| Up to 100 Tebibyte (Ti) | 32GiB | 
| Up to 1 Pebibyte (Pi) | 64GiB | 
| More than 1 Pebibyte (Pi) | 128GiB | 
重要
从 RELEASE.2024-01-28T22-35-53Z 版本开始,MinIO在分布式设置中为每个节点预分配了2GiB的内存,而在单节点设置中预分配了1GiB的内存。
Storage
Exclusive access to drives
MinIO 要求 专有 对提供给对象存储的驱动器或卷的访问。 其他任何进程、软件、脚本或人员都不得直接对提供给MinIO的驱动器或卷执行 任何 操作,也不得对MinIO放置在其上的对象或文件执行操作。
除非由MinIO工程部门指导,否则不要使用脚本或工具直接修改、删除或移动提供给MinIO的驱动器上的任何数据片段、校验片段或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。 这些操作很可能会导致广泛的数据损坏和丢失,超出了MinIO的修复能力。
MinIO建议为每个MinIO租户配置一个满足该租户性能目标的存储类。
在可能的情况下,配置存储类、CSI或其他提供程序底层支持PV的格式化为XFS,以确保最佳性能。
确保在租户中预配的所有PVs使用一致的底层存储类型(NVMe,SSD,HDD)。
确保每个租户中的所有节点上每个PV呈现的容量是一致的 server pool。 MinIO限制了每个PV的最大可用大小,使其等于池中最小的PV。 例如,如果一个池子有15个10TB的PV和1个1TB的PV,MinIO会将每个PV的容量限制为1TB。
推荐的硬件测试
操作系统诊断工具
如果你无法运行 mc support diag 命令,或者结果显示出预期之外的结果,你可以使用操作系统的默认工具。
在所有服务器上分别测试每个驱动器,以确保它们在性能上完全相同。 使用这些操作系统级别的工具的结果来验证您的存储硬件的能力。 记录这些结果以供将来参考。
- 测试驱动器在写入操作时的性能 - 这个测试检查驱动器写入新数据(未缓存)到驱动器的能力,通过创建指定数量的块,每次最多一定数量的字节,来模拟驱动器写入未缓存数据时的运行方式。 这允许你看到在一致的文件I/O操作下实际的驱动器性能。 - dd if=/dev/zero of=/mnt/driveN/testfile bs=128k count=80000 oflag=direct conv=fdatasync > dd-write-drive1.txt - 将 - driveN替换为你要测试的驱动器的路径。- dd- 复制和粘贴数据的命令。 - if=/dev/zero- 从 - /dev/zero读取,这是一个系统生成的无限流,由0字节组成,用于创建指定大小的文件。- of=/mnt/driveN/testfile- 将数据写入 - /mnt/driveN/testfile。- bs=128k- 一次写入最多128,000字节。 - count=80000- 将数据写入最多80000个块。 - oflag=direct- 使用直接I/O写入以避免数据缓存。 - conv=fdatasync- 在完成之前,物理地写入输出文件数据。 - > dd-write-drive1.txt- 将操作输出内容写入当前工作目录下的 - dd-write-drive1.txt文件。- 操作返回写入的文件数量、总写入字节数、操作总时间(以秒为单位)以及每秒写入的字节数,这些信息可能以不同的顺序呈现。 
- 测试在读取操作期间驱动器的性能。 - dd if=/mnt/driveN/testfile of=/dev/null bs=128k iflag=direct > dd-read-drive1.txt - 将 - driveN替换为您要测试的驱动器的路径。- dd- 复制和粘贴数据的命令。 - if=/mnt/driveN/testfile- 从 - /mnt/driveN/testfile读取;替换为用于测试驱动器读取性能的文件的路径。- of=/dev/null- 写入 - /dev/null,这是一个虚拟文件,操作完成后不会持久存在。- bs=128k- 一次写入最多128,000字节。 - count=80000- 一次写入最多80,000块数据。 - iflag=direct- 使用直接I/O来读取,并避免数据缓存。 - > dd-read-drive1.txt- 将操作输出的内容写入当前工作目录下的 - dd-read-drive1.txt文件中。- 为了获得准确的读取测试结果,请使用一个足够大的文件,该文件模仿您部署的主要用例。 - 在性能测试期间,以下指南可能有所帮助: - 小文件:< 128KB 
- 普通文件:128KB – 1GB 
- 大文件:> 1GB 
 - 您可以使用 - head命令来创建一个文件。 以下命令示例创建一个名为- testfile的 10 GB 文件。- head -c 10G </dev/urandom > testfile - 该操作返回读取的文件数量、读取的总字节数、操作的总时间(以秒为单位)以及读取速度(每秒字节数)。 
第三方诊断工具
I/O 控制器测试
使用 IOzone <http://iozone.org/> 来测试输入/输出控制器以及所有驱动器的组合性能。 记录每个服务器在部署中的性能数据。
iozone -s 1g -r 4m -i 0 -i 1 -i 2 -I -t 160 -F /mnt/sdb1/tmpfile.{1..16} /mnt/sdc1/tmpfile.{1..16} /mnt/sdd1/tmpfile.{1..16} /mnt/sde1/tmpfile.{1..16} /mnt/sdf1/tmpfile.{1..16} /mnt/sdg1/tmpfile.{1..16} /mnt/sdh1/tmpfile.{1..16} /mnt/sdi1/tmpfile.{1..16} /mnt/sdj1/tmpfile.{1..16} /mnt/sdk1/tmpfile.{1..16} > iozone.txt
| 
 | 每个文件大小1G | 
| 
 | 4m 4MB block size | 
| 
 | 0=write/rewrite, 1=read/re-read, 2=random-read/write | 
| 
 | Direct-IO modern | 
| 
 | Number of threads (\(numberOfDrives * 16\)) | 
| 
 | 文件列表(上述命令测试每个驱动器 16 个文件) | 
订阅 MinIO 的推荐工具
重要
本节中提到的工具 需要 订阅 MinIO。 MinIO 强烈建议所有生产部署使用带有 SUBNET 许可证的 AIStor Object Store 。 更多信息,请参阅 MinIO AIStor pricing page 。
- 健康诊断工具 - 生成部署健康状况摘要。 如果您可以访问 SUBNET ,则可以将结果上传到那里。 - mc support diag ALIAS --airgap - 用为部署定义的 - alias替换 ALIAS。
- 网络测试 - 在别名为 - minio1的群集上运行网络吞吐量测试。- mc support perf net minio1 
- 运行测试 - 使用别名 - minio1对群集所有节点上的所有驱动器进行读/写性能测量。 该命令使用默认大小 4MiB。- mc support perf drive minio1 
- 对象测试 - 测量别名 - minio1上对象的 S3 读/写性能。 MinIO 自动调整并发性,以获得最大吞吐量和 IOPS(每秒输入/输出)。- mc support perf object minio1 
