MinIO分布式文件服务器搭建与入门
一、介绍
1、对象存储和分布式文件简介
阿里云OSS对象存储:https://help.aliyun.com/product/31815.html
对象存储服务OSS(Object Storage Service)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。对象存储最大的优势就在于它可以存储大容量的非结构化数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。对于大多数的企业来说,这可以说是最为理想的存储媒介了
分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
2、MinIO简介
MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议,项目地址是 https://github.com/minio/minio,官网是 https://min.io,中文官网是www.minio.org.cn
它适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小到 1 KB,大到 5 TB 都可以支持。
3、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的磁盘也能恢复数据
纠删码是一种用来重建丢失或损坏数据的数学算法。MinIO 使用 Reed-Solomon 码将需要存储的对象切分为可变数据块和奇偶校验块。例如,在由 12 个驱动器构成的存储架构中,对象分片范围可以是 6 个数据块、6 个奇偶校验块到 10 个数据块、2 个奇偶校验块。
二、MinIO安装入门
1、介绍
由于 MinIO 是 Go 写的,所以就一个运行程序,因此安装部署 MinIO 就非常简单。在文档 https://min.io/download 中,有 Windows、Linux、MacOS、Docker、Kubernetes、Source 六种安装方式。
2、快速安装
2.1 Windows
需要在 Windows PowerShell 中执行。
1 | ## 国外资源,龟速下载,建议科学上网 |
2.2 Linux
1 | ## 国外资源,龟速下载 |
2.3 MacOS
1 | ## 国外资源,龟速下载 |
2.4 Docker(推荐)
linux单个docker启动
1 | docker pull minio/minio |
linux docker-compose启动(推荐),首先编写docker-compose.yml
文件,最后在该目录下docker-compose up -d
成功启动
1 | version: '3' |
启动成功后打开防火墙,浏览http://localhost:9001
即可进入可视化页面
3、UI界面界面简单使用
https://docs.min.io/minio/baremetal/console/minio-console.html#
3.1 新建存储桶
首先登录http://localhost:9001
,点击 [Create Bucket] 按钮,新建一个 Bucket 存储桶,用于稍后文件的上传
这里存储桶名称长度必须⾄少为3且不超过63个字符,不得包含⼤写字符或下划线,必须以⼩写字母或数字开头。
3.2 添加访问规则
默认配置下,访问存储桶是需要请求授权的。但是在实际场景下,我们往往希望允许直接访问,此时就需要添加一条 readonly 或readwrite访问规则;或者直接在[Access Policy]直接设置public(不安全)
① 点击右上角的 [Manage] 设置图标,然后选择 [Access Rules] 菜单。
② 点击 [Add Access Rule] 按钮,添加一条 Prefix 为 /
或者*
,Access 为 readwrite
的规则。
3.3 上传文件
点击 [Upload] 按钮,点击 [Upload File] 选项,选择一个文件上传
3.4 访问文件
文件的访问地址的格式为 <http://127.0.0.1:9000/{bucket}/{name}>
,注意是 9000 端口。比如我的是http://192.168.31.34:9000/textbook/yuanshen.png
三、SpringBoot整合MinIO
1、引入项目依赖
注意7.x和8.x版本有一定差异,这里在pom.xml
引入最新版
1 | <dependency> |
2、配置文件设置
在application.yml
中设置
1 | # Tomcat |
3、配置类设置
读取配置文件的信息,这里的存储桶名称可以设置多个
1 |
|
设置返回类
1 |
|
4、工具类整合
4.1 简单整合MinIO上传工具
1 |
|
4.2 MinIO工具类
首先创建工具类,这里很多操作都在工具类里了,需要用到的地方通过MinioUtils.xxx()方法调用即可。另外,工具类中传递的endpoint、bucketName、accessKey、ecretKey等参数,都是在minio后台可以拿到的,没有的话也可以自己设置,同时要保证后台的存储桶是开放的,默认代码创建的都是私有的
1 | 4j |
创建controller层,这里要首先初始化静态类才能使用
1 |
|
参考文章