当前位置: 首页 > article >正文

「MinIO快速入门」

官网:MinIO | S3 Compatible Storage for AI 中文:http://minio.org.cn/

MinIO 开始

MinIO 是一款高性能、开源的对象存储服务器。

一、主要特点

  1. 高性能
    • MinIO 采用了分布式架构,能够高效地处理大量数据的存储和访问请求。它针对多核处理器进行了优化,充分发挥硬件性能,实现快速的数据读写操作。
    • 支持大文件上传和下载,并且在高并发场景下仍能保持稳定的性能表现。
  1. 开源免费
    • 作为开源软件,MinIO 允许用户免费使用、修改和分发其源代码。这使得开发者可以根据自己的需求对其进行定制和扩展,同时也降低了企业的存储成本。
    • 活跃的开源社区为 MinIO 提供了持续的技术支持和更新,确保其功能不断完善和优化。
  1. 兼容性强
    • MinIO 支持多种操作系统,包括 Linux、Windows 和 macOS 等。同时,它还提供了丰富的客户端接口,如 S3 API、SDK 等,可以与各种编程语言和应用程序进行集成。
    • 这使得用户可以在不同的环境中轻松地使用 MinIO 进行数据存储和管理。

二、主要用途

  1. 云存储解决方案
    • 对于企业和个人用户来说,MinIO 可以作为一种可靠的云存储解决方案。它可以部署在本地服务器或云端环境中,提供安全、高效的数据存储服务。
    • 用户可以通过网络随时随地访问存储在 MinIO 中的数据,实现数据的共享和协作。
  1. 大数据存储
    • 随着大数据技术的发展,数据存储需求不断增长。MinIO 可以作为大数据存储平台的一部分,用于存储和管理大规模的数据集。
    • 它支持分布式存储,可以将数据分散存储在多个节点上,提高数据的可靠性和可用性。同时,MinIO 的高性能特点也能够满足大数据分析和处理对存储系统的要求。
  1. 备份和恢复
    • MinIO 可以用于数据备份和恢复。用户可以将重要数据备份到 MinIO 存储中,以防止数据丢失。在需要恢复数据时,可以快速从 MinIO 中获取备份数据。
    • MinIO 还支持版本控制,可以保留数据的多个版本,方便用户进行数据恢复和历史数据查询。
  1. 容器存储
    • 在容器化环境中,MinIO 可以作为容器的持久化存储解决方案。它可以与 Kubernetes 等容器编排平台集成,为容器化应用提供可靠的存储服务。
    • MinIO 的分布式架构和高可用性特点使其能够适应容器环境的动态变化,保证数据的安全性和可靠性。

安装 MinIO

wget https://dl.min.io/server/minio/release/linux-amd64/minio

chmod +x minio

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"

启动MinIO

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"或者 ./minio server /mnt/data --console-address ":9001"

后台启动(&结束)

./minio server /mnt/data --console-address ":9001" &

查询MinIO进程

ps -ef | grep minio

后台启动的MinIO如何关闭

kill pid

前台启动的MinIO如果关闭

ctrl + c

使用Docker启动运行MinIO

Docker安装:

安装前查看系统是否已经安装了Docker:yum list installed | grep docker

卸载Docker:yum remove docker.x86_64 -y yum remove docker-client.x86_64 -y yum remove docker-common.x86_64 -y

安装Docker:yum install docker -y 注:这种方式安装的Docker版本比较旧;(查看版本:docker -v)

安装最新版的Docker:

yum install yum-utils -y

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

查看是否安装成功:

docker --version(docker version,docker -v)

Docker启动:

  • 启动:systemctl start docker 或者 service docker start
  • 停止:systemctl stop docker 或者 service docker stop
  • 重启:systemctl restart docker 或者 service docker restart
  • 检查Docker进程的运行状态:systemctl status docker 或者 service docker status
  • 查看docker进程:ps -ef | grep docker
  • 查看docker系统信息:docker info
  • 查看所有的帮助信息:docker --help
  • 查看某个commond命令的帮助信息:docker commond --help

使用Docker镜像启动MinIO

  • 搜索MinIO镜像:docker search minio
  • 拉取MinIO镜像:docker pull minio/minio
  • 启动MinIO容器:docker run -p 9000:9000 -p 9001:9001 minio/minio server /mnt/docker/data --console-address :9001
  • 查看已安装的镜像:docker images
  • 删除镜像:docker rmi minio/minio

springboot 集成 MinIO

MinioClient 配置

/**
 * @version v1.0
 * @author OldGj 2024/10/31
 * @apiNote minio配置类
 */
@Configuration
public class MinIOConfig {

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
        .endpoint("http://192.168.66.200:9000")
        .credentials("admin", "password")
        .build();
    }
}
/**
 * @version v1.0
 * @author OldGj 2024/10/31
 * @apiNote MinIO服务类
 */
@Service
public class MinIOService {

    @Resource
    private MinioClient minioClient;

