minio入门学习

什么是 MinIO?

官方定义:MinIO是一个软件定义的高性能分布式对象存储服务器。 您可以在消费级或企业级硬件上运行MinIO, 支持多种操作系统和架构。

通俗一点,就是以对象的形式作为存储结构来存储为文件。

 为什么选择minio来作为对象存储服务?

废话少说,直接问AI。

  1. 开源和可扩展性

    开源:MinIO是开源的,这意味着你可以自由地使用、修改和分发它,这对于希望避免供应商锁定的企业和开发者来说是一个巨大的优势。可扩展性:MinIO设计用于横向扩展,可以轻松地通过添加更多节点来增加存储容量和处理能力。
  2. 高性能

    MinIO针对性能进行了优化,提供高速的对象存储服务,适合用于大数据、机器学习和高性能计算等场景。
  3. 兼容性

    MinIO与Amazon S3 API兼容,这意味着你可以使用现有的S3工具和应用程序与MinIO无缝协作。
  4. 简单易用

    MinIO的安装和配置相对简单,提供了直观的命令行界面和图形用户界面。
  5. 安全性

    MinIO支持多种安全特性,包括自动加密、访问控制列表(ACLs)和身份验证。
  6. 成本效益

    由于MinIO是开源的,它可以帮助企业节省昂贵的许可费用,同时提供与商业对象存储服务相似的功能。

 性能好,简单易用,安全性高。

安装和部署

就从学习来讲的话(学习他的使用,我用java和他交互),由于有docker,所以我采用docker部署的方式。

docker run -p 9000:9000 -p 9090:9090      --net=host      --name myminio      -d --restart=always      -e "MINIO_ACCESS_KEY=admin"      -e "MINIO_SECRET_KEY=Qhx20040819"      -v /home/minio/data:/data      -v /home/minio/config:/root/.minio      minio/minio server      /data --console-address ":9090" -address ":9000"

这里解释一下。

MINIO_ACCESS_KEY :账号

MINIO_SECRET_KEY :密码(账号长度必须大于等于5,密码长度必须大于等于8位)

windows安装minio:Windows安装Minio(超详细)_minio windows安装-CSDN博客

Linux安装minio:Linux安装MinIO(图文解说详细版)-CSDN博客

启动完之后。

访问:ip:port

跳转到该页面。

输入上文指定的ACCESS_KEY、SECRET_KEY分别作为账号、密码填进去。

进入到该页面差不多就可以了。

使用

其实具体来讲使用的时候还要创建一个Bucket。

在对象存储服务(Object Storage Service)中,Bucket(桶)是用于组织和管理存储在云中的对象(文件)的基本容器。Bucket类似于文件系统中的目录或文件夹,用于存储、检索和保护数据。

 说白了就是个文件夹。存储的时候,需要具体知道存储在那个文件夹里面。

基于java的整合。

这里就直接参考ry-vue-plus的源码了。以及提前了解一个概念。

什么是AWS s3规范?

AWS S3(Simple Storage Service)是亚马逊提供的一项云存储服务,它定义了一套 API 接口,用于与对象存储服务进行交互。这些接口允许开发者使用 RESTful API、SOAP API 或 AWS SDK 访问对象存储服务,执行诸如创建、读取、更新和删除对象等操作。

minio实现了这套规范。

 了解这个概念之后,我在再来看,ry-common-oss的源码。

他做了一张表,用来专门管理对象存储服务的access_key、secre_key、bucket、endpoint这种核心字段。然后,一开始程序初始化oss配置。将表中默认选中的oss配置加载到缓存中。

当我们第一次使用文件上传功能时。

  在OssFactorya中instance方法中,从缓存拿取默认的oss配置信息,然后转换为OssClient对象,缓存到CLIENT_CACHE,这是一个线程安全的map。

@Slf4j
public class OssFactory {

    private static final Map<String, OssClient> CLIENT_CACHE = new ConcurrentHashMap<>();
    private static final ReentrantLock LOCK = new ReentrantLock();

