Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
Minio的实际应用场景
Minio作为轻量级的对象存储服务,在企业级应用中有着广泛的应用场景:
媒体文件存储:存储和管理图片、视频、音频等媒体文件,支持高并发访问。
备份与归档:作为数据备份和归档的存储解决方案,提供高可靠性和安全性。
容器镜像存储:作为Docker、Kubernetes等容器技术的镜像仓库。
日志存储:存储应用程序和系统的日志文件,方便后续分析和查询。
数据湖:作为数据湖的存储底层,支持大数据分析和处理。
边缘计算:在边缘设备上部署Minio,实现边缘数据的本地存储和处理。
个人见解:Minio的技术价值
Minio的出现为企业级对象存储提供了一种轻量级、高性能的解决方案,其技术价值主要体现在:
高性能:基于Go语言开发,具有出色的性能表现,适合处理高并发请求。
易于部署:安装和配置简单,支持多种部署模式,包括单机、分布式和云原生部署。
S3兼容:与Amazon S3 API兼容,便于迁移和集成现有系统。
可扩展性:支持横向扩展,可以通过增加节点来提高存储容量和性能。
数据安全:内置纠删码和校验和机制,确保数据的可靠性和安全性。
| 项目 | 参数 |
|---|---|
| 最大驱动器数量 | 16 |
| 最小驱动器数量 | 4 |
| 读仲裁 | n/2 |
| 写仲裁 | n/2+1 |
| 最大桶数 | 无限制 |
| 每桶最大对象数 | 无限制 |
| 最大对象大小 | 5TB |
| 最小对象大小 | 0 |
| 每次 PUT 操作的最大对象大小 | 5GB |
| 每次上传的最大 Part 数量 | 10000 |
| Part 大小 | 5MB到5GB. 最后一个part可以从0B到5GB |
| 每次list parts请求可返回的part最大数量 | 1000 |
| 每次list objects请求可返回的object最大数量 | 1000 |
| 每次list multipart uploads请求可返回的multipart uploads最大数量 | 1000 |
一.minio基本原理
1.minio基本特点
高性能:作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GG/s的写速率
可扩容:不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心
云原生:容器化、基于K8S的编排、多租户支持
Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。
可对接后端存储: 除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。
SDK支持: 基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持
Lambda计算: Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等数据库。
有操作页面
功能简单: 这一设计原则让MinIO不容易出错、更快启动
支持纠删码:MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据
2.minio的存储机制
Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。
3.minio的纠删码
纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6 等)、RS(Reed-Solomon)里德-所罗门类纠删码和 LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code 是一种编码技术,它可以将 n 份原始数据,增加 m 份数据,并能通过 n+m 份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来
4.minio的擦除代码
MinIO 使用每个对象的内联擦除编码来保护数据,这种编码是用汇编代码编写的,可以提供尽可能高的性能。MinIO 使用 Reed-Solomon 代码将对象条带化为 n/2 数据和 n/2 奇偶校验块——尽管这些可以配置为任何所需的冗余级别。这意味着在 12 个驱动器设置中,一个对象被分割为 6 个数据和 6 个奇偶校验块。即使您丢失了 5 个(n/2) -1 个驱动器,无论是奇偶校验还是数据,您仍然可以从剩余驱动器可靠地重构数据。MinIO 的实现确保即使多个设备丢失或不可用,也可以读取对象或写入新对象。最后,MinIO 的擦除代码在对象级别,可以一次治愈一个对象。
二.minio安装
1 | wget https://dl.min.io/server/minio/release/linux-amd64/minio |
后台运行
1 | nohup /usr/local/bin/minio server /home/minio/data > /home/minio/data/minio.log 2>&1 & |
minio默认端口9000,直接访问ip:9000,如图:

