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

推荐订阅源

量子位
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
F
Full Disclosure
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recorded Future
Recorded Future
Security Archives - TechRepublic
Security Archives - TechRepublic
阮一峰的网络日志
阮一峰的网络日志
T
Threatpost
P
Privacy International News Feed
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
I
Intezer
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Privacy & Cybersecurity Law Blog
A
Arctic Wolf
博客园 - 聂微东
博客园 - 叶小钗
Cisco Talos Blog
Cisco Talos Blog
H
Help Net Security
S
Schneier on Security
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
T
Tor Project blog
月光博客
月光博客
NISL@THU
NISL@THU
A
About on SuperTechFans
Spread Privacy
Spread Privacy
Blog — PlanetScale
Blog — PlanetScale
D
DataBreaches.Net
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
G
Google Developers Blog
W
WeLiveSecurity
P
Palo Alto Networks Blog
The Last Watchdog
The Last Watchdog
K
Kaspersky official blog
博客园 - 司徒正美
L
LINUX DO - 热门话题
小众软件
小众软件

陈少文的网站

巨变与机遇的未来十年 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) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
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


微信公众号