欢迎光临散文网 会员登陆 & 注册

关于Docker部署分布式Minio的探索

2022-04-22 00:39 作者:黑猫SAMA  | 我要投稿

关于Docker部署分布式Minio的探索

之前我有写过用腾讯云轻量部署单节点的文章

> [**腾讯云轻量Docker部署单节点MinIO**](https://blog.im.ci/study-notes/linux-notes/736/)


这次来讲讲Docker部署分布式Minio


根据官方文档所说,Minio分布式部署需要最低四块硬盘,也就是说利用Docker进行分布式部署的最低要求是两节点两硬盘,此次部署的计划便是如此。


# 准备


我准备了两台南京地区的轻量应用服务器,系统均为Debian11




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/a5716bw8u2.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=9e8f1fe5df8a46ae581aadb52b2d55f5f3a193cf)




为什么要两台同地区的?因为腾讯云轻量同地区默认分配在同一VPC网络中,两台机器可以免费享有高达5Gbps的内网互联,Minio的分布式部署是会在节点间同步数据的,公网带宽太小不够爽(


至于服务器的内网IP,可以在控制台的网络信息里看到




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/dxhrndm80q.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=53d5752f738f3ba370e406599df608f9433866f4)




## 设置Hosts


由于Minio的分布式部署支持省略,我们参考下面的样式来增加节点


```javascript

 http://host{1...n}/export{1...m}

```


其中,n和m都为整数,host为节点名称,export为硬盘路径


例如


```javascript

http://host{1...2}/export{1...2}

```


的执行效果等同于


```javascript

http://host1/export1http://host1/export2http://host2/export1http://host1/export2

```


所以我们使用Hosts文件来定义节点名称以及节点应该解析到的IP地址


```javascript

vi /etc/hosts

```


按`i`进入编辑模式,在最下行添加hosts解析,具体IP地址请据自身内网IP地址进行修改,不能照抄


```javascript

10.0.4.13 minio-110.0.4.12 minio-2

```


添加完成后按ESC后输入`:wq`保存,效果如下图




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/57ad4vdls3.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=ac5bcbbdcd5e50ce8fbce5f08c9eedb3bde9f18c)




此时,可以使用PING命令来测试连通情况




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/46jmvtr9ch.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=5ab1d19a66daa80d87ea05522c0f314717f070c7)




如果没有PING命令,安装下面的软件包即可


```javascript

apt-get updateapt install net-tools # ifconfigapt install iputils-ping # ping

```


## 部署Docker


这个没有什么好细讲的,使用Docker官方的安装脚本即可,默认安装最新的发行版Docker


```javascript

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

```


## 部署镜像


### 基础配置命令


```javascript

docker run -d  --restart=always --net=host\  --name minio1 \  -v /home/minio/data1:/data1 \  -v /home/minio/data2:/data2 \  -e "MINIO_ROOT_USER=Your_Login_User_Name" \  -e "MINIO_ROOT_PASSWORD=Your_Login_User_Password" \  quay.io/minio/minio server  --console-address ":9001" \  http://minio-{1...2}/data{1...2}

```


此配置下,两个节点均为两块硬盘,分别为data1和data2,控制台端口为9001


访问任意节点的`公网IP:9001`即可进入控制台


注意:`http://minio-{1...2}/data{1...2}` 中的点必须为三个英文.




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/g5n75fu0jb.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=f56ad71e0c90c8d4d49208de1ff59992ae828a03)




控制台效果


### 进阶配置命令


```javascript

docker run -d  --restart=always  --net=host \

   --name minio1 \

   -v /home/minio/data1:/data1  \

   -v /home/minio/data2:/data2 \

   -e "MINIO_ROOT_USER=Your_Login_User_Name" \

   -e "MINIO_ROOT_PASSWORD=Your_Login_User_Password" \

   -e "MINIO_SERVER_URL=https://file.Your_DominName.com" \

   -e "MINIO_BROWSER_REDIRECT_URL=https://minio.Your_DominName.com" \

   quay.io/minio/minio server  --console-address ":9001" \

   http://minio-{1...2}/data{1...2}

```


此命令增加了`MINIO_SERVER_URL`和`MINIO_BROWSER_REDIRECT_URL`两个参数,效果为:


- MINIO\_SERVER\_URL 设置Minio的API域名(对应API的IP:9000)

● - MINIO\_BROWSER\_REDIRECT\_URL 设置Minio Web Console域名(对应Web Console的IP:9001)


这两条参数可以让控制台的分享功能调用域名来分享,而不是自动获取到的内网IP地址/容器IP

实际访问需要配置好NGINX,具体可参考我部署单节点时的文章




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/eesebny5xf.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=1972472b570fff8ec013e4e02aa182767d795cc2)




设置域名后的分享效果


# 其他功能及效果验证


在分布式部署的情况下,Minio将会自动启用纠删码模式,并且在单节点不可用的版本控制、[对象锁定](https://blog.im.ci/?golink=aHR0cHM6Ly9kb2NzLm1pbi5pby9taW5pby9iYXJlbWV0YWwvb2JqZWN0LXJldGVudGlvbi9taW5pby1vYmplY3QtbG9ja2luZy5odG1sI21pbmlvLW9iamVjdC1sb2NraW5n)以及数据保留功能




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/z6i1lk62ht.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=38a3a9f9129eab4d9ff8f171c76f948e1e91fc57)




在分布式部署下可用的更多功能


此时我们创建桶后进行文件上传




![](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/vla45h8dyo.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=817fdc9b14d6dbf156f42de6975108820e848433)






![节点1](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/y1pndnx0t8.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=e056d317a4bfe65168eb127c45843f5fc75ba383)




![节点2](https://ask8088-private-1251520898.cn-south.myqcloud.com/developer-images/article/4816180/4teon387dr.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1650558555;1650565755&q-key-time=1650558555;1650565755&q-header-list=&q-url-param-list=&q-signature=26b6e26fe85ab5aa8dc426de0b86135533eb0f74)


可以看到每个节点虚拟出的每块硬盘都上传了一份文件,也就是同时会有四份文件存放在不同的位置。


# 一些遇到问题的小提示


● - 部署如果遇到镜像无法启动,使用`docker logs minio1`来查看镜像日志,再根据日志进行排错。

● - Minio分布式部署无法使用端口转发,必须使用本机网络,也就是镜像启动参数携带`--net=host`。


另外,如果log报出`Please provide an even number of endpoints greater or equal to 4` ,则代表硬盘数量不足4个,请删除单节点下配置文件最后的`/data`,此内容是指定启用的磁盘路径。


# 参考资料


● - [Deploy MinIO in Distributed Mode — MinIO Baremetal Documentation](https://docs.min.io/minio/baremetal/installation/deploy-minio-distributed.html?ref=con)

● - [分布式MinIO快速入门 | Minio中文文档](http://docs.minio.org.cn/docs/master/distributed-minio-quickstart-guide)

阿B的专栏编辑器太难用所以懒得再重新编辑了,完整文章请移步我的博客

https://blog.im.ci/study-notes/linux-notes/804/




关于Docker部署分布式Minio的探索的评论 (共 条)

分享到微博请遵守国家法律