介绍
MinIO是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。一个对象文件可以是任意大小,从几KB到最大5TB不等。
发展历史
MinIO的创始者是Anand Babu Periasamy, Harshavardhana等人。Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO,Harshavardhana曾经是GlusterFS的开发人员,直到2011年红帽收购了Gluster公司。
使用场景
MinIO作为一个开源的分布式对象存储系统,具有广泛的使用场景。无论是数据备份和恢复、大规模数据存储和分析、静态网站托管、私有云存储还是数据归档和长期存储,MinIO都能提供高可靠性、可扩展性和安全性的存储解决方案。
安装和配置 MinIO 服务器
MinIO 服务器可以在多种平台上运行,包括 Linux、macOS、Windows 和 Docker。接下来,我们将演示如何在Windows安装和配置 MinIO 服务器。
1.安装安装 MinIO 服务器
在 64 位 Windows 主机上运行 MinIO 服务器,可以从以下 URL 下载 MinIO 可执行文件:
https://dl.min.io/server/minio/release/windows-amd64/minio.exe
2.启动
使用以下命令来运行 MinIO 服务器,并替换 D:\ 为你想要 MinIO 存储数据的驱动器或目录的路径。你必须将终端或 PowerShell 的目录更改为 minio.exe 可执行文件所在的位置,或者将该目录的路径添加到系统 $PATH 中:
minio.exe server D:\
该过程将其输出输出到系统控制台,类似于以下内容:
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-11-20T22-40-07Z (go1.21.4 windows/amd64)
Status: 1 Online, 0 Offline.
S3-API: http://192.168.0.105:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
Console: http://192.168.0.105:51510 http://127.0.0.1:51510
RootUser: minioadmin
RootPass: minioadmin
Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
$ mc alias set 'myminio' 'http://192.168.0.105:9000' 'minioadmin' 'minioadmin'
Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.
MinIO 服务器启动后,会使用默认的根凭证 minioadmin:minioadmin。可以使用 MinIO 控制台,一个内嵌在 MinIO 服务器中的基于 Web 的对象浏览器,来测试你的部署。在主机上运行的 Web 浏览器中,访问 http://127.0.0.1:9000 并使用根凭证登录。可以使用浏览器来创建存储桶、上传对象和浏览 MinIO 服务器的内容。
你可以使用 MinIO 控制台执行常规管理任务,例如身份和访问管理、指标和日志监控或服务器配置。 每个 MinIO 服务器都包含自己的嵌入式 MinIO 控制台。
注意:单机模式的 MinIO 服务器最适合早期的开发和评估。某些功能,如版本控制、对象锁定和存储桶复制,需要使用纠删码模式的分布式 MinIO 部署。对于扩展的开发和生产,建议使用纠删码模式的 MinIO 部署,具体来说,每个 MinIO 服务器至少需要 4 个驱动器。请参考 https://docs.min.io/docs/minio-erasure-code-quickstart-guide.html 获取更完整的文档。
如何集成
MinIO可以轻松地与各种应用程序和服务进行集成。例如,可以在SpringBoot中整合MinIO,也可以在前端直接使用MinIO。此外,MinIO还提供了Java SDK,下面是一个简单的演示
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
然后,我们可以创建一个 MinIO 客户端的实例,并使用它来执行各种操作。例如,我们可以使用 putObject 方法来上传一个文件,或者使用 getObject 方法来下载一个文件。
import io.minio.*;
import java.io.*;
public class MinioExample {
public static void main(String[] args) throws Exception {
// 创建一个 MinIO 客户端
MinioClient minioClient = MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("minioadmin", "minioadmin")
.build();
// 上传一个文件
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("mybucket")
.object("myobject")
.filename("my-filepath")
.build());
// 下载一个文件
try (InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket("mybucket")
.object("myobject")
.build())) {
// 读取下载的文件的内容
byte[] buf = new byte[16384];
int bytesRead;
while ((bytesRead = stream.read(buf, 0, buf.length)) >= 0) {
System.out.println(new String(buf, 0, bytesRead));
}
}
}
}
结语
总的来说,MinIO是一个强大的对象存储服务,它提供了丰富的功能和灵活的集成选项,使得它能够满足各种不同的使用场景。然而,与任何技术一样,使用MinIO时也需要考虑其可能的限制和挑战。因此,在选择使用MinIO之前,建议详细了解其特性和限制,以确保它能够满足实际需求。如果想要了解更多关于MinIO的信息,可以访问它的官方网站