docker swarm 部署minio集群

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
  • 记录此处生成的token,后续节点加入需用到。

从节点分别执行以下命令:

[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
  • 此处密码长度最小为8位。

节点打标签,绑定容器与节点之间一一对应的关系,主节点执行。

[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

负载均衡代理

posted @ 2020-06-05 16:31  wzh0717  阅读(4764)  评论(0编辑  收藏  举报