    /**
     * 获取默认实例
     */
    public static OssClient instance() {
        // 获取redis 默认类型
        String configKey = RedisUtils.getCacheObject(OssConstant.DEFAULT_CONFIG_KEY);
        if (StringUtils.isEmpty(configKey)) {
            throw new OssException("文件存储服务类型无法找到!");
        }
        return instance(configKey);
    }

    /**
     * 根据类型获取实例
     */
    public static OssClient instance(String configKey) {
        String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
        if (json == null) {
            throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
        }
        OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
        // 使用租户标识避免多个租户相同key实例覆盖
        String key = configKey;
        if (StringUtils.isNotBlank(properties.getTenantId())) {
            key = properties.getTenantId() + ":" + configKey;
        }
        OssClient client = CLIENT_CACHE.get(key);
        // 客户端不存在或配置不相同则重新构建
        if (client == null || !client.checkPropertiesSame(properties)) {
            LOCK.lock();
            try {
                client = CLIENT_CACHE.get(key);
                if (client == null || !client.checkPropertiesSame(properties)) {
                    CLIENT_CACHE.put(key, new OssClient(configKey, properties));
                    log.info("创建OSS实例 key => {}", configKey);
                    return CLIENT_CACHE.get(key);
                }
            } finally {
                LOCK.unlock();
            }
        }
        return client;
    }

}

 然后再回到OssClient对象中,用读取的Oss配置信息,创建了S3AsyncClient、S3TransferManager这两个类型的对象。

......

/**
     * 构造方法
     *
     * @param configKey     配置键
     * @param ossProperties Oss配置属性
     */
    public OssClient(String configKey, OssProperties ossProperties) {
        this.configKey = configKey;
        this.properties = ossProperties;
        try {
            // 创建 AWS 认证信息
            StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(
                AwsBasicCredentials.create(properties.getAccessKey(), properties.getSecretKey()));

            //MinIO 使用 HTTPS 限制使用域名访问,站点填域名。需要启用路径样式访问
            boolean isStyle = !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE);

            //创建AWS基于 CRT 的 S3 客户端
            this.client = S3AsyncClient.crtBuilder()
                .credentialsProvider(credentialsProvider)
                .endpointOverride(URI.create(getEndpoint()))
                .region(of())
                .targetThroughputInGbps(20.0)
                .minimumPartSizeInBytes(10 * 1025 * 1024L)
                .checksumValidationEnabled(false)
                .forcePathStyle(isStyle)
                .build();

            //AWS基于 CRT 的 S3 AsyncClient 实例用作 S3 传输管理器的底层客户端
            this.transferManager = S3TransferManager.builder().s3Client(this.client).build();

            // 创建 S3 配置对象
            S3Configuration config = S3Configuration.builder().chunkedEncodingEnabled(false)
                .pathStyleAccessEnabled(isStyle).build();

            // 创建 预签名 URL 的生成器 实例,用于生成 S3 预签名 URL
            this.presigner = S3Presigner.builder()
                .region(of())
                .credentialsProvider(credentialsProvider)
                .endpointOverride(URI.create(getDomain()))
                .serviceConfiguration(config)
                .build();

            // 创建存储桶
            createBucket();
        } catch (Exception e) {
            if (e instanceof OssException) {
                throw e;
            }
            throw new OssException("配置错误! 请检查系统配置:[" + e.getMessage() + "]");
        }
    }

......

说白了,嗯,更多是思想的体现,既然minio、aliyun、qiniu、qcloud,都遵循了这套规范,他把公共封装出来,当我们后面换用oss存储服务的时候,只要它遵循oss规范,我们就可以通过先表中添加新的配置信息即可。

