单节点和单磁盘的docker部署方式:
docker run -d -p 9000:9000 \
--name myminio2 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /data:/data \
minio/minio server /data
命令说明:
-d 表示docker 容器运行与后台服务;
-p 是docker端口映射 到 系统的端口;
--name 是 容器container的名称;
-e 是传递给 minio的 参数 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 是管理账号和密码
-v 是 系统的磁盘目录 映射 docker 的目录。即minio 的持久化目录/data 在 系统的 /data目录保存(磁盘目录)
minio/minio 默认是 最新的minio镜像
通过过创建 docker swarm 集群 实现多节点多磁盘 :
三台服务器:
192.168.1.138 本机虚拟centos 7 系统 worker1
192.168.1.151 服务器ubuntu 14 系统 manager
192.168.1.112 服务器 ubuntu 14 系统 worker2
在manager 机上执行 命令:
$ docker swarm init --advertise-addr 192.168.1.151
结果:
Swarm initialized: current node (uimm49dhebfii3banhvarno5i) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-51lzu9y3sutake5mdx8vxyl61ifarw6wscyoqc7t0rfv2cxwjv-2tx88s01u3n3swtmzl6w15gha 192.168.1.151:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
下面命令是 找回 集群的manager 的 token,供其他节点加入集群
$ docker swarm join-token worker
在另外两个worker 机上执行 加入 swarm集群的命令:
将节点加入到swarm集群中 (用docker swarm init --advertise-addr 192.168.1.151 命令 产生的 这句代码)
$ docker swarm join --token SWMTKN-1-51lzu9y3sutake5mdx8vxyl61ifarw6wscyoqc7t0rfv2cxwjv-2tx88s01u3n3swtmzl6w15gha 192.168.1.151:2377
显示当前的节点列表
$ docker node ls
Docker服务的部署方案:
只有三台服务器,所以在manager 机上 设置两两个服务minio2和minio3 ;
minio1 在 worker1机,minio4 在worker4 上;
然后给节点 打上标签 (minio1,minio2,minio3,minio4)= hostname
docker node update --label-add minio1=true enq32nbk4dqnv2j3imohx3thh
docker node update --label-add minio2=true uimm49dhebfii3banhvarno5i
docker node update --label-add minio3=true uimm49dhebfii3banhvarno5i
docker node update --label-add minio4=true skn55rb7pvesf7gdrdn4gcczn
说明:
enq32nbk4dqnv2j3imohx3thh
换成真实的(节点ID) (可以重复,重复说明minio3 和minio4 在同一个节点)
把minio部署到四个docker service中:
为minio 创建 docker 里面需要的 access_key 和secret_key参数:
echo "minioadmin" | docker secret create access_key -
echo "Adminminio" | docker secret create secret_key -
在manager机,通过 yaml文件 创建minio分布式集群:
同过官网https://docs.min.io/cn/deploy-minio-on-docker-swarm.html
下载swarm部署的Docker Compose file 文件https://github.com/minio/minio/blob/master/docs/orchestration/docker-swarm/docker-compose-secrets.yaml?raw=true
cd 到docker-compose-secrets.yaml所在目录,执行命令:
$ docker stack deploy --compose-file=docker-compose-secrets.yaml minio-stack
等待创建 结束;查看4个minio服务
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
d5j09fjglel2 minio-stack_minio1 replicated 0/1 minio/minio:RELEASE.2021-01-16T02-19-44Z *:9001->9000/tcp
61m6gn0o063p minio-stack_minio2 replicated 1/1 minio/minio:RELEASE.2021-01-16T02-19-44Z *:9002->9000/tcp
zjequs1zls0g minio-stack_minio3 replicated 1/1 minio/minio:RELEASE.2021-01-16T02-19-44Z *:9003->9000/tcp
yvmayjokqmdh minio-stack_minio4 replicated 1/1 minio/minio:RELEASE.2021-01-16T02-19-44Z *:9004->9000/tcp
我们看到这个上面列表 第一栏 创建的服务,没有启动成功。
这个时候,其他主机已经在成功运行,通过 打开manager 机的 ip和 端口号
http://192.168.1.151:9002 能打开并登陆进去,不过提示minio 系统未初始化成功 的错误提示;
这个是因为整个分布式集群有一个节点没能正常工作,所以minio 不能初始化。
最终查找到原因是,docker swarm 集群的要求是 每个节点的 操作系统要保证一致,系统时间误差3秒内;
问题可见,worker1 的系统是centos7 和 另外两台ubuntu 14 不一致。
解决办法是把 worker1 这个节点 关闭,直接关闭虚拟机。
在manager机上查看节点情况:
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
enq32nbk4dqnv2j3imohx3thh localhost.localdomain Down Active 20.10.2
uimm49dhebfii3banhvarno5i * ubuntu14.2 Ready Active Leader 20.10.1
skn55rb7pvesf7gdrdn4gcczn ubuntu14.1 Ready Active 19.03.6
worker1 节点变成down状态。这并不影响 整个集群 的正常工作。只要集群的节点正常数量大于M/2,整个分布式集群工作正常。
判断需要先停止其他几个节点的服务ps -ef|grep minio,kill 进程号,并重新部署每个节点后。
在两台worker节点上执行docker volume ls ,查看minio容器把文件存放在什么位置
docker volume inspect minio_stack_minio1-data
8.使用Nginx对4个MinIO服务实例进行代理
upstream minio-cluster {
server 172.16.0.2:9001;
server 172.16.0.2:9002;
server 172.16.0.8:9003;
server 172.16.0.8:9004;
}
server {
listen 9000;
server_name 172.16.0.5;
location / {
proxy_pass http://minio-cluster;
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_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
client_max_body_size 10m;
client_body_buffer_size 256k;
#请注意加上下面2个配置参数
proxy_buffering off;
proxy_redirect off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
更多参考:
https://docs.min.io/cn/deploy-minio-on-docker-swarm.html
https://www.cnblogs.com/drawnkid/p/8487337.html
https://blog.csdn.net/zhuyu19911016520/article/details/109450881
https://blog.csdn.net/zhuyu19911016520/article/details/109450881