MinIO 分布式部署(Docker)

MinIO集群构建 + Docker容器化部署 + Nginx负载均衡

⚠️ 注意:MinIO 官方推荐 Kubernetes 云原生部署方式,不提供也不支持采用各种容器化部署集群的途径。

📋 目录

为什么选择分布式部署?

MinIO 单体应用并不能发挥 MinIO 自带分布式存储的优势:

  • 数据容灾:多节点备份,防止数据丢失
  • 负载均衡:分散请求压力,提高性能
  • 高可用性:避免单点故障,确保服务稳定运行

⚠️ 注意:单节点部署难免会出现单点故障,无法做到服务的高可用

部署前准备

系统要求

  • MinIO 官方建议采用 Kubernetes 部署
  • 确保所有节点的 MinIO 版本一致
  • 建议使用 4 个或更多节点以获得最佳性能

网络配置

1. 获取节点 IP 地址

在每个节点上执行以下命令获取内网 IP:

1
ip addr

💡 提示:阿里云服务器请勿采用公网 IP,使用内网 IP 更安全且性能更好

2. 配置主机名解析

在每个节点的 /etc/hosts 文件中添加以下内容:

1
2
3
4
172.17.117.117 minio-1  
172.17.117.118 minio-2
172.17.117.119 minio-3
172.17.117.120 minio-4

3. 测试网络连通性

1
2
3
4
ping minio-1
ping minio-2
ping minio-3
ping minio-4

MinIO 分布式容器化部署

启动 MinIO 容器

在每个节点上运行以下命令:

1
docker run -d --name minio --net=host --restart=always --privileged=true -v /mnt/minio/data:/data -e MINIO_ROOT_USER=OGMS -e MINIO_ROOT_PASSWORD=ogms250410 minio/minio:latest server http://minio-{1...4}/data --console-address "0.0.0.0:9101" --address "0.0.0.0:9100"

参数说明

参数 说明
--net=host 共享宿主机网络命名空间
--restart=always 容器自动重启
--privileged=true 给予容器特权模式
-v /mnt/minio/data:/data 数据持久化挂载
MINIO_ROOT_USER MinIO 管理员用户名
MINIO_ROOT_PASSWORD MinIO 管理员密码
--console-address 控制台访问地址
--address API 访问地址

检查容器状态

1
docker logs minio

Nginx 负载均衡配置

启动 Nginx 容器

1
2
3
4
docker run -d --name minio_nginx --net=host -p 9000:9000 -p 9001:9001 -v /mnt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf --restart=always --privileged=true nginx:latest

# 或者使用 ARM 版本
# nginx:alpine-arm

Nginx 配置文件

创建 /mnt/nginx/conf/nginx.conf 文件:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
worker_processes auto;  

events {
worker_connections 1024;
}

http {
# API 负载均衡
upstream minio_api {
ip_hash; # 使用 ip_hash,保证同一个客户端尽量落到同一节点,避免会话不一致
server minio-1:9100 max_fails=3 fail_timeout=30s;
server minio-2:9100 max_fails=3 fail_timeout=30s;
server minio-3:9100 max_fails=3 fail_timeout=30s;
server minio-4:9100 max_fails=3 fail_timeout=30s;
}

# 控制台负载均衡
upstream minio_console {
server minio-1:9101;
server minio-2:9101;
server minio-3:9101;
server minio-4:9101;
}

# MinIO API 服务
server {
listen 9000;
server_name _;

client_max_body_size 0;
proxy_buffering off;
ignore_invalid_headers off;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_connect_timeout 300;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_ignore_client_abort on;

proxy_pass http://minio_api;
}
}

# MinIO Console 服务
server {
listen 9001;
server_name _;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://minio_console;
}
}
}

配置说明

负载均衡策略

  • API 服务:使用 ip_hash 策略,确保同一客户端请求路由到同一节点
  • 控制台服务:使用轮询策略,分散访问压力

端口映射

服务 端口 说明
MinIO API 9000 对象存储 API 接口
MinIO Console 9001 Web 管理控制台

🎯 部署完成

部署完成后,你可以通过以下方式访问:

  • API 接口http://your-server:9000
  • 管理控制台http://your-server:9001

使用配置的用户名和密码登录管理控制台,开始使用 MinIO 分布式存储服务!

参考资料


MinIO 分布式部署(Docker)
http://example.com/2025/09/05/MinIO-分布式部署(Docker)/
作者
Lingkai Shi
发布于
2025年9月5日
许可协议