硬件清单
在规划生产、分布式 MinIO 部署的硬件配置时,请使用以下清单。
注意事项
在为您的 MinIO 实现选择硬件时,请考虑以下因素
预计启动时存储的 Tebibytes 数据量
预计至少在未来两年内数据量的增长
按平均对象大小计算的对象数量
数据的平均保留时间(以年为单位)
要部署的站点数量
预计的存储桶数量
生产硬件推荐
以下清单遵循 MinIO 的 推荐配置,用于生产部署。提供的指导旨在作为基线,不能取代 MinIO SUBNET 性能诊断、架构审查和直接工程支持。
MinIO 与任何分布式系统一样,从为给定 服务器池 中的所有节点选择相同的配置中获益。确保在池节点之间一致地选择硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)。
如果节点的硬件或软件配置不同,部署可能会出现不可预测的性能。从将陈旧数据存储在更低成本的硬件中获益的工作负载应该改为部署专用的“暖”或“冷”MinIO 部署,并将数据 迁移 到该层。
MinIO 不提供托管服务或硬件销售
请参阅我们的 参考硬件 页面,了解我们硬件合作伙伴提供的精选服务器和存储组件。
描述 |
最低 |
推荐 |
|
---|---|---|---|
专用于为 MinIO 租户提供服务的 Kubernetes 工作节点。 |
每个租户 4 个工作节点 |
每个租户 8 个或更多工作节点 |
|
每个 MinIO 服务器 pod 4 个 PV |
每个 MinIO 服务器 pod 8 个或更多 PV |
||
25GbE |
100GbE |
||
支持现代 SIMD 指令 (AVX-512) 的服务器级 CPU,例如 Intel® Xeon® 可扩展或更高版本。 |
每个 MinIO Pod 4 个 vCPU |
每个 MinIO Pod 8 个或更多 vCPU |
|
每个服务器的可用内存应满足或超过每服务器使用量,并留出合理的缓冲区。 |
每个工作节点的可用内存为 32GB |
每个工作节点的可用内存为 128GB+ |
重要
以下区域对 MinIO 性能影响最大,按重要性排序:
网络基础设施 |
吞吐量不足或有限会限制性能 |
---|---|
存储控制器 |
旧固件、吞吐量有限或硬件故障会限制性能并影响可靠性 |
存储(驱动器) |
旧固件或速度慢/老化/故障硬件会限制性能并影响可靠性 |
在关注其他硬件资源(如计算相关的约束)之前,优先确保这些区域中的每个区域所需的组件。
上述最低建议反映了 MinIO 在协助企业客户在各种 IT 基础设施上部署时,同时保持所需 SLA/SLO 的经验。虽然 MinIO 可以在低于最低推荐拓扑的情况下运行,但任何潜在的成本节省都将以可靠性、性能或整体功能下降为代价。
网络
MinIO 建议使用高速网络以支持连接的存储(聚合驱动器、存储控制器和 PCIe 总线)的最高可能吞吐量。下表提供了给定物理或虚拟网络接口支持的最高存储吞吐量的通用指南。该表假设所有网络基础设施组件(如路由器、交换机和物理布线)也支持 NIC 带宽。
NIC 带宽(Gbps) |
估计的聚合存储吞吐量 (GBps) |
10Gbps |
1.25GBps |
25Gbps |
3.125GBps |
50Gbps |
6.25GBps |
100Gbps |
12.5GBps |
网络对 MinIO 性能的影响最大,其中每主机带宽低会人为地限制存储的潜在性能。以下网络吞吐量限制示例假设旋转磁盘具有约 100MB/S 的持续 I/O
1GbE 网络链路最多可支持 125MB/s,或一个旋转磁盘
10GbE 网络大约可支持 1.25GB/s,可能支持 10-12 个旋转磁盘
25GbE 网络大约可支持 3.125GB/s,可能支持约 30 个旋转磁盘
内存
内存主要限制每个节点的并发连接数。
可以使用以下公式计算每个节点的最大并发请求数:
\(totalRam / ramPerRequest\)
要计算每个请求使用的 RAM 量,请使用以下公式:
\(((2MiB + 128KiB) * driveCount) + (2 * 10MiB) + (2 * 1 MiB)\)
10MiB 是默认的擦除块大小 v1。1 MiB 是默认的擦除块大小 v2。
下表列出了基于主机驱动器数量和空闲系统 RAM 的节点上的最大并发请求数
驱动器数量 |
32 GiB RAM |
64 GiB RAM |
128 GiB RAM |
256 GiB RAM |
512 GiB RAM |
---|---|---|---|---|---|
4 个驱动器 |
1,074 |
2,149 |
4,297 |
8,595 |
17,190 |
8 个驱动器 |
840 |
1,680 |
3,361 |
6,722 |
13,443 |
16 个驱动器 |
585 |
1,170 |
2.341 |
4,681 |
9,362 |
下表提供了根据节点上的本地存储总量分配给 MinIO 使用的内存的通用指南
主机存储总量 |
推荐的主机内存 |
---|---|
最高 1 Tebibyte (Ti) |
8GiB |
最高 10 Tebibyte (Ti) |
16GiB |
最高 100 Tebibyte (Ti) |
32GiB |
最高 1 Pebibyte (Pi) |
64GiB |
超过 1 Pebibyte (Pi) |
128GiB |
重要
从 RELEASE.2024-01-28T22-35-53Z 开始,MinIO 在分布式设置中每个节点预先分配 2GiB 内存,在单节点设置中预先分配 1GiB 内存。
存储
对驱动器的独占访问
MinIO **需要** 对提供用于对象存储的驱动器或卷进行独占访问。任何其他进程、软件、脚本或人员不应对提供给 MinIO 的驱动器或卷或 MinIO 在其上放置的对象或文件进行任何直接操作。
除非 MinIO 工程团队指示,否则不要使用脚本或工具直接修改、删除或移动提供的驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能会导致广泛的损坏和数据丢失,超出了 MinIO 的修复能力。
MinIO 建议为每个 MinIO 租户配置一个存储类别,以满足该租户的性能目标。
在可能的情况下,将存储类别、CSI 或 PV 底层的其他供应程序配置为将卷格式化为 XFS 以确保最佳性能。
确保为每个租户中供应的所有 PV 提供一致的底层存储类型(NVMe、SSD、HDD)。
确保每个租户中所有节点上每个 PV 的呈现容量相同服务器池。MinIO 将每个 PV 的最大可用大小限制为池中最小的 PV。例如,如果一个池有 15 个 10TB PV 和 1 个 1TB PV,MinIO 将每个 PV 的容量限制为 1TB。
推荐的硬件测试
MinIO 诊断
运行内置的健康诊断工具。如果您有权访问 SUBNET,您可以将结果上传到那里。
mc support diag ALIAS --airgap
将 ALIAS 替换为为部署定义的 alias
。
MinIO 支持诊断工具
对于已注册 MinIO SUBNET 的部署,您可以运行内置的支持诊断工具。
运行三个 mc support perf
测试。
这些服务器端测试验证网络、驱动器和对象吞吐量。使用默认选项运行所有三个测试。
网络测试
在别名为
minio1
的集群上运行网络吞吐量测试。mc support perf net minio1
驱动器测试
对别名为
minio1
的集群中所有节点上的所有驱动器运行驱动器读写性能测量。该命令使用默认的块大小 4MiB。mc support perf drive minio1
对象测试
测量别名为
minio1
的对象的 S3 读写性能。MinIO 自动调整并发性以获得最大吞吐量和 IOPS(每秒输入/输出次数)。mc support perf object minio1
操作系统诊断工具
如果您无法运行 mc support diag
或结果显示意外结果,则可以使用操作系统的默认工具。
在所有服务器上独立测试每个驱动器以确保它们的性能相同。使用这些 OS 级工具的结果来验证存储硬件的功能。记录结果以备将来参考。
在写入操作期间测试驱动器的性能
此测试通过创建指定数量的块(一次最多特定数量的字节)来模拟驱动器在写入未缓存数据时的运行方式,从而检查驱动器将新数据(未缓存)写入驱动器的能力。这使您可以看到使用一致的文件 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
写入最多 80000 个数据块
iflag=direct
使用直接 I/O 读取并避免数据从缓存中读取
> dd-read-drive1.txt
将操作输出的内容写入当前工作目录中的
dd-read-drive1.txt
使用一个大小足够大的文件,模拟您的部署的主要用例以获得准确的读取测试结果。
以下指南可能有助于性能测试
小文件:< 128KB
普通文件:128KB – 1GB
大文件:> 1GB
您可以使用
head
命令来创建一个要使用的文件。以下命令示例创建一个名为testfile
的 10 千兆字节文件。head -c 10G </dev/urandom > testfile
该操作返回读取的文件数、读取的总大小(以字节为单位)、操作的总时长(以秒为单位)以及读取速度(以每秒字节为单位)。
第三方诊断工具
IO 控制器测试
使用 IOzone 测试输入/输出控制器和所有驱动器的组合。记录部署中每个服务器的性能指标。
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 块大小 |
|
0=写入/重写,1=读取/重新读取,2=随机读取/写入 |
|
直接-IO 现代 |
|
线程数 (\(numberOfDrives * 16\)) |
|
文件列表(上述命令使用每个驱动器 16 个文件进行测试) |