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。
负载均衡代理