针对 Spring Boot + MySQL + MinIO 三合一部署(即单机共存,非生产高可用,适用于开发、测试、小型内部系统或轻量级 SaaS 原型),最小推荐服务器配置需兼顾三者的资源竞争(尤其是 I/O 和内存),同时保证基本稳定性与可维护性。以下是综合权衡后的务实最小推荐配置:
| ✅ 最小推荐配置(生产边缘级 / 稳定测试环境) | 项目 | 推荐值 | 说明 |
|---|---|---|---|
| CPU | 4 核(vCPU) | Spring Boot(中等负载 Web API)、MySQL(轻量事务)、MinIO(对象读写)均需 CPU;2 核极易成为瓶颈(尤其 MinIO 并发 PUT/GET 或多线程计算校验和时)。 | |
| 内存 | 8 GB RAM | ⚠️ 关键项! • Spring Boot(JVM 堆建议 1.5–2.5G) • MySQL(InnoDB buffer pool 至少 2G,否则磁盘 IO 暴增) • MinIO(默认内存占用约 500MB–1.5G,但元数据缓存+并发操作需余量) • OS + 其他进程(日志、监控等)需预留 ≥1G。低于 6GB 极易 OOM 或频繁 GC/swap,强烈不推荐。 |
|
| 存储 | 100 GB SSD(NVMe 更佳) | • 系统 + 应用:~10–15 GB • MySQL 数据:按业务预估(起步建议 ≥20 GB 可用空间) • MinIO 存储:必须独立挂载目录(如 /mnt/minio-data),且严禁与 MySQL 数据目录混用同一文件系统(避免 I/O 冲突 & 故障扩散)• SSD 是硬性要求:HDD 下 MinIO 性能断崖式下降,MySQL WAL 写入延迟高,三者共存几乎不可用。 |
|
| 操作系统 | Linux(Ubuntu 22.04 LTS / CentOS Stream 9) | 官方支持完善,内核优化好,MinIO 和 MySQL 对 Linux 友好。避免 Windows Server(MinIO 生产不推荐,Java 文件锁/性能问题)。 |
⚠️ 关键注意事项(比硬件更重要!)
-
存储隔离(强制)
- MySQL 数据目录(如
/var/lib/mysql)与 MinIO 数据目录(如/mnt/minio-data)必须位于不同物理磁盘或至少不同挂载点(理想:MySQL 用一块 SSD,MinIO 用另一块 SSD 或 RAID)。 - ❌ 同一 SSD 分区存放二者 → 高并发时 I/O 争抢严重,响应延迟飙升,可能触发 MySQL 超时或 MinIO 503。
- MySQL 数据目录(如
-
JVM 与 MySQL 内存调优(必做)
# Spring Boot 启动示例(避免默认堆过大) java -Xms1536m -Xmx2048m -XX:+UseG1GC -jar app.jar# MySQL my.cnf 关键项(8GB 总内存下) [mysqld] innodb_buffer_pool_size = 2G # ≈25% 总内存,勿超 3G innodb_log_file_size = 256M max_connections = 150 -
MinIO 部署方式
- ✅ 使用
minio server单节点模式(非minio gateway),并指定独立数据盘:minio server /mnt/minio-data --console-address :9001 - ❌ 避免
--compat模式或 Docker 默认 tmpfs 存储(无持久化)。
- ✅ 使用
-
网络与安全
- 开放必要端口:
8080(Spring Boot)、3306(MySQL,务必限制访问 IP 或禁用远程)、9000(MinIO API)、9001(MinIO Console)。 - 生产环境必须启用 HTTPS(Spring Boot + Nginx 反向X_X)及 MinIO TLS。
- 开放必要端口:
| 🚫 绝对不推荐的配置(踩坑警告) | 配置 | 问题 |
|---|---|---|
| 2核4GB RAM | MySQL buffer pool <1G → 全表扫描变慢;MinIO 并发 >5 即卡顿;JVM GC 频繁。 | |
| HDD 存储 | MinIO PUT 延迟 >500ms;MySQL INSERT 响应不稳定;三者共存基本不可用。 |
|
| 共享同一分区 | 日志刷盘、Binlog、MinIO multipart upload 临时文件互相阻塞,OOM 风险极高。 | |
| 未调优直接运行 | 默认 MySQL innodb_buffer_pool_size=128M → 90% 请求走磁盘,性能归零。 |
💡 升级建议(当用户量/数据量增长后)
- 50+ 日活 / 10GB+ 对象存储 → 升级至 8核16GB + 2×SSD(MySQL/MinIO 分盘)
- 生产环境(任何线上业务) → 必须分离部署:
- Spring Boot + MySQL → 一台(或 MySQL 上云 RDS)
- MinIO → 独立节点(或 MinIO 分布式集群)
- 理由:故障隔离、伸缩独立、备份策略解耦、符合云原生最佳实践。
✅ 总结一句话
“4核8GB SSD(存储隔离)是三合一部署的稳定底线;低于此配置,不是省钱,是在为运维埋雷。”
如需具体部署脚本(systemd 服务配置、MySQL 初始化、MinIO 用户策略、Spring Boot 连接池配置),我可立即提供 👇
轻量云Cloud