MinIO 分布式文件(对象)存储

news2024/11/27 6:27:45
  1. 简介
    MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。

在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品

官网地址:http://www.minio.org.cn/

  1. 下载
    官网下载(8.4.3版本):http://www.minio.org.cn/download.shtml
1、拉取镜像(https://hub.docker.com/r/minio/minio/tags)

# 下载新版minio
docker pull minio/minio

# 或者下载指定版本的minio
docker pull minio/minio:RELEASE.2021-04-06T23-11-00Z  

2、创建容器

docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /docker/minio/data:/data -v /docker/minio/config:/root/.minio minio/minio server /data

# 或者指定镜像版本并创建容器
docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /docker/minio/data:/data -v /docker/minio/config:/root/.minio minio/minio:RELEASE.2021-04-06T23-11-00Z server /data

-p 9000:9000 ,端口映射
-e,环境变量
-d,后台运行
–name,给容器起名字
–restart=always,开机自启
-e “MINIO_ACCESS_KEY=minio”,设置账号
-e “MINIO_SECRET_KEY=minio123”,设置密码
-v 挂载数据卷
07
  1. 运行
    创建四个文件夹data0、data1、data2、data3,用存放文件。

「启动minio服务」

# mac/linux
./minio server ./data0 ./data1 ./data2 ./data3
 
# windows
minio.exe server ./data0 ./data1 ./data2 ./data3
访问地址:http://127.0.0.1:9000/,默认账号和密码都是:minioadmin。

在这里插入图片描述
4. 创建桶
在Minio和其他一些对象存储服务中,“桶”(Bucket)是一个顶层的容器,用于组织和管理存储的对象(Object)。可以将桶类比为文件系统中的文件夹,用于将一组相关的对象进行组织和分类。

每个桶在Minio中具有唯一的名称,并且可以根据需要创建多个桶。用户可以使用桶名称来访问和操作其中的对象。桶名称是全局唯一的,因此需要确保不同应用程序使用不同的桶名称,以避免冲突。

我们创建一个test的桶(bucket)。

  1. SpringBoot 集成 MinIO
    5.1 pom.xml
    添加如下minio依赖
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.4.3</version>
</dependency>

5.2 MinioConfiguration
配置minio的地址、账号和密码,配置上传文件的大小1024M。

@Configuration
public class MinioConfiguration {

    private static final String END_POINT = "http://localhost:9000";

    private static final String USERNAME = "minioadmin";

    private static final String PASSWORD = "minioadmin";

    @Bean
    public MinioClient minioClient() {
        return new MinioClient.Builder()
                .endpoint(END_POINT)
                .credentials(USERNAME, PASSWORD)
                .build();
    }

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize(DataSize.ofMegabytes(1024));
        factory.setMaxRequestSize(DataSize.ofMegabytes(1024));
        return factory.createMultipartConfig();
    }
}

5.3 MinioController
upload上传文件接口:传入参数bucket,文件保存到minio后会返回fileName。

getUrl获取文件访问链接接口:传入参数path和bucket,返回可以访问的链接(7天有效)。这里的path就是上传文件的返回值fileName。

@RequestMapping("minio")
@RestController
public class MinioController {
    @Resource
    private MinioClient minioClient;

