这里是文章模块栏目内容页
用docker swarm 部署Minio对象存储的多节点 多磁盘分布式集群

单节点和单磁盘的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

命令说明: 

  1. -d 表示docker 容器运行与后台服务;

  2. -p 是docker端口映射 到 系统的端口;

  3. --name 是 容器container的名称;

  4. -e 是传递给 minio的 参数 MINIO_ROOT_USER 和  MINIO_ROOT_PASSWORD 是管理账号和密码

  5. -v 是 系统的磁盘目录 映射 docker 的目录。即minio 的持久化目录/data  在 系统的 /data目录保存(磁盘目录)

  6. 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