一. 简介
MinIO 分布式集群通过多节点与纠删码技术,实现高可用与高可靠,是生产环境的推荐部署方式。以下是其核心概念与部署指南。
1.核心概念与优势
纠删码 (Erasure Coding)
分布式 MinIO 默认启用纠删码,将对象切分为数据块和校验块,分散存储。这能以更少的存储空间实现同等级别的数据冗余。- 示例:4+2 纠删码(4个数据块+2个校验块)可容忍任意 2 个块(节点或磁盘)损坏。
- 优势:相比传统三副本(300%存储开销),纠删码存储开销更低(如4+2模式为50%),容量利用率更高。
高可用与一致性
- 可用性:在 N 节点集群中,只要有 N/2个节点在线,数据就可读;需要 N/2 + 1个节点在线才能写入。例如,4 节点集群最多可容忍 2 节点故障(只读),但写入需要至少 3 节点存活。
- 一致性:所有读写操作遵循 read-after-write和 list-after-write强一致性模型。
2. 集群规模
- 驱动器数量:单个纠删码集合支持 4–16 个驱动器。集群总驱动器数必须是纠删码集合大小的整数倍。
- 节点数量:官方建议至少 4 个节点,生产环境推荐 4、8、16 等偶数节点,便于故障容忍和扩展。
3. 核心优势
- 高可靠:数据多副本/纠删码存储,无单点故障。
- 高可用:部分节点宕机不影响服务。
- 易扩展:可从4节点起步,按需横向扩展。
- 高性能:专为海量小文件和高并发场景优化。
4. 部署要点
1. 环境与规划
- 节点与磁盘:至少 4 台服务器,每台配备独立的本地磁盘(建议使用 XFS 文件系统),禁止共用 /分区。
- 网络:节点间内网互通,延迟建议 ≤5ms,带宽 ≥1Gbps(推荐10Gbps)。开放 9000 (API) 和 9001 (控制台) 端口。
- 系统配置:所有节点时间同步(NTP),关闭 SELinux,并调高文件句柄数(nofile≥ 65535)
二. Minio分布式集群搭建(多机器多硬盘)
1. 环境说明:4台服务器
节点 数据目录(不能是/root下的) 进程/脚本目录
10.34.252.87 /home/data/minio/{data1.data2} /home/data/minio/{run}
10.34.252.88 /home/data/minio/{data1.data2} /home/data/minio/{run}
10.34.252.89 /home/data/minio/{data1.data2} /home/data/minio/{run}
10.34.252.93 /home/data/minio/{data1.data2} /home/data/minio/{run}
2. 从官网获取Minio二进制文件并上传至4台集群主机:
下载二进制文件:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
上传Minio到4台集群主机进程脚本目录 /home/data/minio/{run}scp,ftp等方式
3. 创建目录(4台集群主机都执行)
mkdir -p /home/data/minio/{run,data1,data2} && mkdir -p /etc/minio
4. 集群启动文件配置(4台集群主机都执行)
Minio默认9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口
注意 :
MINIO_ACCESS_KEY:用户名,长度最小是5个字符
MINIO_SECRET_KEY:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符
–config-dir:指定集群配置文件目录
vi /home/data/minio/run/minio-run.sh
(1)集群节点10.34.252.87内容为:
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=Mi_nio@min31#com
/home/data/minio/run/minio server --config-dir /etc/minio \
--address "10.34.252.87:9000" \
http://10.34.252.87/home/data/minio/data1 http://10.34.252.87/home/data/minio/data2 \
http://10.34.252.88/home/data/minio/data1 http://10.34.252.88/home/data/minio/data2 \
http://10.34.252.89/home/data/minio/data1 http://10.34.252.89/home/data/minio/data2 \
http://10.34.252.93/home/data/minio/data1 http://10.34.252.93/home/data/minio/data2
(2)集群节点10.34.252.88内容为:
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=Mi_nio@min31#com
/home/data/minio/run/minio server --config-dir /etc/minio \
--address "10.34.252.88:9000" \
http://10.34.252.87/home/data/minio/data1 http://10.34.252.87/home/data/minio/data2 \
http://10.34.252.88/home/data/minio/data1 http://10.34.252.88/home/data/minio/data2 \
http://10.34.252.89/home/data/minio/data1 http://10.34.252.89/home/data/minio/data2 \
http://10.34.252.93/home/data/minio/data1 http://10.34.252.93/home/data/minio/data2
(3)集群节点10.34.252.89内容为:
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=Mi_nio@min31#com
/home/data/minio/run/minio server --config-dir /etc/minio \
--address "10.34.252.89:9000" \
http://10.34.252.87/home/data/minio/data1 http://10.34.252.87/home/data/minio/data2 \
http://10.34.252.88/home/data/minio/data1 http://10.34.252.88/home/data/minio/data2 \
http://10.34.252.89/home/data/minio/data1 http://10.34.252.89/home/data/minio/data2 \
http://10.34.252.93/home/data/minio/data1 http://10.34.252.93/home/data/minio/data2
(4)集群节点10.34.252.93内容为:
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=Mi_nio@min31#com
/home/data/minio/run/minio server --config-dir /etc/minio \
--address "10.34.252.93:9000" \
http://10.34.252.87/home/data/minio/data1 http://10.34.252.87/home/data/minio/data2 \
http://10.34.252.88/home/data/minio/data1 http://10.34.252.88/home/data/minio/data2 \
http://10.34.252.89/home/data/minio/data1 http://10.34.252.89/home/data/minio/data2 \
http://10.34.252.93/home/data/minio/data1 http://10.34.252.93/home/data/minio/data2
5. 创建Minio.server,将minio加入系统服务(4台集群主机都执行)
vi /usr/lib/systemd/system/minio.service
内容为:
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/home/data/minio/run/
ExecStart=/home/data/minio/run/minio-run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
6. 权限修改(4台集群主机都执行)
chmod +x /usr/lib/systemd/system/minio.service && chmod +x
/home/data/minio/run/minio && chmod +x /home/data/minio/run/minio-run.sh
7. 启动集群(4台集群主机都执行)
systemctl daemon-reload
systemctl start minio
systemctl enable minio
查看集群状态
systemctl status minio.service -l
日志类似以下内容,则启动成功:
[root@cn-gri-gicar-bdms-05 csz]# systemctl status minio.service -l
● minio.service - Minio service
Loaded: loaded (/usr/lib/systemd/system/minio.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-01-22 10:44:29 CST; 43min ago
Docs: https://docs.minio.io/
Main PID: 3663052 (minio-run.sh)
Tasks: 41
Memory: 89.2M
CGroup: /system.slice/minio.service
├─3663052 /bin/bash /root/docker/minio/run/minio-run.sh
└─3663053 /root/docker/minio/run/minio server --config-dir /etc/minio --address 10.34.252.87:9000 http://10.34.252.87/home/data/minio/data1 http://10.34.252.87/home/data/minio/data2 http://10.34.252.88/home/data/minio/data1 http://10.34.252.88/home/data/minio/data2 http://10.34.252.89/home/data/minio/data1 http://10.34.252.89/home/data/minio/data2 http://10.34.252.93/home/data/minio/data1 http://10.34.252.93/home/data/minio/data2
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Endpoint: http://10.34.252.87:9000
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Browser Access:
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: http://10.34.252.87:9000
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Object API (Amazon S3 compatible):
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Go: https://docs.min.io/docs/golang-client-quickstart-guide
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Java: https://docs.min.io/docs/java-client-quickstart-guide
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Python: https://docs.min.io/docs/python-client-quickstart-guide
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Jan 22 10:44:32 cn-gri-gicar-bdms-05 minio-run.sh[3663052]: Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
8. 登录页面测试
登录任一页面,
http://10.34.252.87:9000
http://10.34.252.88:9000
http://10.34.252.89:9000
http://10.34.252.93:9000
页面创建bucket,上传两个文件,
查看4台集群主机存储情况
Jan 22 10:12:03 k8s3 minio-run.sh[1295181]: Disk /root/docker/minio/data1 is a root disk. Please ensure the disk is mounted properly, refusing to use root disk.
存储数据目录不能是/root目录,否则会报错
三、 客户端连接与高可用
通过 mc admin info myminio命令检查集群状态是否为OK。手动关闭一或两个 MinIO 节点,验证服务是否依然可用,以及数据读写是否正常。
四、 安全与运维
1. 安全加固:传输加密:配置 TLS/HTTPS,可使用 Let's Encrypt 证书或企业内建 CA。
4. 监控与告警
- 指标暴露:MinIO 内置 Prometheus 指标端点 (/minio/prometheus/metrics),可用于监控集群健康、请求延迟、存储使用率等关键指标。
- 告警设置:当存储使用率超过 80-85% 或节点离线时触发告警。
5. 备份与升级
- 备份:定期使用 mc mirror 或 rclone 等工具将数据同步到异地或对象存储作为备份。
- 升级:遵循官方文档的滚动升级流程,逐节点进行操作,避免服务中断

