首页 > 其他分享 >MinIO使用

MinIO使用

时间:2024-06-05 09:32:36浏览次数:25  
标签:存储 服务 minio MINIO 对象 使用 MinIO

MinIO使用


文章目录

1、什么是MinIO

Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。

对象存储是用于存储非结构化数据的数据存储架构,它将一个数据单元称为一个对象,每个对象都包含数据本身、元数据(描述数据的信息)和一个唯一标识符(通常是一个URL地址)。

在2001年,亚马逊推出了Simple Storage Service(简称S3),这是第一个商业化的、面向互联网的对象存储服务。随后国内众多云服务厂商也都推出了自己的对象存储服务,例如阿里云的OSS,华为云的OBS,百度云的BOS等等。

MinIO是一个开源的对象存储方案,兼容亚马逊S3协议。

对于对象存储,我们可以选择直接购买各大云厂商提供的服务,也可以选择使用开源的服务,自行安装和维护。本项目采用开源的对象存储Minio来存储图片信息。

2、MinIO核心概念
  • 对象(Object)

    对象是实际的数据单元,例如我们上传的一个图片。

  • 存储桶(Bucket)

    存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。

  • 端点(Endpoint)

    端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如http://192.168.10.101:9000

    注意:9000为MinIO的API的默认端口

  • Access Key 和 Secret Key

    Access Key是用于标识和验证访问者身份的唯一标识符,相当于用户名。

    Secret Key是与Access Key关联的密码,用于验证访问者的身份。

3、Linux部署MinIO

获取MinIO安装包

下载地址如下:https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm,通过以下命令可直接将安装包下载至服务器

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm

image-20240604093100079

注:由于服务器在国外,所以下载会比较慢,可以直接使用在网上找对应资源

安装MinIO

rpm -ivh minio-20230809233022.0.0.x86_64.rpm

image-20240604093525422

集成Systemd

  • Systemd概述

    Systemd是一个广泛应用于Linux系统的系统初始化和服务管理器,其可以管理系统中的各种服务和进程,包括启动、停止和重启服务,除此之外,其还可以监测各服务的运行状态,并在服务异常退出时,自动拉起服务,以保证服务的稳定性。系统自带的防火墙服务firewalld,我们自己安装的mysqldredis均是由Systemd进行管理的,此处将MinIO服务也交给Systemd管理。

  • 编写MinIO服务配置文件

    Systemd所管理的服务需要由一个配置文件进行描述,这些配置文件均位于/etc/systemd/system/或者/usr/lib/systemd/system/目录下,下面创建MinIO服务的配置文件。

    执行以下命令创建并打开minio.service文件

    vim /etc/systemd/system/minio.service
    

    内容如下,具体可参考MinIO官方文档

    [Unit]
    Description=MinIO
    Documentation=https://min.io/docs/minio/linux/index.html
    Wants=network-online.target
    After=network-online.target
    AssertFileIsExecutable=/usr/local/bin/minio
    
    [Service]
    WorkingDirectory=/usr/local
    ProtectProc=invisible
    EnvironmentFile=-/etc/default/minio
    ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
    ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
    Restart=always
    LimitNOFILE=65536
    TasksMax=infinity
    TimeoutStopSec=infinity
    SendSIGKILL=no
    
    [Install]
    WantedBy=multi-user.target
    

    image-20240604100001404

    注意

    重点关注上述文件中的以下内容即可

    • EnvironmentFile,该文件中可配置MinIO服务所需的各项参数
    • ExecStart,该参数用于配置MinIO服务的启动命令,其中$MINIO_OPTS$MINIO_VOLUMES,均引用于EnvironmentFile中的变量。
      • MINIO_OPTS用于配置MinIO服务的启动选项,可省略不配置。
      • MINIO_VOLUMES用于配置MinIO服务的数据存储路径。
    • Restart,表示自动重启
  • 编写EnvironmentFile文件

    执行以下命令创建并打开/etc/default/minio文件

    vim /etc/default/minio
    

    内容如下,具体可参考官方文档

    MINIO_ROOT_USER=minioadmin
    MINIO_ROOT_PASSWORD=minioadmin
    MINIO_VOLUMES=/data
    MINIO_OPTS="--console-address :9001"
    

    image-20240604100021801

    注意

    • MINIO_ROOT_USERMINIO_ROOT_PASSWORD为用于访问MinIO的用户名和密码,密码长度至少8位

    • MINIO_VOLUMES用于指定数据存储路径,需确保指定的路径是存在的,可执行以下命令创建该路径。

      mkdir /data
      
    • MINIO_OPTS中的console-address,用于指定管理页面的地址。

