MinIo快速入门
MinIo核心概念
MinIO 是一个高性能、轻量级的开源对象存储服务器,专为大规模数据存储和分析而设计。它兼容 Amazon S3 API,可以无缝替代 Amazon S3 作为存储后端,并且支持在各种环境中部署,包括物理服务器、虚拟机、容器等。以下是 MinIO 的一些核心概念:
• 对象存储(Object Storage):
• MinIO 是一个高性能的分布式对象存储系统,主要用于存储非结构化数据(如图像、视频、日志文件等)。
• 对象存储采用扁平化结构,通过唯一标识符(如对象键)来访问对象,而不是像传统文件系统那样使用层级目录结构。
• 分布式架构:
• MinIO 可以在分布式环境中运行,通过多节点集群提供高可用性和容错能力。
• 每个节点都是一个独立的 MinIO 服务器实例,它们通过网络进行通信和协作,共同完成数据的存储和访问。
• 纠删码(Erasure Code,EC):
• 纠删码是一种数据保护方法,它将数据分割成片段,生成冗余数据块,并将这些数据块存储在不同的位置,如磁盘、存储节点或其他地理位置。
• MinIO 采用 Reed-Solomon 纠删码实现,将对象拆分成数据块和奇偶校验块,以提高数据的冗余性和可用性。
• 桶(Bucket):
• 桶是 MinIO 中用来存储对象的逻辑空间,相当于顶层文件夹。
• 桶具有唯一标识,可设置元数据和权限。
• 驱动(Drive):
• 驱动是存储数据的磁盘,启动时以参数传入。
• 是数据存储载体,容量有限。
• 集群(Set):
• 集群是一组驱动的集合,分布式部署自动划分,对象存储于其上,驱动数量固定,尽可能分布在不同节点。
• 数据冗余和容错:
• MinIO 的数据冗余系统为2(即存储一个1M的数据对象,实际占用磁盘空间为2M),在任意n/2块disk损坏的情况下依然可以读出数据,这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
• 简单部署:
• MinIO 的部署简单,一个单一二进制文件即可启动服务,支持多种平台,且可以按zone扩展,支持单个对象最大5TB。
• 兼容性:
• MinIO 兼容 Amazon S3 接口,这意味着用户可以直接使用现有的 S3 工具和应用程序与 MinIO 进行集成,而无需进行修改。
这些核心概念体现了 MinIO 的设计目标,即提供高性能、高可用性、可扩展性以及与现有 S3 应用程序和工具的无缝集成。
MinIo管理页面操作
登录
浏览器搜索http://192.168.10.101:9001
注:一定要确保自己的minio已经启动才能访问进去
这里的账户密码是在Linux部署MinIo时设置的
登录进来之后的样子如下:
创建存储桶
点击Buckets
点击create a Buckets
输入桶名称 并且选择一些高级选项
Versioning :版本控制允许在相同的键下保存同一对象的多个版本。
Object Locking:对象锁定防止对象被删除。这是支持保留和法律保留所必需的。只能在创建桶时启用。
Quota :配额限制了桶中的数据量。
上传文件
点击Object Browser
点击桶
点击上传
上传成功以后我们访问一下 看看能不能成功访问
这是我的路径:
http://192.168.10.101:9000/test/3.jfif
但是我们可以看到他报了一个错误 这个错误是权限错误
修改权限
进入Buckets 在点击我们创建出来的桶
点击修改权限
这里有三个权限
• Private(私有):只有文件或项目的拥有者可以访问。
• Public(公开):任何人都可以访问。
• Custom(自定义):用户可以设置特定的访问权限,比如指定哪些用户或组可以访问。
我们选择自定义权限
{"Statement": [ {"Action" : "s3:GetObject","Effect" : "Allow","Principal" : "*","Resource" : "arn:aws:s3:::test/*"} ],"Version" : "2012-10-17"
}
再次尝试访问
这次我们就已经成功访问了
MinIo的JAVA客户端
创建一个MAVEN项目
导入MAVEN依赖
<dependencies><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.3</version></dependency></dependencies>
编写测试类
package com.nie;import io.minio.*;
import io.minio.errors.*;import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;public class MinioTest {public static void main(String[] args) {String endpoint = "http://192.168.10.101:9000";String accessKey = "minioadmin";String secretKey = "minioadmin";String bucketName = "my-bucket";MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();try {boolean b = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (!b){minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());String policy= """{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": ["*"]},"Action": ["s3:GetObject"],"Resource": ["arn:aws:s3:::%s/*"]}]}""".formatted(bucketName);minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policy).build());}minioClient.uploadObject(UploadObjectArgs.builder().filename("C:\\Users\\Administrator\\Desktop\\822091-20221101170338527-294033862.png").bucket(bucketName).object("822091-20221101170338527-294033862.png").build());System.out.println("上传成功");} catch (Exception e) {e.printStackTrace();}}
}
运行项目后:我们进入MinIo客户端查看
根据上面的图可以看出我们已经上传成功了
我们接下来测试一下能不能正常访问这种图片
根据上面的图可以看出我们可以进行正常的访问该图片