docker部署分布式minio集群文件服务器
1. 环境准备
准备4台服务器,3台服务器做minio集群,一台服务器做minio的nginx 入口服务器
IP | 服务 | 操作系统 |
192.168.0.165 | Minio-Nginx | CentOS 7.9 |
192.168.0.109 | Minio-1 | CentOS 7.9 |
192.168.0.114 | Minio-2 | CentOS 7.9 |
192.168.0.133 | Minio-3 | CentOS 7.9 |
别问ip地址为什么是乱的,因为我懒得改!
我闲的麻烦就直接关闭防火墙了,要是为了安全可以只开放对应端口,开放端口的命令请查阅之前博客!!!
2. 设置服务器时间同步
Minio集群需要各个节点的时间保持同步,使用NTP作为时间同步服务,这里以Minio-1(192.168.0.109)为上游服务器,其它2个节点为下游服务器,做时间节点同步
1. Minio-1 服务器安装NTP
1. 安装ntp
yum install ntp ntpdate –y
2. 启动ntp服务
systemctl start ntpd
3. 服务端修改配置文件
vim /etc/ntp.conf
4. 重启ntp服务
systemctl restart ntpd
5. 查看端口 UDP123
ss -lnu
6. 查看ntp状态
ntpq -p
7. 设置开机启动
systemctl enable ntpd
2. 其它下游服务器做时间同步,Minio-2(192.168.0.114)、Minio-3(192.168.0.133) 以下操作需要在所有下游服务器操作
1. 安装ntp
yum install ntp ntpdate –y
2. 手动同步一次时间
/usr/sbin/ntpdate -u 192.168.0.109
3. 修改配置文件
vim /etc/ntp.conf
4.启动ntp服务
systemctl start ntpd
5. 设置开机启动
systemctl enable ntpd
6. 查看状态
ntpq -p
3. 设置Minio集群(注意docker部署集群模式时必须指定-–net=host参数,使用主机网络,采用端口映射无法创建集群)
1. 拉取镜像(所有Minio节点都需要执行)
docker pull minio/minio
2. 配置本地hosts解析(所有Minio节点都需要执行)
vim /etc/hosts 192.168.0.109 minio-1 192.168.0.114 minio-2 192.168.0.133 minio-3
3. 创建minio本地存储路径(所有Minio节点都需要执行)
mkdir -p /usr/local/software/minio/{data,backup}
4. 创建minio容器(各个节点执行各个节点的命令)
4.1 Minio-1(192.168.0.109)节点执行命令
docker run -d --name minio-01 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /usr/local/software/minio/data:/data1 \
-v /usr/local/software/minio/backup:/data2 \
minio/minio:latest server \
--address 192.168.0.109:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...3}/data{1...2}
4.2 Minio-2(192.168.0.114)节点执行命令
docker run -d --name minio-02 --restart=always --net=host \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=admin123" \ -v /usr/local/software/minio/data:/data1 \ -v /usr/local/software/minio/backup:/data2 \ minio/minio:latest server \ --address 192.168.0.114:9000 \ --console-address '0.0.0.0:9999' http://minio-{1...3}/data{1...2}
4.3 Minio-3(192.168.0.133)节点执行命令
docker run -d --name minio-03 --restart=always --net=host \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=admin123" \ -v /usr/local/software/minio/data:/data1 \ -v /usr/local/software/minio/backup:/data2 \ minio/minio:latest server \ --address 192.168.0.133:9000 \ --console-address '0.0.0.0:9999' http://minio-{1...3}/data{1...2}
4.4 查看docker运行容器运行命令(所有节点都可以执行)
docker logs -f <容器id>
docker logs -f 11635783ce9d10c82677650b7334d16fc7a056314b9c07c8c3520abe6af2afbf
节点1:
节点2:
节点3:
5. 访问任意节点IP:9999 访问 账号/密码:admin/admin123
6. 使用Minio-Nginx(192.168.0.165)作为统一入口文件和负载均衡
1. 创建Nginx 配置文件路径
mkdir -p /usr/local/software/nginx/conf
2. 创建nginx配置文件
vim /usr/local/software/nginx/conf/nginx.conf
完整nginx 配置文件代码如下:
worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #Minio代理,设置文件上传上限 client_max_body_size 1000m; #Minio 服务负载均衡 upstream minio-server { server 192.168.0.109:9000 weight=25 max_fails=2 fail_timeout=30s; server 192.168.0.114:9000 weight=25 max_fails=2 fail_timeout=30s; server 192.168.0.133:9000 weight=25 max_fails=2 fail_timeout=30s; } #控制台负载均衡 upstream minio-console { server 192.168.0.109:9999 weight=25 max_fails=2 fail_timeout=30s; server 192.168.0.114:9999 weight=25 max_fails=2 fail_timeout=30s; server 192.168.0.133:9999 weight=25 max_fails=2 fail_timeout=30s; } #Minio服务 server { listen 9030; server_name minio-server; # 允许在标头中使用特殊字符 ignore_invalid_headers off; # 允许任何大小的文件上传。 # 设置为1000m等值;将文件大小限制为特定值 client_max_body_size 1000m; # 禁用缓冲 proxy_buffering off; location / { root html; 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_set_header Host $http_host; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio-server; } } #Minio控制台 server { listen 9040; server_name minio-console; # 允许在标头中使用特殊字符 ignore_invalid_headers off; # 允许任何大小的文件上传。 # 设置为1000m等值;将文件大小限制为特定值 client_max_body_size 1000m; # 禁用缓冲 proxy_buffering off; location / { root html; 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_set_header Host $http_host; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio-console; } } }
3. 启动nginx命令
docker run \ --name minio-nginx \ -p 9030:9030 -p 9040:9040 \ -v /usr/local/software/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ -d nginx:latest
4.访问Ip:9040 查看是否成功
安装成功。
7. 捐赠支持
你可以请作者喝杯咖啡表示鼓励
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库