MinIO集群构建 + Docker容器化部署 + Nginx负载均衡
⚠️ 注意:MinIO 官方推荐 Kubernetes 云原生部署方式,不提供也不支持采用各种容器化部署集群的途径。
📋 目录
为什么选择分布式部署?
MinIO 单体应用并不能发挥 MinIO 自带分布式存储的优势:
- ✅ 数据容灾:多节点备份,防止数据丢失
- ✅ 负载均衡:分散请求压力,提高性能
- ✅ 高可用性:避免单点故障,确保服务稳定运行
⚠️ 注意:单节点部署难免会出现单点故障,无法做到服务的高可用
部署前准备
系统要求
- MinIO 官方建议采用 Kubernetes 部署
- 确保所有节点的 MinIO 版本一致
- 建议使用 4 个或更多节点以获得最佳性能
网络配置
1. 获取节点 IP 地址
在每个节点上执行以下命令获取内网 IP:
💡 提示:阿里云服务器请勿采用公网 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 访问地址 |
检查容器状态
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
|
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 { upstream minio_api { 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; }
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; } }
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 分布式存储服务!
参考资料