私有化对象存储-minio

1.什么是minio

MinIO是一款高性能、分布式的对象存储系统,它使用Go语言编写,并基于Apache License v2.0开源协议。

MinIO的主要特点包括简单、可靠。它采用简单可靠的集群方案,摒弃复杂的大规模的集群调度管理,减少风险与性能瓶颈,聚焦产品的核心功能,打造高可用的集群、灵活的扩展能力以及超过的性能。MinIO支持云原生,能与Kubernetes、Docker、Swarm编排系统良好对接,实现灵活部署。部署简单,只有一个可执行文件,参数极少,一条命令即可启动一个MinIO系统。

MinIO使用纠删码机制来保证高可靠性。纠删码是一种错误修复编码,可以用来检测和修复数据在存储过程中的错误。MinIO通过将数据分成多个块并使用纠删码进行编码,确保数据的可靠性和可用性。

2.怎么得到它

文档:https://min.io/docs/minio/container/index.html
源码:https://github.com/minio/minio

3.如何部署

(1)使用docker部署

mkdir -p ~/minio/data
docker run \
   -p 9000:9000 \
   -p 9090:9090 \
   --name minio \
   -v ~/minio/data:/data \
   -e "MINIO_ROOT_USER=ROOTNAME" \
   -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
   quay.io/minio/minio server /data --console-address ":9090"

(2)使用linux/mac直接部署
软件包下载地址:https://github.com/minio/minio/releases

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data

4.如何访问

(1)9090端口作为web界面管理
(2)9000端口作为api调用
在这里插入图片描述

5.简单使用及概念介绍

(1) Bucket: 存储空间(对象桶),存放对象的逻辑空间。在上传对象前需要提前创建存储空间

  • 创建bucket:
    在这里插入图片描述
  • 设置权限:
    当设置public时,文件可以公开访问
    在这里插入图片描述
  • 其他功能包括读写设置,复制策略(高可用性、备份和容灾),event事件,配额,标签,存储空间查看等等
    在这里插入图片描述

(2) Object: 对象是对象存储数据的基本单元,可以是文档、图片、音视频等

  • 创建对象:在这里插入图片描述

  • 分享文件地址
    在这里插入图片描述

  • 包含下载,预览,打标签,查看文件大小等等

(4) Policy: 可以为对象存储的资源设置权限,如读写权限,是否需要鉴权访问。默认的资源权限是private的,需要鉴权才能访问,并且有时间限制。

(5) Identity: 用户管理,用户组管理,OPENID等等

(6) 其他:监控,事件等等

6.Springboot项目中使用minio

(1) pom 依赖

<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>7.1.0</version>
</dependency>

(2) api简单调用

import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.util.concurrent.TimeUnit;

@Service
public class MinioService{

    @Value("${minio.key}")
    private String key;
    @Value("${minio.secret}")
    private String secret;
    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.bucket}")
    private String bucket;

    //获取对象存储客户端
    public MinioClient ossClient() {
        return MinioClient.builder()
                .endpoint(this.endpoint)
                .credentials(this.key, this.secret)
                .build();
    }

    //根据生成访问地址
    public String getPresignedObjectUrl(String fileName) throws Exception{
        MinioClient minioClient = this.ossClient();
        return minioClient.getPresignedObjectUrl(
                GetPresignedObjectUrlArgs.builder()
                        .method(Method.GET)
                        .bucket(bucket)
                        .object(fileName)
                        .expiry(1, TimeUnit.HOURS)
                        .build());
    }

    //根据上传资源
    public void putObject(String fileName, InputStream ins) throws Exception{
        MinioClient minioClient = this.ossClient();
        minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(fileName).stream(
                ins, -1, 10485760)
                .build());

    }

    //根据某个文件夹或前缀的文件
    public Iterable<Result<Item>> listObject(String prefix) {
            MinioClient minioClient = this.ossClient();
            return minioClient.listObjects(
                    ListObjectsArgs.builder()
                            .bucket(bucket)
                            .prefix(prefix)
                            .maxKeys(100)
                            .recursive(true)
                            .includeVersions(true)
                            .build());
    }
}

(3) 开发文档
https://min.io/docs/minio/linux/developers/java/minio-java.html#minio-java-quickstart
https://min.io/docs/minio/linux/developers/java/API.html

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MinIO是一个开源的分布式对象存储服务,它可以在私有云环境中提供高性能和高可用性的存储解决方案。下面是关于MinIO的一些基本概念和使用方法: 1. 分布式存储:MinIO使用分布式架构,可以将数据存储在多个节点上,实现数据的冗余和高可用性。每个节点都可以独立地提供存储服务,并且可以通过添加更多的节点来扩展存储容量和吞吐量。 2. 对象存储MinIO以对象的形式存储数据,每个对象都有一个唯一的键(Key)和对应的值(Value)。对象可以是任意类型的文件,例如图片、视频、文档等。通过使用对象存储MinIO可以提供高效的数据访问和管理。 3. 数据分片:MinIO将每个对象分成多个数据片段(Data Shard),并将它们分布在不同的节点上。这种数据分片的方式可以提高数据的可靠性和可用性,同时也可以提高数据的读写性能。 4. 冗余备份:MinIO使用纠删码(Erasure Code)技术来实现数据的冗余备份。纠删码可以将数据分成多个片段,并将这些片段分布在不同的节点上。即使某个节点发生故障,系统仍然可以通过其他节点上的数据片段进行数据恢复。 5. 客户端接口:MinIO提供了丰富的客户端接口,可以方便地与MinIO进行交互。你可以使用MinIO的命令行工具、API接口或者各种编程语言的SDK来管理和操作MinIO存储。 下面是一个使用MinIO Python SDK上传文件的例子: ```python from minio import Minio # 创建MinIO客户端 client = Minio('play.min.io', access_key='YOUR_ACCESS_KEY', secret_key='YOUR_SECRET_KEY', secure=True) # 上传文件 client.fput_object('mybucket', 'myobject', 'path/to/local/file.jpg') # 关闭客户端连接 client.close() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值