    @PostMapping(value = "upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String upload(@RequestPart("file") MultipartFile file,
                         @RequestParam("bucket") String bucket) {
        try {
            int idx = Objects.requireNonNull(file.getOriginalFilename()).lastIndexOf(".");
            String suffix = file.getOriginalFilename().substring(idx + 1);
            String fileName = UuidUtils.generateUuid() + "." + suffix;

            // 保存文件
            minioClient.putObject(PutObjectArgs.builder()
                    .stream(file.getInputStream(), file.getSize(), PutObjectArgs.MIN_MULTIPART_SIZE)
                    .object(fileName)
                    .contentType(file.getContentType())
                    .bucket(bucket)
                    .build());
            return fileName;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    @GetMapping("getUrl")
    public String getUrl(@RequestParam(name = "path") String path,
                         @RequestParam("bucket") String bucket) {
        try {
            // 获取文件访问地址 7天失效
            String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                    .bucket(bucket)
                    .object(path).
                    method(Method.GET)
                    .expiry(7, TimeUnit.DAYS).build());
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

5.4 okhttp3版本不兼容
如果出现okhttp3版本不兼容的问题,需要在pom.xml的properties节点下加上版本号,如下:

<okhttp3.version>4.8.1 </okhttp3.version>

1、删除自动恢复
可以测试删除其中一半的存放位置,它过一会儿就自动恢复了,比如删除data0和data1,几分钟它就自动重新创建了文件,并且里面的内容也恢复了。
在这里插入图片描述

2、文件夹
上传的单个文件变成了文件夹

在这里插入图片描述
3 分块存储
点击到里面单个文件被拆分成了许多个小块
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1173045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算实战项目之---学之思在线考试系统

简介&#xff1a; 学之思开源考试系统是一款 java vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序&#xff0c;能覆盖到pc机和手机等设备。 支持多种部署方式&#xff1a;集成部署、前后端分离部署、docker部…

MySQL Too Many Connections

一、前言 上一篇 《磁盘爆了》 我们讲磁盘撑爆造成Java应用无法启动&#xff0c;今天我们来讲一下MySQL连接被撑爆应用启动后连不上数据库的问题。 二、max_connections配置 我们自己安装的开源MySQL5.6 默认的max_connections(最大连接数)值为151&#xff0c;为什么是151咱…

【MongoDB】索引 - 数组字段的多键索引

数组字段创建索引时&#xff0c;MongoDB会为数组中的每个元素创建索引键&#xff08;多键索引&#xff09;&#xff0c;多键索引支持数组字段的高效查询。 一、准备工作 这里准备一些数据 db.shop.insertMany([{_id: 1, name: "水果店1", fruits: ["apple&qu…

Vue+OpenLayers从入门到实战进阶案例汇总目录,兼容OpenLayers7和OpenLayers8

本篇作为《VueOpenLayers入门教程》和《VueOpenLayers实战进阶案例》所有文章的二合一汇总目录&#xff0c;方便查找。 本专栏源码是由OpenLayers结合Vue框架编写。 本专栏从Vue搭建脚手架到如何引入OpenLayers依赖的每一步详细新手教程&#xff0c;再到通过各种入门案例和综合…

Go语言与Python语言的性能比较

目录 一、背景与意义 二、执行速度 三、内存消耗 四、并发性能 五、编译速度与开发效率 六、综合考虑 七、应用场景 八、未来发展趋势 总结 一、背景与意义 在编程世界中&#xff0c;Go语言和Python语言都占有一席之地。Go语言是由Google开发的&#xff0c;其设计初衷…

GNSS精密解算软件介绍

GAMIT&#xff1a; 美国麻省理工学院&#xff08;MIT&#xff09;和加州大学圣地亚哥分校的海洋研究所&#xff08;SIO&#xff09;开发的GAMIT/GLOBK软件&#xff0c; GAMIT为双差网解&#xff0c;利用双差直接消除卫星及测站的时间误差。 gamit软件介绍-周命端&#xff1a;…

Technology strategy Pattern 学习笔记4 - Creating the Strategy-Corporate Context

Creating the Strategy-Corporate Context 1 •. Stakeholder Alignment 1.1 要成功&#xff0c;要尽可能获得powerful leader的支持 1.2 也需要获得最高执行层的支持 1.3 Determining&#xff08;确定&#xff09; Stakeholders 需要建立360度组织图&#xff0c;确认三类人…

unity中移动方案--物理渲染分层

一、三种基本移动方案 unity中的移动分为Transform和Rigidbody以及CharacterController&#xff0c;其中CharacterController已经考虑了穿墙&#xff0c;贴墙走等情况。 1.使用transform,直接修改位置&#xff0c;无视碰撞 1.transform.position 2.transform.Translate 2.使用…

Paragon NTFS for Mac15.5磁盘存储软件

NTFS For Mac 15是首个支持Mac上读写NTFS外置存储设备解决方案 &#xff0c;解决mac不能读写外置让您更加简单直观的在Mac机上随意对NTFS文件修改、删除等操作。 NTFS for Mac是什么 在选择一款合适自己的NTFS or Mac软件之前&#xff0c;您可以简单地对NTFS or Mac进行一个了…

(免费领源码)PHP#MySQL高校学生信息管理系统28099-计算机毕业设计项目选题推荐

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用php技术建设学生信息管理系统设计。…

【兔子王赠书第6期】Python机器学习实战:基于Scikit-learn与PyTorch的神经网络解决方案

文章目录 前言推荐图书写给读者内容简介本书目录本书特色推荐理由 粉丝福利结语 前言 粉丝福利又双叒叕来喽&#xff0c;小伙伴们快来看看吧&#xff01; 推荐图书 《Python机器学习实战&#xff1a;基于Scikit-learn与PyTorch的神经网络解决方案》 京东直购链接&#xff1…

二维码智慧门牌管理系统升级:一键报错解决三大问题

文章目录 前言一、一键报错功能解决了三大问题二、提高效率和便捷性 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到社会的各个角落&#xff0c;其中二维码智慧门牌管理系统在社区、酒店、写字楼等场所的应用尤为广泛。为了更好地提升管理系统效率和解决实际问题&a…

Linux生成静态库

GCC 什么是GCC GCC 是 GNU 编译器集合&#xff08;GNU Compiler Collection&#xff09;的缩写。它是一个开源的编程语言编译器&#xff0c;支持多种编程语言&#xff0c;包括 C、C、Objective-C、Fortran、Ada 和 Go 等。GCC 最初由理查德斯托曼&#xff08;Richard Stallman…

VEX —— Quaternion|Euler Angle

目录 一&#xff0c;四元数相关概念 四元数 欧拉角 常用四元数相关函数 相互转换 二&#xff0c;案例 案例&#xff1a;沿面中心翻转 案例&#xff1a;路径导弹 一&#xff0c;四元数相关概念 四元数 在vex内四元数为&#xff08;&#xff08;x&#xff0c;y&#xff0…

vmware--主机win11 samba 映射虚拟机ubuntu共享文件夹

参考链接 1.效果如下图 2.教程 2.1 win11开启 smb 忽略… 2.2 vmware–ubuntu 安装 samba sudo apt update sudo apt install samba2.3 vmware–ubuntu 验证 安装成功 ppan:~$ whereis samba samba: /usr/sbin/samba /usr/lib/x86_64-linux-gnu/samba /etc/samba /usr/sh…

《向量数据库指南》——用了解向量数据库Milvus Cloud搭建高效推荐系统

了解向量数据库 ANN 搜索是关系型数据库无法提供的功能。关系型数据库只能用于处理具有预定义结构、可直接比较值的表格型数据。因此,关系数据库索引也是基于这一点来比较数据。但是 Embedding 向量无法通过这种方式直接相互比较。因为我们不知道向量中的每个值代表什么意思,…

【LeetCode:187. 重复的DNA序列 | 滑动窗口 map】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

ssm整合原理与实战

文章目录 前言一、SSM整合原理1.1 什么是SSM整合1.2 SSM整合核心问题1.2.1 第一问&#xff1a;SSM整合需要几个IoC容器&#xff1f;1.2.2 第二问&#xff1a;每个IoC容器对应哪些类型组件&#xff1f;1.2.3 第三问&#xff1a;IoC容器之间关系和调用方向&#xff1f;1.2.4第四问…

CSS画圆以及CSS实现动态圆

CSS画圆以及CSS实现动态圆 1. 先看基础&#xff08;静态圆&#xff09;1.1 效果如下&#xff1a;1.2 代码如下&#xff1a; 2. 动态圆2.1 一个动态圆2.1.1 让圆渐变2.1.2 圆渐变8秒后消失2.1.3 转动的圆&#xff08;单个圆&#xff09; 2.2 多个动态圆 1. 先看基础&#xff08;…

LangChain+LLM实战---部署本地大模型(基于Langchain)

原文&#xff1a;Training Your Own LLM using privateGPT 作者&#xff1a;Wei-Meng Lee 了解如何在不向提供者公开私有数据的情况下训练自己的语言模型 使用公共AI服务(如OpenAI的ChatGPT)的主要问题之一是将您的私人数据暴露给提供商的风险。对于商业用途&#xff0c;这仍然…