启动MinIO

执行以下命令启动MinIO

systemctl start minio

执行以下命令查询运行状态

systemctl status minio

设置MinIO开机自启

systemctl enable minio

访问MinIO管理页面

管理页面的访问地址为:http://192.168.10.101:9001

注意ip需要根据实际情况做出修改

4、MinIO管理页面操作

登录

管理页面的地址为http://主机ip地址:9001,登录的用户名和密码为部署时在EnvironmentFile文件中配置的如下参数

MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin

image-20240604205730038

创建存储桶

image-20240604205821405

image-20240604205914681

设置访问权限

image-20240604210036113

image-20240604210116826

如上图所示,可选的访问权限共有三个选项,分别是PrivatePublicCustom,具体说明如下

  • Private

    只允许桶的所有者对该桶进行读写。

  • Public

    允许所有人对该桶进行读写。

  • Custom

    自定义访问权限。

若想将权限设置为只允许所有者写,但允许所有人读,就需要自定义访问权限。自定义访问权限,需要使用一个规定格式的JSON字符串进行描述,具体格式可参考官方文档

例如以下JSON字符串表达的含义是:允许(Allow)所有人(*)读取(s3:GetObject)指定桶(test)的所有内容。

{
  "Statement" : [ {
    "Action" : "s3:GetObject",
    "Effect" : "Allow",
    "Principal" : "*",
    "Resource" : "arn:aws:s3:::test/*"
  } ],
  "Version" : "2012-10-17"
}

上传图片

image-20240604210205747

image-20240604210223945

image-20240604210356196

访问图片

由于MinIO提供了HTTP访问功能,所以可以通过浏览器直接访问对象。对象URL为MinIO的Endpoint+对象的存储路径,例如下图中的图片对象的URL为http://192.168.204.141:9000/test/image-20240531192616741.png。

image-20240604210445000

5、在java中使用MinIo

MinIO提供了多种语言的SDK供开发者使用下面通过一个简单案例熟悉一下其基本用法,具体内容可参考官方文档

添加依赖

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

编写代码进行上传