03-11
<think>好的,我需要回答用户关于MinIO对象存储的介绍与使用的问题。首先,我得确认用户的需求是什么。用户提到了引用1、2、3,都是关于MinIO的基本信息和API使用,所以需要涵盖这些方面。 首先,要介绍MinIO是什么。根据引用1,MinIO是开源的对象存储服务器,支持AWS S3兼容的API。引用2也提到这一点,所以需要强调其兼容性和适用场景。 接下来,应该列出主要特性。比如高性能、可扩展性、数据安全这些点。用户可能关心它为什么适合不同规模的应用,这部分需要详细说明。 然后是架构与工作原理。对象存储的核心概念,比如桶和对象,需要解释清楚。引用3提到了JAVA API操作,可能涉及到存储结构,所以这部分要详细说明桶和对象的关系,以及如何通过API管理。 安装部署部分,用户可能需要基础的操作步骤。根据引用1的文档链接,可以推荐用户参考官网的Windows文档,但这里只需要简要说明支持的环境和基本安装方式,比如Docker部署。 使用场景方面,引用1提到适用于多种规模的应用,所以需要列举常见的使用案例,比如大数据、云存储等,让用户了解其应用范围。 客户端和API操作部分,引用3提到JAVA API,可以举一个上传文件的示例代码,帮助用户快速上手。同时,要提到其他语言的支持,如Python、Go,让用户知道有广泛的开发支持。 最后,安全问题也是重点。需要说明加密机制和访问控制,确保用户知道数据的安全性。 生成相关问题的时候,要围绕用户可能进一步想了解的内容,比如部署步骤、数据安全机制、与AWS S3的区别,以及性能优化等。这些问题需要覆盖用户可能有的后续疑问,引导他们深入学习和应用。 整个回答过程中,要保持结构清晰,分点说明,每个部分都结合引用中的信息,确保准确可靠。同时,使用中文,避免技术术语过于复杂,让不同层次的用户都能理解。 需要检查是否符合系统级指令,比如数学公式的格式是否正确,但这个问题中可能不涉及数学内容,所以不用特别处理。确保所有独立的内容正确使用LaTeX,但看起来这里主要是文字和代码块,所以代码部分用反引号包裹,正确高亮。 最后,生成的相关问题要覆盖用户可能感兴趣的方向,比如安装、安全、对比分析、API使用等,这样用户可以根据自己的需求进一步探索。 现在整合这些思路,形成一个结构化的回答,确保每个部分都自然衔接,引用标识正确添加,并且语言流畅易懂。</think>### MinIO对象存储介绍与使用 #### 1. **MinIO简介** MinIO 是一个高性能、开源的**对象存储服务器**,专为大规模数据存储设计。它兼容 AWS S3 API,支持私有云、混合云及边缘计算场景,适用于机器学习、大数据分析等需要高吞吐量的场景[^1][^2]。 #### 2. **核心特性** - **AWS S3兼容**:可直接使用 AWS S3 SDK 或工具操作 MinIO,迁移成本低。 - **高性能**:采用纠删码(Erasure Code)技术,实现数据高可用和快速恢复。 - **轻量可扩展**:单节点即可运行,支持横向扩展至数千节点。 - **数据安全**:支持客户端加密、服务端加密(SSE)及 TLS 传输加密[^1]。 #### 3. **架构与工作原理** MinIO 使用**对象存储模型**,数据以“对象”形式存储在“桶”(Bucket)中。每个对象包含: - **数据本身**(如文件内容) - **元数据**(如文件类型、创建时间) - **唯一标识符**(对象键) 例如,上传文件 `report.pdf` 到 `documents` 桶的路径为: $$ \text{对象键} = \text{documents/report.pdf} $$ #### 4. **安装与部署** **快速部署示例(Docker):** ```bash docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001" ``` 部署后可通过 `http://localhost:9000` 访问 API,`http://localhost:9001` 访问管理界面。 #### 5. **典型使用场景** - **云原生应用存储**:Kubernetes 持久化存储 - **备份与归档**:替代传统 NAS/SAN - **AI/ML 数据湖**:存储训练数据集与模型 #### 6. **客户端与API操作** **Java 上传文件示例(引用自[^3]):** ```java MinioClient client = MinioClient.builder() .endpoint("http://localhost:9000") .credentials("minioadmin", "minioadmin") .build(); client.putObject(PutObjectArgs.builder() .bucket("my-bucket") .object("photo.jpg") .stream(inputStream, -1, 10485760) // 10MB分片 .build()); ``` 其他语言(Python、Go等)可通过类似 SDK 操作。 #### 7. **数据安全机制** - **访问控制**:基于策略(Policy)的权限管理,支持 IAM 角色。 - **加密传输**:强制启用 TLS 1.3。 - **完整性校验**:通过哈希值验证数据一致性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

本郡主是喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值