關(guān)于Docker部署分布式Minio的探索

關(guān)于Docker部署分布式Minio的探索
之前我有寫過用騰訊云輕量部署單節(jié)點(diǎn)的文章
> [**騰訊云輕量Docker部署單節(jié)點(diǎn)MinIO**](https://blog.im.ci/study-notes/linux-notes/736/)
這次來講講Docker部署分布式Minio
根據(jù)官方文檔所說,Minio分布式部署需要最低四塊硬盤,也就是說利用Docker進(jìn)行分布式部署的最低要求是兩節(jié)點(diǎn)兩硬盤,此次部署的計(jì)劃便是如此。
# 準(zhǔn)備
我準(zhǔn)備了兩臺南京地區(qū)的輕量應(yīng)用服務(wù)器,系統(tǒng)均為Debian11

為什么要兩臺同地區(qū)的?因?yàn)轵v訊云輕量同地區(qū)默認(rèn)分配在同一VPC網(wǎng)絡(luò)中,兩臺機(jī)器可以免費(fèi)享有高達(dá)5Gbps的內(nèi)網(wǎng)互聯(lián),Minio的分布式部署是會(huì)在節(jié)點(diǎn)間同步數(shù)據(jù)的,公網(wǎng)帶寬太小不夠爽(
至于服務(wù)器的內(nèi)網(wǎng)IP,可以在控制臺的網(wǎng)絡(luò)信息里看到

## 設(shè)置Hosts
由于Minio的分布式部署支持省略,我們參考下面的樣式來增加節(jié)點(diǎn)
```javascript
?http://host{1...n}/export{1...m}
```
其中,n和m都為整數(shù),host為節(jié)點(diǎn)名稱,export為硬盤路徑
例如
```javascript
http://host{1...2}/export{1...2}
```
的執(zhí)行效果等同于
```javascript
http://host1/export1http://host1/export2http://host2/export1http://host1/export2
```
所以我們使用Hosts文件來定義節(jié)點(diǎn)名稱以及節(jié)點(diǎn)應(yīng)該解析到的IP地址
```javascript
vi /etc/hosts
```
按`i`進(jìn)入編輯模式,在最下行添加hosts解析,具體IP地址請據(jù)自身內(nèi)網(wǎng)IP地址進(jìn)行修改,不能照抄
```javascript
10.0.4.13 minio-110.0.4.12 minio-2
```
添加完成后按ESC后輸入`:wq`保存,效果如下圖

此時(shí),可以使用PING命令來測試連通情況

如果沒有PING命令,安裝下面的軟件包即可
```javascript
apt-get updateapt install net-tools # ifconfigapt install iputils-ping # ping
```
## 部署Docker
這個(gè)沒有什么好細(xì)講的,使用Docker官方的安裝腳本即可,默認(rèn)安裝最新的發(fā)行版Docker
```javascript
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
```
## 部署鏡像
### 基礎(chǔ)配置命令
```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}
```
此配置下,兩個(gè)節(jié)點(diǎn)均為兩塊硬盤,分別為data1和data2,控制臺端口為9001
訪問任意節(jié)點(diǎn)的`公網(wǎng)IP:9001`即可進(jìn)入控制臺
注意:`http://minio-{1...2}/data{1...2}` 中的點(diǎn)必須為三個(gè)英文.

控制臺效果
### 進(jìn)階配置命令
```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`兩個(gè)參數(shù),效果為:
- MINIO\_SERVER\_URL 設(shè)置Minio的API域名(對應(yīng)API的IP:9000)
● - MINIO\_BROWSER\_REDIRECT\_URL 設(shè)置Minio Web Console域名(對應(yīng)Web Console的IP:9001)
這兩條參數(shù)可以讓控制臺的分享功能調(diào)用域名來分享,而不是自動(dòng)獲取到的內(nèi)網(wǎng)IP地址/容器IP
實(shí)際訪問需要配置好NGINX,具體可參考我部署單節(jié)點(diǎn)時(shí)的文章

設(shè)置域名后的分享效果
# 其他功能及效果驗(yàn)證
在分布式部署的情況下,Minio將會(huì)自動(dòng)啟用糾刪碼模式,并且在單節(jié)點(diǎn)不可用的版本控制、[對象鎖定](https://blog.im.ci/?golink=aHR0cHM6Ly9kb2NzLm1pbi5pby9taW5pby9iYXJlbWV0YWwvb2JqZWN0LXJldGVudGlvbi9taW5pby1vYmplY3QtbG9ja2luZy5odG1sI21pbmlvLW9iamVjdC1sb2NraW5n)以及數(shù)據(jù)保留功能

在分布式部署下可用的更多功能
此時(shí)我們創(chuàng)建桶后進(jìn)行文件上傳



可以看到每個(gè)節(jié)點(diǎn)虛擬出的每塊硬盤都上傳了一份文件,也就是同時(shí)會(huì)有四份文件存放在不同的位置。
# 一些遇到問題的小提示
● - 部署如果遇到鏡像無法啟動(dòng),使用`docker logs minio1`來查看鏡像日志,再根據(jù)日志進(jìn)行排錯(cuò)。
● - Minio分布式部署無法使用端口轉(zhuǎn)發(fā),必須使用本機(jī)網(wǎng)絡(luò),也就是鏡像啟動(dòng)參數(shù)攜帶`--net=host`。
另外,如果log報(bào)出`Please provide an even number of endpoints greater or equal to 4` ,則代表硬盤數(shù)量不足4個(gè),請刪除單節(jié)點(diǎn)下配置文件最后的`/data`,此內(nèi)容是指定啟用的磁盤路徑。
# 參考資料
● - [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/