public class test {
    public static void main(String[] args) {
        //获取minio客户端
        String endpoint = "http://192.168.204.141:9000";
        String accessKey = "minioadmin";
        String secretKey = "minioadmin";
        String bucketName = "hello-minio";

        MinioClient minioClient = MinioClient.builder().endpoint(endpoint)
                .credentials(accessKey, secretKey).build();

        //创建bucket
        try {
            //判断bucket名字是否存在
            boolean exists = minioClient.bucketExists(BucketExistsArgs.builder()
                    .bucket(bucketName).build());
            //如果不存在则创建
            if (!exists){
                minioClient.makeBucket(MakeBucketArgs.builder()
                        .bucket(bucketName).build());

                //设置bucket访问权限
                String policy = "{"
                        + "\"Statement\": [ {"
                        + "\"Action\": \"s3:GetObject\","
                        + "\"Effect\": \"Allow\","
                        + "\"Principal\": \"*\","
                        + "\"Resource\": \"arn:aws:s3:::"+bucketName+"/*\""
                        + "} ],"
                        + "\"Version\": \"2012-10-17\""
                        + "}";
                minioClient.setBucketPolicy(SetBucketPolicyArgs.builder()
                        .bucket(bucketName).config(policy).build());
            }
            //上传文件
            minioClient.uploadObject(UploadObjectArgs.builder()
                    .filename("D:\\file\\笔记\\1.png").bucket(bucketName)
                    .object("1.png").build());

            System.out.println("上传成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行测试

image-20240604215740731

标签:存储,服务,minio,MINIO,对象,使用,MinIO
From: https://blog.csdn.net/weixin_53961667/article/details/139459392

相关文章

  • 使用自定义数据训练 YOLOv10
    节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。合集:持续火爆!!!《AIGC面试宝典》已圈粉无......
  • 使用Venv创建Python的虚拟环境
    创建虚拟环境python3-mvenv<directory_name>激活虚拟环境source<directory_name>/bin/active检查当前使用的是哪个Python下面这条命令会输出当前使用Python环境的目录:whichpython配置好之后使用pip安装的库就会默认放在这个环境中停用当前环境deactivate重启环......
  • C#使用advapi32.dll来实现注册表的增、删、改、查
    合集-OpenTools(4) 1..NET使用P/Invoke来实现注册表的增、删、改、查功能05-142..NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)05-153.工业福利!用.NET快速开发物联网扫码器设备的通用扫码功能05-174.上位机开发福利!快速掌握.NET中的Modbus通信05-22......
  • 使用Kimi+Markmap总结网页内容生成思维导图
    AI可以帮助我们更高效地阅读文章进行提炼总结,像上图这张思维导图,就是使用Kimi进行内容提炼,再使用markmap生成思维导图,下面讲解下详细实现步骤:一、工具准备Kimi,将文章或一篇网页投给他,让他进行核心观点的提炼并生成我们想要的特定格式markmap一个可以将markdown文本转换成思维......
  • 使用yolov10源码对图片进行目标检测的步骤讲解(windows环境、PyCharm软件、预测阶段)
            本文只讲解yolov10的预测阶段,即如何使用代码调用yolov10模型,对图片进行目标检测,并不涉及训练、验证等阶段。步骤:一、下载yolov10源码        1、打开源码地址。yolov10源码链接:https://github.com/THU-MIG/yolov10    注意:如果网页加载不......
  • 使用EasyPOI导出的 Excel 表格字段为中文
     导入导出添加依赖:<!--FastDFS分布式文件系统进行交互,实现文件的上传、下载--><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.6......
  • 使用Python连接到MySQL数据库并执行查询
    在当今数字化时代,数据是企业和组织中至关重要的资产之一。数据库是存储和管理数据的核心工具之一,而MySQL则是其中一种流行的关系型数据库管理系统。如何使用Python编程语言连接到MySQL数据库,并执行查询以检索所需的数据。首先,需要安装pymysql库:pipinstallpymysql下......
  • _weak c语言在实际使用中有什么核心作用
    C语言中__weak关键字的核心作用在C语言中,__weak关键字通常用于声明弱符号,它允许在链接阶段出现多个同名函数的情况下,选择性地指定某个函数具有较低的优先级。如果在代码中使用了__weak修饰的函数,并且在链接时没有找到其他同名的强符号函数,那么编译器会自动链接到这个弱符号函......
  • 使用 TiDB Vector 搭建 RAG 应用 - TiDB 文档问答小助手
    本文首发至TiDB社区专栏:https://tidb.net/blog/7a8862d5前言继上一次《TiDBVector抢先体验之用TiDB实现以图搜图》后,就迫不及待的想做一些更复杂的应用。上一篇在TiDB社区专栏发布以后还是有很多社区朋友不明白向量的应用场景到底是什么,这次用一个更直观的场景来体现向量检......
  • 数据库知识点和一些命令以及使用步骤
     一、基本命令:(1)连接本地数据库服务:mysql-uroot-p(2)连接其它电脑上的数据库服务:mysql-hip地址-uroot-p(3)在连接数据库服务时直接选择库:mysql-D库名-uroot-p(4)退出数据库服务:exit或quit或\q二、使用步骤:1、链接数据库服务2、创建一个数据库—>选择库3、设......