三.minio使用
引入minio客户端jar包
1 | <dependency> |
minio相关的代码及具体使用:
四. minio分布式集群搭建
生产环境下最少4个节点
| 节点 | IP | data |
|---|---|---|
| minio1 | 10.0.0.1 | /home/minio/data |
| minio2 | 10.0.0.2 | /home/minio/data |
| minio3 | 10.0.0.3 | /home/minio/data |
| minio4 | 10.0.0.4 | /home/minio/data |
1.初始化ACCESS KEY 和SECRET KEY
1 | export MINIO_ACCESS_KEY=admin |
2.搭建minio
1 | ./minio server --address :9000 http://10.0.0.1/home/minio/data \ |
注意:minio搭建机器时间差距不能过大,使用以下指令查看和修改当前系统时间:
1 | date |
五.脚本启动minio
1.创建run.sh 文件
1 | touch run.sh |
2.编辑run.sh 文件
1 |
|
3.minio.service
WorkingDirectory:二进制文件
ExecStart:集群启动脚本
1 | cat > /usr/lib/systemd/system/minio.service <<EOF |
4.权限管理
1 | chmod +x data && chmod +x run.sh |
5.启动minio
1 | systemctl daemon-reload |
开机自启动
1 | systemctl enable minio.service |
六.nginx动态代理
修改nginx的conf文件
1 | upstream http_minio { |
进入sbin目录下重启nginx即可
1 | ./nginx -s reload |
访问10.0.0.1:9001
七.Minio的发展趋势
1. 技术演进
Minio 作为一个开源的对象存储服务,一直在不断演进和完善:
- 版本更新:从早期版本到现在的最新版本,Minio 不断添加新特性和改进性能。
- 云原生支持:加强了对 Kubernetes 等容器编排平台的支持,提供了更完善的云原生部署方案。
- 安全性增强:不断加强安全特性,如加密、访问控制等。
- 生态系统扩展:与更多的工具和框架集成,如 Prometheus、Grafana 等监控工具。
2. 与新兴技术的融合
- 边缘计算:Minio 正在积极拥抱边缘计算,提供边缘节点的数据存储解决方案。
- AI/机器学习:与机器学习框架集成,支持模型训练数据的存储和管理。
- 大数据:与 Hadoop、Spark 等大数据处理框架集成,作为数据湖的存储底层。
3. 未来发展方向
- 多租户支持:进一步增强多租户功能,满足企业级应用的需求。
- 混合云:支持混合云部署,实现数据在本地和云之间的无缝流动。
- 智能存储:引入 AI 技术,实现存储的智能化管理和优化。
- 更低的存储成本:通过技术创新,进一步降低存储成本。
八.总结与个人感悟
Minio 作为一个轻量级的对象存储服务,已经在企业级应用中得到了广泛的应用。它的出现为企业提供了一种高性能、可靠、易于部署的对象存储解决方案。
技术价值
- 填补了轻量级对象存储的空白:Minio 提供了一种介于本地文件系统和大型分布式存储之间的解决方案,适合中小规模的应用场景。
- 简化了存储管理:Minio 的设计理念是简单易用,大大简化了存储管理的复杂度。
- 降低了存储成本:作为开源软件,Minio 可以帮助企业降低存储成本,避免了商业存储解决方案的高昂费用。
应用价值
- 加速应用开发:Minio 提供了简单易用的 API,加速了应用开发的速度。
- 提高数据可靠性:通过纠删码和校验和机制,Minio 提高了数据的可靠性和安全性。
- 支持业务创新:作为基础存储服务,Minio 支持了各种业务创新,如媒体服务、备份服务等。
个人感悟
作为一名技术人员,我认为 Minio 的成功在于它的专注和简洁。它专注于解决对象存储的核心问题,提供了简单而强大的解决方案。这种专注和简洁的设计理念值得我们学习。
在未来的技术发展中,随着数据量的不断增长,对象存储的重要性将会越来越凸显。Minio 作为一个开源的对象存储服务,将会继续发挥重要的作用。对于我们来说,学习和掌握 Minio 不仅是了解一种技术,更是理解现代存储架构的重要途径。