惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
量子位
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
Y
Y Combinator Blog
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
Microsoft Security Blog
Microsoft Security Blog
B
Blog
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
博客园 - 聂微东
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
MinIO 基础设施选型与优化
微信公众号 · 2026-02-19 · via 陈少文的网站

Please enable Javascript to view the contents

1. 硬件

1.1 CPU

  • 支持 AVX/AVX-512,用于纠删码计算、SIMD 操作
  • 支持 AES-NI,用于加密对象
单机存储总量推荐的 vCPU 数
最多 1 TB8
最多 10 TB16
最多 100 TB32
最多 1 PB64
大于 1 PB128

1.2 内存

尽可能大一点能提高并发,增加 Page Cache 命中率。

磁盘数量32 GiB64 GiB 内存128 GiB 内存256 GiB 内存512 GiB 内存
4 个磁盘1,0742,1494,2978,59517,190
8 个磁盘8401,6803,3616,72213,443
16 个磁盘5851,1702,3414,6819,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 GbE125 MB/s0.60.04
10 GbE1.25 GB/s60.4
25 GbE3.125 GB/s151
50 GbE6.25 GB/s312
100 GbE12.5 GB/s624

如果是多机部署,还需要考虑机器之间的数据传输,需要按照机器数量适当增加网卡。

隔离存储网络和业务网络也是推荐的做法,需要多增加网络设备。

2. 内核配置

2.1 网络优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cat << 'EOF' | sudo tee /etc/sysctl.d/99-minio-network.conf
# 增加核心缓冲区最大值 (64 MiB)
net.core.rmem_max=67108864
net.core.wmem_max=67108864

# 增加 TCP 缓冲区范围
net.ipv4.tcp_rmem=4096 131072 67108864
net.ipv4.tcp_wmem=4096 131072 67108864

# 启用 TCP 窗口缩放 (必须开启,否则无法超过 64KB)
net.ipv4.tcp_window_scaling=1

# 提高并发连接建立能力
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535

# 优化高带宽网络下的丢包处理
net.core.netdev_max_backlog=250000

# 开启 TCP 快速开启 (TFO),减少握手延迟
net.ipv4.tcp_fastopen=3

# 禁用空闲后的慢启动(保持高吞吐状态)
net.ipv4.tcp_slow_start_after_idle=0
EOF
sysctl -p /etc/sysctl.d/99-minio-network.conf

2.2 禁用交换分区

1
2
3
4
cat << 'EOF' | sudo tee /etc/sysctl.d/99-minio-vm.conf
vm.swappiness=10
EOF
sysctl -p /etc/sysctl.d/99-minio-vm.conf

3. 系统配置

3.1 设置 TSC 时间同步

TSC 时间同步比系统时间同步更准确,更稳定。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cat >/etc/systemd/system/clocksource-tsc.service <<'EOF'
[Unit]
Description=Set clocksource to tsc
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource'

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable clocksource-tsc.service
systemctl start clocksource-tsc.service

4. 文件系统

1
mkfs.xfs -f /dev/nvme1n1
1
mount -o noatime,nodiratime,logbufs=8,logbsize=256k,max_retries=0 /dev/nvme1n1 /mnt/data1
  • 使用 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 内置了四个维度的监控指标,分别是集群、节点、存储桶、资源。执行以下命令,可以生成对应的采集配置。

  • 集群
1
mc admin prometheus generate local
  • 节点
1
mc admin prometheus generate local node
  • 存储桶
1
mc admin prometheus generate local bucket
  • 资源
1
mc admin prometheus generate local resource
  • Grafana 监控面板

https://github.com/minio/minio/tree/master/docs/metrics/prometheus/grafana


微信公众号