1. 硬件
1.1 CPU
- 支持 AVX/AVX-512,用于纠删码计算、SIMD 操作
- 支持 AES-NI,用于加密对象
| 单机存储总量 | 推荐的 vCPU 数 |
|---|---|
| 最多 1 TB | 8 |
| 最多 10 TB | 16 |
| 最多 100 TB | 32 |
| 最多 1 PB | 64 |
| 大于 1 PB | 128 |
1.2 内存
尽可能大一点能提高并发,增加 Page Cache 命中率。
| 磁盘数量 | 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 |
1.3 硬盘
- 推荐采用多机多盘,单机硬盘数量在 4、8、16,2 的幂次
- 直接提供裸盘,不要使用 RAID
- 磁盘的规格尽可能一致,不要有慢盘,否则会有严重木桶效应
1.4 网络
以顺序读取 HDD 200 MB/s,NVMe 3000 MB/s 为例,计算可支持的硬盘数量:
| 网络带宽 | 吞吐上限 | HDD 数量 (200MB/s) | NVMe 数量 (3000MB/s) |
|---|---|---|---|
| 1 GbE | 125 MB/s | 0.6 | 0.04 |
| 10 GbE | 1.25 GB/s | 6 | 0.4 |
| 25 GbE | 3.125 GB/s | 15 | 1 |
| 50 GbE | 6.25 GB/s | 31 | 2 |
| 100 GbE | 12.5 GB/s | 62 | 4 |
如果是多机部署,还需要考虑机器之间的数据传输,需要按照机器数量适当增加网卡。
隔离存储网络和业务网络也是推荐的做法,需要多增加网络设备。
2. 内核配置
2.1 网络优化
| |
2.2 禁用交换分区
| |
3. 系统配置
3.1 设置 TSC 时间同步
TSC 时间同步比系统时间同步更准确,更稳定。
| |
4. 文件系统
| |
| |
- 使用 xfs 格式,更适合大文件、高并发
- logbufs=8 提高元数据并发写入能力
- logbsize=256k 增加日志缓冲区大小
- noatime 禁用文件访问时间
- nodiratime 禁用目录访问时间
- max_retries=0 禁用重试,避免与 MinIO 的自动重试冲突
5. 纠删码的选择
M (Data Blocks - 数据块),K (Parity Blocks - 校验块)
基本原理:
- 系统的瓶颈在磁盘 IO
- 数据位越多,冗余越小,速度越快
- 校验位越多,容忍的坏盘越多
- minio 会将每个块(M+K)均匀的分布在每个节点
- 最少 M 位正常才能读成功,最少 M+1 位正常才能写成功
如果你能绘制出数据位分布图,应该很容易做出选择。

6. 文件大小选择
blockSizeV2 在源码 https://github.com/minio/minio/blob/7aac2a2c5b7c882e68c1ce017d8256be2feea27f/cmd/object-api-common.go#L37 处。固定为 1M,旧版本为 10M,表示的是数据的处理窗口大小,主要影响的是 CPU、MEM、小文件的处理速度。
数据文件的大小是另外一件事。在 EC 10:6 配置下,minio 写入 1GB 文件的逻辑是将 1GB文件切分为 10个数据块,然后计算 6个校验块,选择尽量分散的纠删集存储每一个块。每个块存储时,是一个 Part 的数据文件和一个 Meta 的元数据文件。
需要注意的是:
- 如果数据块只有 KB 级别,minio 会将数据,直接写入到 Meta 文件进行存储
- 大文件传输时,采用流式分块,minio 会按照分块的大小单独存储
因此,为了获得更大的吞吐,我们需要:
- 流式上传时,使用更大的分块,或者 –disable-multipart 禁用分块
- 存储的文件不要太小,临界点 HDD 在 1GB 左右,具体得自己测试
7. 监控面板
minio 内置了四个维度的监控指标,分别是集群、节点、存储桶、资源。执行以下命令,可以生成对应的采集配置。
- 集群
| |
- 节点
| |
- 存储桶
| |
- 资源
| |
- Grafana 监控面板
https://github.com/minio/minio/tree/master/docs/metrics/prometheus/grafana
