硬件检查清单
在规划生产级分布式 MinIO 部署的硬件配置时,请使用以下检查清单。
注意事项
在选择MinIO实施的硬件时,需考虑以下因素:
启动时预计存储的数据量(以TiB为单位)
预计未来至少两年内数据规模的增长
按平均对象大小统计的对象数量
数据的平均保留时间(年)
要部署的站点数量
预期桶数
生产硬件推荐
以下清单遵循MinIO的推荐配置对于生产部署。 提供的指导旨在作为基准,不能替代MinIO SUBNET性能诊断、架构评审和直达工程支持。
MinIO,与任何分布式系统一样,受益于为给定集群中的所有节点选择相同的配置服务器池确保池节点间的硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)选择保持一致。
如果节点具有不同的硬件或软件配置,部署可能会表现出不可预测的性能。 受益于在低成本硬件上存储老化数据的工作负载应改为部署专用的“温”或“冷”MinIO部署,并过渡数据到该层级。
MinIO 不提供托管服务或硬件销售
查看我们的参考硬件来自我们硬件合作伙伴的精选服务器和存储组件页面。
描述 |
Minimum |
推荐 |
|
|---|---|---|---|
Kubernetes工作节点专门为MinIO租户提供服务。 |
每个租户4个工作进程 |
每个租户 8+ 个工作者 |
|
每个 MinIO Server Pod 4 PV |
每个 MinIO Server Pod 每分钟 8+ 次 PV 操作 |
||
25GbE |
100GbE |
||
支持现代SIMD指令(AVX-512)的服务器级CPU,例如英特尔® 至强® 可扩展处理器或更优型号。 |
每个 MinIO Pod 4 个 vCPU |
每个 MinIO Pod 8+ vCPU |
|
可用内存需满足或超过每台服务器的使用量通过合理的缓冲区。 |
每个工作节点 32GB 可用内存 |
每个工作节点 128GB+ 可用内存 |
描述 |
Minimum |
推荐 |
|
|---|---|---|---|
专用裸机或虚拟主机("hosts")。 |
4台专用主机 |
8+ 专用主机 |
|
每个 MinIO 服务器 4 个驱动器 |
每个 MinIO 服务器 8+ 个驱动器 |
||
25GbE |
100GbE |
||
支持现代SIMD指令(AVX-512)的服务器级CPU,例如英特尔® 至强® 可扩展处理器或更优型号。 |
每主机8个CPU/插槽或vCPU |
16+ CPU/插槽或每个主机的 vCPU |
|
可用内存需满足或超过每台服务器的使用量通过合理的缓冲区。 |
每个主机 32GB 可用内存 |
每台主机128GB以上可用内存 |
重要
以下因素对 MinIO 性能影响最大,按重要性排序如下:
网络基础设施 |
吞吐量不足或受限会制约性能 |
|---|---|
存储控制器 |
旧固件、有限的吞吐量或故障硬件会限制性能并影响可靠性 |
存储(驱动器) |
旧版固件或运行缓慢/老化/故障的硬件会限制性能并影响可靠性 |
在关注其他硬件资源(如计算相关约束)之前,优先确保为每个领域获取必要组件。
上述最低建议反映了 MinIO 在协助企业客户在各种 IT 基础设施上部署同时保持所需 SLA/SLO 方面的经验。 虽然 MinIO 可能在低于最低推荐拓扑的环境下运行,但任何潜在的成本节省都会带来可靠性、性能或整体功能降低的风险。
网络
MinIO 推荐使用高速网络来支持所连接存储(聚合驱动器、存储控制器和 PCIe 总线)的最大可能吞吐量。下表提供了给定物理或虚拟网络接口支持的最大存储吞吐量的一般指南。 该表假设所有网络基础设施组件(如路由器、交换机和物理布线)也支持网卡带宽。
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) * 驱动器数量) + (2 * 10MiB) + (2 * 1 MiB)\)
10MiB 是默认的擦除块大小 v1。 1 MiB 是默认的擦除块大小 v2。
以下表格根据主机驱动器数量和节点列出了最大并发请求数免费系统内存:
驱动器数量 |
32 GiB 内存 |
64 GiB 内存 |
128 GiB 内存 |
256 GiB 内存 |
512 GiB 内存 |
|---|---|---|---|---|---|
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 (TiB) |
32GiB |
最高可达 1 Pebibyte (PiB) |
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 建议所有工作负载类型和规模都使用基于闪存的存储(NVMe 或 SSD)。 需要高性能的工作负载应优先选择 NVMe 而非 SSD。
MinIO 不建议在生产环境中使用 HDD 存储。 HDD 存储通常无法提供满足现代工作负载期望的必要性能,且任何规模化的成本效益都会被该介质的性能限制所抵消。
首选直连式"本地"存储 (DAS)
DAS本地连接的 JBOD(Just a Bunch of Disks)阵列等存储方案,相比网络存储(NAS、SAN、NFS)具有显著的性能和一致性优势。
虽然MinIO租户可以利用远程持久卷(PV)资源,但通过网络执行I/O操作的成本通常会限制整体性能。
MinIO 强烈建议使用能够配置附加到工作节点上的存储的 CSI,Kubernetes 会在这些工作节点上调度您的 MinIO Pod,例如MinIO DirectPV.
对于所有其他情况,应尽一切可能选择这样的CSI:它向MinIO呈现存储时,就像存储是本地连接的文件系统一样。 在MinIO和操作系统级存储访问API之间添加软件层或转换层的CSI,必然会增加系统复杂性,并可能导致意外或不希望出现的行为。
配置JBOD阵列时不使用任何RAID、池化或类似的软件层级,使存储直接呈现给MinIO。
对于需要将存储作为虚拟卷配置的虚拟机或系统,MinIO 建议仅使用厚置备 LUN。
网络文件系统卷破坏一致性保证
MinIO的严格写后读和list-after-write一致性模型需要本地驱动器文件系统。 如果底层存储卷是NFS或类似的网络附加存储卷,MinIO无法提供一致性保证。
使用XFS格式的驱动器并保持一致的挂载方式
MinIO 建议将 MinIO 持久卷底层驱动器格式化为xfs.
如果使用 CSI,请查阅该 CSI 的文档并确保其支持指定xfs文件系统。
MinIO 强烈建议避免使用任何将驱动器格式化为ext4, btrfs或其他文件系统。
MinIO 期望所有已配置的持久卷(PV)专供其使用,且底层存储介质需保证在指定挂载路径下能够访问存储数据。 对底层存储介质的任何修改(包括但不限于外部或第三方应用程序的操作,或本地连接存储的任意重新挂载)可能导致意外行为或数据丢失。
将驱动器格式化为 XFS 并作为存储卷提供给 MinIOJBOD没有RAID或其他池化配置的阵列。 使用任何其他类型的后端存储(SAN/NAS、ext4、RAID、LVM)通常会导致性能、可靠性、可预测性和一致性的降低。
格式化 XFS 驱动器时,请为每个驱动器应用唯一标签。 例如,以下命令将四个驱动器格式化为 XFS 并应用相应的驱动器标签。
mkfs.xfs /dev/sdb -L MINIODRIVE1
mkfs.xfs /dev/sdc -L MINIODRIVE2
mkfs.xfs /dev/sdd -L MINIODRIVE3
mkfs.xfs /dev/sde -L MINIODRIVE4
MinIO需要that drives maintain their ordering at the mounted position across restarts. MinIO不支持将包含现有MinIO数据的驱动器任意迁移到新的挂载位置,无论是出于有意操作还是操作系统层面行为导致的结果。
你好必须使用/etc/fstab或类似的挂载控制系统,以便在一致的路径下挂载驱动器。
例如:
$ nano /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
LABEL=MINIODRIVE1 /mnt/drive-1 xfs defaults,noatime 0 2
LABEL=MINIODRIVE2 /mnt/drive-2 xfs defaults,noatime 0 2
LABEL=MINIODRIVE3 /mnt/drive-3 xfs defaults,noatime 0 2
LABEL=MINIODRIVE4 /mnt/drive-4 xfs defaults,noatime 0 2
您可以使用mount -a在初始设置期间将这些驱动器挂载到这些路径。
操作系统应在节点启动过程中挂载这些驱动器。
MinIO强烈建议使用基于标签的挂载规则而非基于UUID的规则。
基于标签的规则允许将不健康或无法工作的驱动器替换为具有匹配格式和标签的替代驱动器。
基于UUID的规则需要编辑/etc/fstab将文件中的映射替换为新的驱动器UUID。
Note
依赖挂载外部存储的云环境实例,如果遇到一个或多个远程文件挂载返回错误或失败,可能会遭遇启动失败。
例如,挂载了持久性EBS卷的AWS ECS实例可能无法通过标准方式启动/etc/fstab如果一个或多个EBS卷无法挂载时的配置
您可以设置nofail在启动时静默错误报告并允许实例在一个或多个挂载问题的情况下启动的选项。
在具有本地连接磁盘的系统上不应使用此选项,因为静默驱动器错误会阻止 MinIO 和操作系统以正常方式响应这些错误。
禁用 XFS 错误重试
MinIO强烈建议禁用出错重试使用行为max_retries以下错误类的配置:
EIO读取或写入时出错ENOSPC错误:设备上没有剩余空间default所有其他错误
默认max_retries设置通常指示文件系统在遇到错误时无限重试,而不是传播错误。
MinIO 能够妥善处理 XFS 错误,使得这种重试机制最多只会引入不必要的延迟或性能下降。
请参考您首选的 CSI 或 StorageClass 文档,了解配置文件系统级别设置的选项。
以下脚本遍历指定挂载路径下的所有驱动器并设置XFSmax_retries设置0或“出错时立即失败”用于推荐错误类。
该脚本会忽略任何未挂载的驱动器,无论是手动挂载还是通过/etc/fstab修改/mnt/drive与您的 MinIO 驱动器使用的模式匹配的行。
#!/bin/bash
for i in $(df -h | grep /mnt/drive | awk '{ print $1 }'); do
mountPath="$(df -h | grep $i | awk '{ print $6 }')"
deviceName="$(basename $i)"
echo "Modifying xfs max_retries and retry_timeout_seconds for drive $i mounted at $mountPath"
echo 0 > /sys/fs/xfs/$deviceName/error/metadata/EIO/max_retries
echo 0 > /sys/fs/xfs/$deviceName/error/metadata/ENOSPC/max_retries
echo 0 > /sys/fs/xfs/$deviceName/error/metadata/default/max_retries
done
exit 0
您必须在所有 MinIO 节点上运行此脚本,并配置脚本在重启时重新运行,因为 Linux 操作系统通常不会持久保存这些更改。
您可以使用cron工作与@reboot在节点重启时运行上述脚本的时机,并确保所有驱动器都已禁用错误重试功能。
使用crontab -e要创建以下作业,修改脚本路径以匹配每个节点上的路径:
@reboot /opt/minio/xfs-retry-settings.sh
使用一致的驱动器类型和容量
在 MinIO 部署中,请确保底层存储采用一致的驱动器类型(NVMe、SSD、HDD)。 MinIO 不会区分存储类型,也不支持在单个部署中配置"热"或"温"驱动器。 混合驱动器类型通常会导致性能下降,因为部署中最慢的驱动器会成为瓶颈,无论较快驱动器的性能如何。
在每个 MinIO 集群的所有节点中使用相同容量和类型的驱动器服务器池MinIO 将每个驱动器的最大可用大小限制为部署中的最小驱动器大小。 例如,如果某个部署包含 15 个 10TB 驱动器和 1 个 1TB 驱动器,MinIO 会将每个驱动器的容量限制为 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一个系统生成的无限零字节流,用于创建指定大小的文件of=/mnt/driveN/testfile写
/mnt/driveN/testfilebs=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创建文件使用的命令。 以下命令示例创建一个名为的10 GB文件testfile.head -c 10G </dev/urandom > testfile
该操作返回读取的文件数量、读取的总字节数、操作总耗时(以秒为单位)以及读取速度(以字节/秒为单位)。
第三方诊断工具
IO Controller测试
使用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=随机读取/写入 |
|
Direct-IO 现代化 |
|
线程数 (\(numberOfDrives * 16\)) |
|
文件列表(上述命令测试每个驱动器使用16个文件) |
MinIO 订阅推荐工具
重要
本节中提到的工具requireMinIO 强烈建议所有生产环境部署使用AIStor Object Store使用其 SUBNET 许可证。 有关更多信息,请参阅MinIO AIStor 定价页面.
健康诊断工具
生成您的部署健康状况摘要。 如果您有权访问子网你可以将结果上传到那里。
mc support diag ALIAS --airgap
将 ALIAS 替换为
alias为部署定义的。网络测试
在别名为
的集群上运行网络吞吐量测试 minio1.mc support perf net minio1
路测
对别名为
的集群中所有节点上的所有驱动器运行读写性能测量 minio1该命令使用默认的块大小 4MiB。mc support perf drive minio1
Object test
测量别名上对象的 S3 读写性能
minio1MinIO 自动调整并发以获取最大吞吐量和 IOPS(每秒输入/输出操作数)。mc support perf object minio1