导航菜单

Minio简介及分布式集群部署

陆兴东 2026-04-14 11 浏览 其他

一. 简介

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,上传两个文件,

image.png

查看4台集群主机存储情况

image.png

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目录,否则会报错

 

三、 客户端连接与高可用

1. 统一入口:客户端(如应用、mc工具)应连接到一个负载均衡器(如 Nginx、HAProxy)的 VIP 或域名,而非直接连接单个 MinIO 节点。负载均衡器将请求转发至健康的后端节点。
2. 连接示例:
控制台: http://<负载均衡器IP>:9001
S3 API: http://<负载均衡器IP>:9000
3. 高可用验证:
    • 通过 mc admin info myminio 命令检查集群状态是否为 OK。
    • 手动关闭一或两个 MinIO 节点,验证服务是否依然可用,以及数据读写是否正常。

四、 安全与运维

1. 安全加固:传输加密:配置 TLS/HTTPS,可使用 Let's Encrypt 证书或企业内建 CA。

2. 访问控制:使用 mc admin user 和 mc admin policy创建具有最小权限的 IAM 用户和策略,替代使用根凭证。
3. 网络安全:通过防火墙或安全组限制访问来源 IP。

4. 监控与告警

    • 指标暴露:MinIO 内置 Prometheus 指标端点 (/minio/prometheus/metrics),可用于监控集群健康、请求延迟、存储使用率等关键指标。
    • 告警设置:当存储使用率超过 80-85% 或节点离线时触发告警。

5. 备份与升级

    • 备份:定期使用 mc mirror 或 rclone 等工具将数据同步到异地或对象存储作为备份。
    • 升级:遵循官方文档的滚动升级流程,逐节点进行操作,避免服务中断