属于大家的
VPS知识分享站

MinIO 部署:S3 对象存储、磁盘与备份

先说结论:MinIO 是一个兼容 S3 API 的对象存储,适合放图片、视频、备份、日志和 AI 数据集。单机 Docker 就能跑,但单盘没有冗余;要可靠至少做多盘纠删码或集群,并且一定要把备份放到另一台机器或另一个云。

它适合这些场景:

  • 网站/App 的图片、附件、视频存储
  • 数据库备份、服务器快照的落地存储
  • AI 训练数据、模型文件、数据集版本管理
  • 替代云对象存储,控制成本和数据位置

部署方式怎么选

方式 适合 注意
单机二进制 测试、轻量使用 手动管理进程和升级
Docker 单机 小团队、单盘 数据卷要挂到宿主机
多盘纠删码 生产、需要冗余 至少 4 块盘,容量规划复杂
分布式集群 大规模、多节点 网络、时钟、运维要求高

大多数小团队从 Docker 单机开始,数据盘挂宿主机,定期备份;数据量上来再考虑多盘或集群。

Docker 部署

docker run -d --name minio \
  -p 9000:9000 -p 9001:9001 \
  -v /data/minio:/data \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=换成长密码 \
  minio/minio server /data --console-address ":9001"

9000 是 S3 API,9001 是控制台。生产建议用 compose 管理,数据目录挂独立磁盘,别放系统盘。

services:
  minio:
    image: minio/minio
    command: server /data --console-address ":9001"
    ports:
      - "127.0.0.1:9000:9000"
      - "127.0.0.1:9001:9001"
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
    volumes:
      - /data/minio:/data
    restart: unless-stopped
Docker 容器启动对象存储服务,端口与数据卷
9000 是 API,9001 是控制台,数据目录挂独立磁盘。

域名和 HTTPS

控制台和 API 都不要直接暴露公网。用 Nginx/Caddy 反代,配 HTTPS,限制来源 IP;API 给应用访问,控制台只给管理员。S3 的签名对 Host 和路径敏感,反代要保留原始 Host 和路径,别改写。

server {
    listen 443 ssl;
    server_name s3.example.com;
    client_max_body_size 0;
    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

创建桶和权限

mc alias set local http://127.0.0.1:9000 admin 密码
mc mb local/media
mc anonymous set none local/media
mc cp ./logo.png local/media/logo.png

默认不要开匿名读写。应用用独立的 Access Key,按桶授权;泄露时只换这一组,不影响管理员。需要公开图片时,用 CDN 或预签名 URL,不要直接把桶设成 public。

纠删码和集群

MinIO 的多盘模式用纠删码,把对象切成数据块和校验块,坏几块盘还能恢复。至少 4 块盘起步,盘越多冗余能力越强;但可用容量不是简单相加,要按纠删码比例算。

集群模式要求节点时间同步、网络稳定、盘位一致;扩容和维护比单机复杂。没有运维经验,先用单机 + 备份,别一上来搭集群。

多块磁盘组成纠删码存储池
多盘纠删码有冗余,但可用容量要按比例算。

磁盘和容量规划

  • 数据盘独立,别和系统盘、数据库共用
  • 容量按“当前数据 × 2 + 30% 余量”估,留出备份和临时文件
  • 小文件多时看 inode 和 IOPS,不要只看 TB
  • 磁盘满会导致写入失败,设 80% 告警

备份怎么做

对象存储不是备份,删了就是删了。至少做两层:

  1. 开启桶版本控制,防误删和覆盖
  2. 用 mc mirror 同步到另一台机器或另一个云
  3. 重要数据再做离线/冷备
mc mirror --overwrite local/media backup/media
mc version enable local/media
桶复制与备份到远端保险库
开版本控制并镜像到另一处,对象存储不是备份。

监控

看容量、对象数、请求错误率、磁盘健康、节点在线状态。MinIO 暴露 Prometheus 指标,可以接 Grafana;至少配一个磁盘和容量告警。

常见坑

  • 单盘单机当生产,盘坏数据全没
  • 桶设成 public,被扫到后被人当图床
  • 控制台暴露公网,弱密码被撞
  • 反代改写 Host/Path,S3 签名失败
  • 磁盘满了才发现没告警
  • 只做镜像,不防误删

另外,定期检查磁盘健康、容量曲线和备份恢复,别等盘坏了才想起没做冗余。

对象存储的可靠性靠冗余和备份,不靠单块磁盘。

上线前把权限、备份、告警三件事做完,再放业务数据进去,好。

常见问题 FAQ

Q1:MinIO 能替代云对象存储吗?

能,S3 API 兼容,应用改 endpoint 和密钥即可。但要自己负责磁盘、备份、带宽和可用性。

Q2:单机 MinIO 可靠吗?

单盘没有冗余,盘坏就丢。至少做多盘纠删码,或单机 + 异地备份;关键业务用集群或云对象存储。

Q3:需要多大磁盘?

按当前数据量 × 2 加 30% 余量,再考虑备份副本。小文件多时还要看 IOPS 和 inode。

Q4:怎么防止误删?

开版本控制,限制删除权限,定期镜像到另一处;删除操作要审批,别给应用 root 密钥。

Q5:能跑在 2 核 4G 上吗?

能跑轻量使用,但磁盘和带宽才是瓶颈。并发高、文件大时,加内存和独立磁盘更明显。

总结

MinIO 部署不难,难的是可靠:独立数据盘、纠删码或备份、最小权限、HTTPS、容量告警。先单机跑通,再按数据量升级,别把单盘当生产。

需要一台独立存储或备份机器,可以按小时开一台萤光云香港 CN2 VPS,挂独立数据盘先跑一轮。

相关推荐

赞(0)
未经允许不得转载:VPS知识分享站 » MinIO 部署:S3 对象存储、磁盘与备份