docker swarm 布署minio集群
Minio 集群至少需要四個節點,因此至少安裝 4 台虛擬機。主機名隨意,最好以數字后綴區分,方便識別。
前提條件
節點目錄如下:
192.168.20.245 master245
192.168.20.253 node253
192.168.20.252 node252
192.168.20.247 node247
主節點執行以下命令:
[root@master245 ~]# docker swarm init --advertise-addr 192.168.20.245
從節點分別執行以下命令:
[root@node253 ~]# docker swarm join --token SWMTKN-1-0djcl7ux0xg1hl366sgc1yohxc56wva55i8lggzc8hxh1uw487-39l3r4d0huc6fd1ktwotxx71f 192.168.20.245:2377
節點列表如下:
[root@master245 minio]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
yzq5drjkhurkx8b0qydzecxo9 * master245 Ready Active Leader 19.03.11
piipiswdy5bgvewtdt7brer16 node247 Ready Active 19.03.8
ozth72jm8rtq5wca6xgm9gc9r node252 Ready Active 19.03.8
pvic27dwckvuefq777frk9ee4 node253 Ready Active 19.03.11
刪除節點
# master
[root@master245 ~]# docker node update --availability drain node252
# node
[root@node252 ~]# docker swarm leave --force
# master
root@master245 ~]# docker node rm --force node252
主節點生成密鑰,手動生成接口使用的 access key 和 secret key
- 分布式Minio里所有的節點需要有同樣的access秘鑰和secret秘鑰,這樣這些節點才能建立聯接。為了實現這個,你需要在執行minio server命令之前,先將access秘鑰和secret秘鑰export成環境變量。
[root@master245 minio]# echo "minioadmin" | docker secret create access_key -
jdhw6gnannlfhicvnjv7kiibh
[root@master245 minio]# echo "12345678" | docker secret create secret_key -
szd7nzce95aeibrvn30keeapr
節點打標簽,綁定容器與節點之間一一對應的關系,主節點執行。
[root@master245 minio]# docker node update --label-add minio1=true yzq5drjkhurkx8b0qydzecxo9
yzq5drjkhurkx8b0qydzecxo9
[root@master245 minio]# docker node update --label-add minio2=true piipiswdy5bgvewtdt7brer16
piipiswdy5bgvewtdt7brer16
[root@master245 minio]# docker node update --label-add minio3=true ozth72jm8rtq5wca6xgm9gc9r
ozth72jm8rtq5wca6xgm9gc9r
[root@master245 minio]# docker node update --label-add minio4=true pvic27dwckvuefq777frk9ee4
pvic27dwckvuefq777frk9ee4
Stack compose 文件
修改主機名hostname,標簽等參數。
部署minio分布式服務,主節點執行
- 通過FTP或lrzsz工具上傳修改后的docker-compose-secrets.yaml文件到當前目錄。
- 分布式Minio使用的磁盤里必須是干凈的,里面沒有數據。
- 分布式Minio里的節點時間差不能超過3秒,你可以使用NTP 來保證時間一致。
[root@master245 ~]# yum -y install lrzsz
# 上傳
rz
# 下載
sz filename
[root@master245 minio]# docker stack deploy --compose-file=docker-compose-secrets.yaml minio_stack5
Creating network minio_stack5_minio_distributed
Creating service minio_stack5_minio3
Creating service minio_stack5_minio4
Creating service minio_stack5_minio1
Creating service minio_stack5_minio2
查看執行結果
[root@master245 minio]# docker stack ps minio_stack5
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pce2wnrvh3k1 minio_stack5_minio2.1 minio/minio:RELEASE.2020-06-03T22-13-49Z node247 Running Preparing 13 seconds ago
s6h6kryczbuy minio_stack5_minio1.1 minio/minio:RELEASE.2020-06-03T22-13-49Z master245 Running Preparing 29 seconds ago
wat061fy3is5 minio_stack5_minio4.1 minio/minio:RELEASE.2020-06-03T22-13-49Z node253 Running Preparing 41 seconds ago
2twtxfbnftge minio_stack5_minio3.1 minio/minio:RELEASE.2020-06-03T22-13-49Z node252 Running Starting less than a second ago
[root@master245 minio]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
5g8jq3002in5 minio_stack5_minio1 replicated 1/1 minio/minio:RELEASE.2020-06-03T22-13-49Z *:9001->9000/tcp
yvqc4mt08uep minio_stack5_minio2 replicated 1/1 minio/minio:RELEASE.2020-06-03T22-13-49Z *:9002->9000/tcp
4kss16v7h2pz minio_stack5_minio3 replicated 1/1 minio/minio:RELEASE.2020-06-03T22-13-49Z *:9003->9000/tcp
ppgqku1q61lo minio_stack5_minio4 replicated 1/1 minio/minio:RELEASE.2020-06-03T22-13-49Z *:9004->9000/tcp
- 如果不出意外,在四個節點上都會分別運行一個 docker 容器。
驗證
- 驗證是否部署成功,使用瀏覽器訪問Minio服務或者使用 MinIO Client mc。多個節點的存儲容量和就是分布式Minio的存儲容量。
刪除集群
[root@master245 minio]# docker stack rm minio_stack5
Removing service minio_stack5_minio1
Removing service minio_stack5_minio2
Removing service minio_stack5_minio3
Removing service minio_stack5_minio4
Removing network minio_stack5_minio_distributed
注意事項
- 默認情況下Docker Compose file使用的是最新版的MinIO server的Docker鏡像,你可以修改image tag來拉取指定版本的MinIO Docker image。
- 默認情況下會創建4個minio實例,你可以添加更多的MinIO服務(最多總共16個)到你的MinIO Comose deployment。添加一個服務。
- 復制服務定義並適當地更改新服務的名稱。
- 更新每個服務中的命令部分。
- 更新要為新服務公開的端口號。 另外,請確保分配給新服務的端口尚未使用。
- 默認情況下,MinIO服務使用的是local volume driver. 更多配置選項,請訪問Docker documentation。
- Docker compose file中的MinIO服務使用的端口是9001到9004,這允許多個服務在主機上運行。更多配置選項,請訪問Docker documentation。
- Docker Swarm默認使用的是ingress做負載均衡,你可以跟據需要配置external load balancer based。
負載均衡代理