硬件检查清单
在规划生产,分布式MinIO部署的硬件配置时,请使用以下检查清单。
需要考虑的因素
在为MinIO实现选择硬件时,请考虑以下因素:
- 启动时存储的数据量(以TB为单位) 
- 预计未来两年内数据大小的增长 
- 平均对象大小和数量 
- 数据保存的平均时间(以年为单位) 
- 部署的站点数量 
- 预期的桶(Bucket)数量 
生产环境硬件建议:
以下清单遵循 MinIO 的 推荐配置 用于生产部署。 提供的指导旨在作为一个基线,并不能取代 MinIO SUBNET 性能诊断、架构审查以及直接向工程团队提供的支持。
MinIO,就像任何分布式系统一样,从选择给定 服务器池 中所有节点相同的配置中受益。 确保在池节点之间选择一致的硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)。
如果节点具有不同的硬件或软件配置,部署可能会显示出不可预测的性能。 那些从将陈旧数据存储在成本较低的硬件中受益的工作负载,应该 instead 部署一个专门的 “warm” 或 “cold” MinIO 部署,并将数据 过渡 到那个层级。
MinIO does not provide hosted services or hardware sales
请访问我们的 参考硬件 页面,了解更多来自我们硬件合作伙伴精选的服务器和存储组件。
| 描述 | Minimum | Recommended | |
|---|---|---|---|
| 专用裸机或虚拟主机(”hosts”)。 | 4个专用主机 | 8+ 个专用主机 | |
| 每个MinIO服务器4个驱动器 | 每个MinIO服务器8+个驱动器 | ||
| 25GbE | 100GbE | ||
| 服务器级CPU,支持现代SIMD指令(AVX-512),例如英特尔®至强®可扩展处理器或更好。 | 每个主机的8个CPU/socket或vCPU。 | 每个主机的16+ 个CPU/socket或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建议对所有工作负载类型和规模使用基于闪存的存储(NVMe或SSD)。 需要高性能的工作负载应该优先选择NVMe而不是SSD。
使用基于 HDD 的存储的 MinIO 部署最适合作为老化数据的 对象转换(”分层”) 的冷层目标。 HDD存储通常无法提供满足现代工作负载期望的性能,并且任何规模上的成本效益都会因这种介质的性能限制而抵消。
使用直连 “本地” 存储 (DAS)
直接连接存储(DAS),如本地连接的JBOD(只是一堆硬盘)阵列,在性能和一致性上比网络存储(NAS、SAN、NFS)有显著优势。
Network File System Volumes Break Consistency Guarantees
MinIO的严格的 写后读 和 写后列表 一致性模型需要本地驱动文件系统。 如果底层存储卷是NFS或类似的网络附加存储卷,MinIO无法提供一致性保证。
使用带标签的 XFS 格式驱动器
将驱动器格式化为XFS,并将它们作为没有RAID或其他池化配置的 JBOD 阵列呈现给MinIO。 使用其他类型的后端存储(如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
使用 /etc/fstab 挂载驱动器
MinIO 要求 在重新启动过程中,驱动器在其挂载位置上保持其顺序。 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替换映射。
备注
依赖于挂载的外部存储的云环境实例,如果有一个或多个远程文件挂载返回错误或失败,可能会遇到启动失败。
例如,一个挂载了持久性EBS卷的AWS ECS实例,如果有一个或多个EBS卷无法挂载,那么它可能不会在标准的 /etc/fstab 配置下启动。
您可以设置 nofail 选项,在启动时抑制错误报告,并允许实例在有一个或多个挂载问题的情况下启动。
您不应该在本地连接的硬盘系统上使用这个选项,因为抑制驱动器错误会阻止MinIO和操作系统以正常方式响应这些错误。
错误时禁用XFS重试
MinIO 强烈建议 禁用使用 max_retries 配置的 重试错误 行为,针对以下错误类别:
- EIO读取或写入时出错
- ENOSPC错误设备上没有剩余空间
- default所有其他错误
默认的 max_retries 设置通常使文件系统在遇到错误时无限次重试,而不是传播错误。
MinIO能够适当地处理XFS错误,使得重试错误行为最多只会导致不必要的延迟或性能下降。
以下脚本将遍历指定挂载路径上的所有驱动器,并将XFS的 max_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操作系统通常不会持久化这些更改。
您可以使用带有 @reboot 时间安排的 cron 作业来在节点重启时运行上述脚本,确保所有驱动器都禁用了重试错误。
使用 crontab -e 创建以下作业,并将脚本路径更改为每个节点上的匹配路径:
@reboot /opt/minio/xfs-retry-settings.sh
使用一致的驱动器类型和容量
确保MinIO部署中底层存储的一致驱动器类型(NVMe、SSD、HDD)。
MinIO不区分存储类型,并且不支持在单个部署内配置 热 或 温 驱动器。
混合驱动器类型通常会导致性能下降,因为部署中最慢的驱动器会成为瓶颈,无论更快驱动器的性能如何。
在MinIO的每个 server pool 中,确保所有节点使用相同容量和类型的驱动器。 MinIO将每个驱动器可使用的最大大小限制为部署中的最小大小。 例如,如果一个部署中有15个10TB的驱动器和一个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读取,这是一个系统生成的无限流,由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 
