Ansible + Docker 部署 MinIO 集群
1. 准备工作
1.1 主机列表
IP | 主机名 | 内存(GB) | CPU核数 | 磁盘 | 操作系统 | CPU 架构 |
---|---|---|---|---|---|---|
10.0.0.13 | arc-pro-dc01 my.registry.com |
16 | 1 | 500GB | CentOS 7.9.2009 | x86_64 |
10.0.0.16 | arc-pro-dc04 | 8 | 2 | 500GB | CentOS 7.9.2009 | x86_64 |
10.0.0.17 | arc-pro-dc05 | 8 | 2 | 500GB | CentOS 7.9.2009 | x86_64 |
10.0.0.18 | arc-pro-dc06 | 8 | 2 | 500GB | CentOS 7.9.2009 | x86_64 |
10.0.0.19 | arc-pro-dc07 | 8 | 2 | 500GB | CentOS 7.9.2009 | x86_64 |
10.0.0.20 | arc-pro-dc08 | 8 | 2 | 500GB | CentOS 7.9.2009 | x86_64 |
10.0.0.21 | arc-pro-dc09 | 8 | 2 | 500GB | CentOS 7.9.2009 | x86_64 |
1.2 已安装服务
版本 | arc-pro-dc01 | arc-pro-dc04 | arc-pro-dc05 | arc-pro-dc06 | arc-pro-dc07 | arc-pro-dc08 | arc-pro-dc09 | |
---|---|---|---|---|---|---|---|---|
Ansible | 2.9.27 | ✅ | ||||||
Harbor | v2.13.2 | ✅ | ||||||
Docker | 28.1.1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Docker Compose | v2.39.2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
说明:
- 每个服务器的 IP 均是静态的
- 每个服务器的防火墙都已关闭
- 每个服务器的 SELINUX 已经禁用
- 每个服务器均存在一个管理员用户 admin,该用户可以免密码执行 sudo 命令;
- 在 arc-pro-dc01 机器上,可以使用 admin 用户免密码 ssh 到其他机器;
- 服务器之间的时间同步;
- 所有操作均使用 admin 用户完成;
- 私有镜像仓库地址:https://my.registry.com:10443。
为使集群满足以上要求,参考下列文章进行配置:
- 使用 VMware Workstation 安装 CentOS-7 虚拟机
- 用 Ansible 批量完成 CentOS 7 操作系统基础配置
- 使用 Ansible 批量安装 Docker
- Docker 私有镜像仓库 Harbor 安装部署带签名认证
1.3 集群规划
版本 | arc-pro-dc04 | arc-pro-dc05 | arc-pro-dc0 6 | arc-pro-dc07 | arc-pro-dc08 | arc-pro-dc09 | |
---|---|---|---|---|---|---|---|
MinIO | RELEASE.2025-09-07T16-13-09Z | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
每台机器使用一个数据目录:/data/minio/data
1.4 镜像准备
找一个可以连接互联网的、已经安装了 docker 的服务器,下载镜像
docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z
docker image save minio/minio:RELEASE.2025-09-07T16-13-09Z -o minio.RELEASE.2025-09-07T16-13-09Z.tar.gz
将 nifi.1.28.1.tar.gz 上传到本集群任意一台服务器,导入镜像:
docker load minio.RELEASE.2025-09-07T16-13-09Z.tar.gz
docker tag minio/minio:RELEASE.2025-09-07T16-13-09Z my.registry.com:10443/library/minio/minio:RELEASE.2025-09-07T16-13-09Z
# 上传到私服
docker push my.registry.com:10443/library/minio/minio:RELEASE.2025-09-07T16-13-09Z
2. Ansible 文件
2.1 Ansible 目录结构
说明:在 arc-pro-dc01 机器上,执行 ansible 命令的基础目录为 /home/admin/ansible
$ tree /home/admin/ansible/
/home/admin/ansible/
├── ansible.cfg
├── hosts
└── minio ├── docker-compose.yml.j2
└── start-minio-container.yml
2.2 ansible.cfg
[defaults]
inventory=./hosts
host_key_checking=False
2.3 hosts
[minio]
arc-pro-dc04
arc-pro-dc05
arc-pro-dc06
arc-pro-dc07
arc-pro-dc08
arc-pro-dc09
2.4 docker-compose.yml.j2
services:minio:image: my.registry.com:10443/library/minio/minio:RELEASE.2025-09-07T16-13-09Zrestart: unless-stoppedcontainer_name: miniohostname: {{ inventory_hostname }}network_mode: hostenvironment:MINIO_VOLUMES: "http://arc-pro-dc0{4...9}:9000/root/minio/data"MINIO_ROOT_USER: "minioadmin"MINIO_ROOT_PASSWORD: "minioadmin123"volumes:- {{ data_dir }}:/root/minio/datacommand: server --console-address ":9090"
说明:
- MINIO_ROOT_USER:管理员用户名
- MINIO_ROOT_PASSWORD:管理员密码(最少 8 位)
- MINIO_VOLUMES:集群地址和数据目录,arc-pro-dc0{4...9} 代表从 arc-pro-dc04 到 arc-pro-dc09 这 6 台机器,每个 minio 容器内的数据盘都是 /root/minio/data
2.5 start-minio-container.yml
---
- name: Start Minio Containerhosts: miniobecome: truegather_facts: falsevars:minio_owner: adminminio_group: admincompose_file_dir: /opt/app/miniodata_dir: /data/minio/datatasks:- name: Remove old minio container if existscommand: docker rm -f minioignore_errors: true- name: Remove minio directories if they existfile:path: "{{ item }}"state: absentloop:- "{{ compose_file_dir }}"- "{{ data_dir }}"- name: Create minio directoriesfile:path: "{{ item }}"state: directoryowner: "{{ minio_owner }}"group: "{{ minio_group }}"mode: '0755'loop:- "{{ compose_file_dir }}"- "{{ data_dir }}"- name: Deploy docker-compose.ymltemplate:src: docker-compose.yml.j2dest: "{{ compose_file_dir }}/docker-compose.yml"owner: "{{ minio_owner }}"group: "{{ minio_group }}"mode: '0644'- name: Start minio containercommand: docker-compose -f {{ compose_file_dir }}/docker-compose.yml up -d
3. 部署
在 arc-pro-dc01(Ansible 管理节点) 服务器执行
$ pwd
/home/admin/ansible# 部署并启动 Minio 集群
$ ansible-playbook nifi/start-minio-container.yml
查看任一一个节点的容器日志,查看登录信息:docker logs minio
INFO: IAM load(startup) finished. (duration: 4.164028ms)
---------------------------
MinIO Object Storage Server
Copyright: 2015-2025 MinIO, Inc.
License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
Version: RELEASE.2025-09-07T16-13-09Z (go1.24.6 linux/amd64)API: http://10.0.0.16:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://127.0.0.1:9000
WebUI: http://10.0.0.16:9090 http://172.17.0.1:9090 http://172.18.0.1:9090 http://127.0.0.1:9090 Docs: https://docs.min.io
---------------------------
# 这里说建议内核版本升级到 4.0 以上,生产环境要考虑升级
WARN: Detected Linux kernel version older than 4.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x linux kernel version for best performance
5. 访问页面
访问任一节点:
- http://10.0.0.16:9090
- http://10.0.0.17:9090
- http://10.0.0.18:9090
- http://10.0.0.19:9090
- http://10.0.0.20:9090
- http://10.0.0.21:9090