在 Docker Swarm 上部署 Minio 集群

1 Swarm 集群初始化
准备四台服务器分别为 minio1、minio2、minio3、minio4,选择 minio1 为主节点,另外三个为工作节点。
主节点执行docker swarm init --advertise-addr 192.168.3.48
在这里插入图片描述
将红框中内容分别在三个工作节点执行
主节点执行docker node ls
如果出现类似下面的输出,就说明集群创建成功了。
在这里插入图片描述
2 部署 minio 服务
创建密钥(下文compose-secrets.yaml中写秘钥就不用了执行了)
echo “minio” | docker secret create access_key -
echo “12345678” | docker secret create secret_key -
在这里插入图片描述
绑定容器与节点
docker node update --label-add minio-node1=true minio1
docker node update --label-add minio-node2=true minio2
docker node update --label-add minio-node3=true minio3
docker node update --label-add minio-node4=true minio4
在这里插入图片描述
3 配置Stack compose 文件
version: ‘3.7’
services:
minio1:
image: minio/minio:latest
hostname: minio1
volumes:
- minio1-data1:/export1
- minio1-data2:/export2
ports:
- “9001:9000”
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio-node1==true
command: server http://minio{1…4}/export{1…2} --console-address “:10000”
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: 12345678
MINIO_PROMETHEUS_AUTH_TYPE: public
MINIO_PROMETHEUS_JOB_ID: minio-job
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”]
interval: 30s
timeout: 20s
retries: 3

minio2:
image: minio/minio:latest
hostname: minio2
volumes:
- minio2-data1:/export1
- minio2-data2:/export2
ports:
- “9002:9000”
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio-node2==true
command: server http://minio{1…4}/export{1…2} --console-address “:10000”
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: 12345678
MINIO_PROMETHEUS_AUTH_TYPE: public
MINIO_PROMETHEUS_JOB_ID: minio-job
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”]
interval: 30s
timeout: 20s
retries: 3

minio3:
image: minio/minio:latest
hostname: minio3
volumes:
- minio3-data1:/export1
- minio3-data2:/export2
ports:
- “9003:9000”
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio-node3==true
command: server http://minio{1…4}/export{1…2} --console-address “:10000”
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: 12345678
MINIO_PROMETHEUS_AUTH_TYPE: public
MINIO_PROMETHEUS_JOB_ID: minio-job
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”]
interval: 30s
timeout: 20s
retries: 3

minio4:
image: minio/minio:latest
hostname: minio4
volumes:
- minio4-data1:/export1
- minio4-data2:/export2
ports:
- “9004:9000”
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio-node4==true
command: server http://minio{1…4}/export{1…2} --console-address “:10000”
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: 12345678
MINIO_PROMETHEUS_AUTH_TYPE: public
MINIO_PROMETHEUS_JOB_ID: minio-job
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”]
interval: 30s
timeout: 20s
retries: 3
volumes:
minio1-data1:
minio1-data2:
minio2-data1:
minio2-data2:
minio3-data1:
minio3-data2:
minio4-data1:
minio4-data2:
networks:
minio_distributed:
driver: overlay
secrets:
secret_key:
external: true
access_key:
external: true
创建docker-compose-secrets.yaml配置文件
在docker-compose-secrets.yaml目录下执行
docker stack deploy --compose-file=docker-compose-secrets.yaml minio_stack

查看节点信息docker service ls
在这里插入图片描述
查看容器信息docker ps -a
如果不出意外,在四个节点上都会分别运行一个 docker 容器。通过 docker logs -f 可以查看日志,如果有类似下面的输出,表示启动成功:
在这里插入图片描述
4 删除集群
如果出现错误,想推导重来,那么可以通过下面这条命令删掉这个 stack:
docker stack rm minio_stack
集群会在每个节点逐个删除容器。如果删不掉,就只能手动 kill 了。创建的 volume 不会自动删除,需要在每个节点上手动执行下面的命令进行清除:
docker volume prune
docker swarm leave --force每个节点执行,然后就可以重新初始化swarm
补充:docker容器添加对外映射端口
将现有的容器打包成镜像,然后在使用新的镜像运行容器时重新指定要映射的端口
大概过程如下:
先停止现有容器
docker stop container-name
将容器commit成为一个镜像
docker commit container-name new-minio
用新镜像运行容器
docker run -it -d --name container-name -p p1:p1 -p p2:p2 new-minio

使用portainer可视化界面,分别在四个服务中添加minio console的端口
在这里插入图片描述

DockerMinIO 集群结合使用可以帮助你创建一个可扩展、高性能的对象存储系统。MinIO 是一个开源、高性能、云原生的对象存储服务器,非常适合部署Docker 容器中。以下是使用 DockerMinIO 集群的基本步骤: 1. **安装 MinIO**: - 在 Docker 容器中安装 MinIO,你可以从官方 Docker Hub 获取预构建的镜像:`docker pull minio/minio` - 或者拉取最新镜像并运行容器:`docker run --name my-minio -p 9000:9000 -v minio-data:/data minio/minio` 2. **配置和初始化集群**: - 如果需要多个节点组成集群,可以运行多个容器,每个容器都需要一个唯一的端口映射,如9000、9001等,并使用相同的数据卷挂载。 - 使用环境变量 `MINIO_ACCESS_KEY` 和 `MINIO_SECRET_KEY` 设置访问密钥和秘密密钥。 - 对于多节点集群,可以通过 `minio gateway s3` 或 `minio gateway http` 创建一个基于 S3 或 HTTP 协议的网关,使外部服务可以访问集群。 3. **配置客户端**: - 使用 `mc`(MinIO 客户端)工具连接到集群,需要提供所有节点的 URL 和相应的认证信息。 4. **故障转移和负载均衡**: - 可以通过 Docker Compose 或 Kubernetes 等容器编排工具来自动管理集群,实现故障转移和负载均衡。 5. **安全和持久化**: - 使用 Docker Network 或 Swarm 来限制对集群的访问,保护敏感数据。 - 数据卷(如 EBS 或本地存储)用于持久化存储,保证数据在容器重启后仍然可用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值