    public void testMinIOClient() {
        System.out.println(minioClient);
    }
}

MinioClient的常用API

Bucket 操作

报错: The difference between the request time and the server's time is too large.

解决:Linux 时间同步

yum install ntpdate -y

ntpdate pool.ntp.org

bucketExists()

用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在

    @Test
    void test01() throws Exception {
        // 用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在
        boolean exists = minioClient.bucketExists(
                BucketExistsArgs
                        .builder()
                        .bucket("myfile")
                        .build());
        System.out.println("myfile数据桶是否存在:" + exists); // false
    }
makeBucket()

用于创建一个新的存储桶(bucket),需要指定存储桶的名称;

    @Test
    void test02() throws Exception {
        // 用于创建一个新的存储桶(bucket),需要指定存储桶的名称
        minioClient.makeBucket(
                MakeBucketArgs
                        .builder()
                        .bucket("myfile")
                        .build());
    }
listBuckets()

用于列出用户有权访问的所有存储桶,返回存储桶的列表

   @Test
    void test03() throws Exception {
        // 用于列出用户有权访问的所有存储桶,返回存储桶的列表
        List<Bucket> buckets = minioClient.listBuckets();
        buckets.forEach(b -> System.out.println(b.name() + " -- " + b.creationDate()));
    }
removeBucket()

用于删除一个已存在的存储桶(bucket),删除失败会抛出异常;

    @Test
    void test04() throws Exception {
        // 用于删除一个已存在的存储桶(bucket),删除失败会抛出异常;
        minioClient.removeBucket(
                RemoveBucketArgs
                        .builder()
                        .bucket("myfile")
                        .build());
    }
Object 操作
putObject()

用于上传文件到指定的存储桶

@Test
    void test05() throws Exception {
        File file = new File("C:\\Users\\HX\\Desktop\\图片\\basketall.png");
        // 用于上传文件到指定的存储桶;
        ObjectWriteResponse objectWriteResponse = minioClient.putObject(PutObjectArgs.builder()
                .bucket("files")
                .object("test.png")
                .stream(new FileInputStream(file), file.length(), -1)
                .build());
        System.out.println(objectWriteResponse);
    }
uploadObject()

用于上传文件到指定的存储桶 -- 直接指定要上传的文件路径

    @Test
    void test05() throws Exception {
        // 直接指定要上传的文件路径
        ObjectWriteResponse objectWriteResponse1 = minioClient.uploadObject(UploadObjectArgs.builder()
                .bucket("files")
                .object("test2.jpg")
                .filename("C:\\Users\\HX\\Desktop\\code\\侯子.png")
                .build());
        System.out.println(objectWriteResponse1);
    }
statObject()

用于检查指定的对象(文件)的状态

    @Test
    void test06() throws Exception {
        //用于检查指定的对象(文件)的状态
        StatObjectResponse files = minioClient.statObject(StatObjectArgs.builder()
                .bucket("files")
                .object("test.png")
                .build());
        System.out.println(files.size());
    }
getPresignedObjectUrl()

用于生成一个对象(文件)的签名URL,以便可以通过HTTP访问

    @Test
    void test07() throws Exception {
        //用于生成一个对象(文件)的签名URL,以便可以通过HTTP访问
        String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                .bucket("files")
                .object("test.png")
                .expiry(3, TimeUnit.MINUTES) // 3分钟有效
                .method(Method.GET) // GET方法
                .build());
        System.out.println(url);
    }

http://www.kler.cn/a/373735.html

相关文章:

  • MySQL 主从复制、切换
  • Unity之如何在Linux上部署Dedicated Server专用服务器
  • wsl 使用docker 部署oracle11g数据库
  • 大数据挖掘和数据挖掘有什么不一样?
  • Ubuntu 开通 SSH 连接方式指南
  • PostgreSQL 删除角色
  • nginx------正向代理,反向代理生产,以及能否不使用代理详解
  • SpringBoot + Shiro权限管理
  • Linux下EDAC功能介绍
  • Linux第二讲:Linux权限理解
  • 若依框架部署到服务器后头像资源访问404
  • 图片懒加载(自定义指令)
  • 共享内存相关知识点
  • 架构师备考-数据库基础
  • 安科瑞AM5SE-IS 防逆流保护装置 功能全面 逆功率保护
  • Linux安装部署数据库:MongoDB
  • Redis高级篇之bigKey理论介绍以及优化
  • STATCOM静止同步补偿器原理及MATLAB仿真模型
  • Windows1学习笔记
  • 易考八股文之SpringBoot的启动流程
  • 【UBuntu20 配置usb网卡】 记录Ubuntu20配置usb网卡(特别是建立热点)
  • 企业奇门与金蝶云星空的数据集成解决方案
  • 数据库编程 SQLITE3 Linux环境
  • 必应Bing国内搜索广告代理商,必应广告如何开户投放?
  • Flink + Kafka 实现通用流式数据处理详解
  • 钉钉报销数据与金蝶云星空系统的集成解决方案