专注于高性能网络应用开发,核心技术包括PHP、Java、GO、NodeJS等后端语言,VUE、UNI、APP等前端开发,服务器运维、数据库、实时通信、AI等领域拥有丰富经验

Docker 部署 MinIO 的单机与分布式实践

基础篇:Docker 安装与单机配置

1. 使用 Docker 启动 MinIO

首先,拉取最新的 MinIO 镜像并运行:

docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9090:9090 \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=strongpassword" \
  quay.io/minio/minio server /data --console-address ":9090"
  • 9000:对象存储 API 端口
  • 9090:管理控制台端口
  • MINIO_ROOT_USER / MINIO_ROOT_PASSWORD:管理员账号密码

启动后,可以通过 http://服务器IP:9090 打开管理控制台。


2. 配置控制台与资源访问域名

假设你的域名是 example.com,你可以在 Nginx/Caddy 等反向代理中配置:

  • 控制台域名minio-console.example.com → 反向代理到 :9090
  • 资源访问域名minio.example.com → 反向代理到 :9000

Nginx 示例配置(仅核心部分):

server {
    server_name minio-console.example.com;
    location / {
        proxy_pass http://127.0.0.1:9090;
    }
}

server {
    server_name minio.example.com;
    location / {
        proxy_pass http://127.0.0.1:9000;
    }
}

配置好后,就可以通过域名访问 MinIO。


3. 创建桶(Bucket)

登录控制台 → Buckets → Create Bucket,例如:

  • Bucket 名:public-assets

4. 设置桶为公共只读

public-assets 桶里,进入 Access Policy,选择 Read Only

此时,你可以通过类似以下 URL 公共访问文件:

https://minio.example.com/public-assets/filename.png

高级篇:MinIO 分布式多机部署

一、安装

1. 环境准备

假设有 4 台服务器,每台都有独立磁盘 /mnt/data

  • node1.example.com
  • node2.example.com
  • node3.example.com
  • node4.example.com

确保每台机器:

  • 已安装 Docker
  • 防火墙放通 9000(API)、9090(控制台)端口
  • 时间同步(推荐配置 NTP)

2. 启动分布式集群

在每台机器执行(替换域名/IP):

docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9090:9090 \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=strongpassword" \
  quay.io/minio/minio server \
  http://node{1...4}.example.com/mnt/data \
  --console-address ":9090"

说明:

  • http://node{1...4}.example.com/mnt/data 会展开为 4 个节点的存储路径
  • 所有节点需使用相同的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD

二、配置

1. 域名与负载均衡

生产环境一般需要统一入口,可以通过 Nginx/HAProxy 来代理:

  • 资源访问域名minio.example.com(代理 9000)
  • 控制台域名minio-console.example.com(代理 9090)

Nginx 示例:

upstream minio_api {
    server node1.example.com:9000;
    server node2.example.com:9000;
    server node3.example.com:9000;
    server node4.example.com:9000;
}

upstream minio_console {
    server node1.example.com:9090;
    server node2.example.com:9090;
    server node3.example.com:9090;
    server node4.example.com:9090;
}

server {
    server_name minio.example.com;
    location / {
        proxy_pass http://minio_api;
    }
}

server {
    server_name minio-console.example.com;
    location / {
        proxy_pass http://minio_console;
    }
}

2. 创建桶(Bucket)

通过控制台访问 https://minio-console.example.com,使用 admin 登录后创建桶,例如:

  • 桶名:assets

3. 设置访问策略

如果需要对外公开只读访问:

进入 assets 桶 → Access Policy → 设置为 Read Only

此时外部访问链接示例:

https://minio.example.com/assets/logo.png

三、使用

1. 客户端上传文件

可以通过 MinIO 提供的 mc 客户端:

# 安装 mc (Mac/Linux)
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc && mv mc /usr/local/bin/

# 配置 MinIO 连接
mc alias set myminio https://minio.example.com admin strongpassword

# 上传文件
mc cp ./logo.png myminio/assets/

2. 数据分布存储方式

MinIO 使用 Erasure Coding(纠删码),文件会被切分成数据块 + 校验块,分散存储在不同节点:

  • 如果是 4 节点,通常是 2 数据 + 2 校验
  • 上传的 logo.png 会被分成 4 份,分别存放在不同节点

3. 节点故障时的数据安全

  • 单节点宕机:仍然可正常读写,数据自动从校验块恢复
  • 两节点同时宕机:只要冗余足够,依然可用
  • 超过容错范围:部分数据可能丢失

4. 扩容

  • MinIO 支持 横向扩容,通过新增一组节点(称为 Pool)
  • 新写入的数据会分布到所有 Pool 中,老数据保持在原 Pool
  • ❌ 不支持直接缩容(删除节点),需要重新部署并迁移数据

相关文章

macOS下使用Docker快速部署Zookeeper+Dubbo-Admin

通过Docker Compose,我们只需一个配置文件就能快速搭建Zookeeper+Dubbo-Admin环境,极大简化了部署流程。这种容器化部署方式也方便后续扩展为集群模式在微服务架构中,服...

KingbaseES V9 全自动静默安装指南与一键部署脚本

一、静默安装原理与优势KingbaseES的静默安装通过预置配置文件实现无人值守部署,特别适合批量环境与自动化运维场景。相比交互式安装,静默模式具有以下优势:通过配置文件统一管理安装参数支持自动...