自建对象存储服务(MinIO)

本文介绍MinIO,一种基于Apache License v2.0的开源对象存储服务,适用于存储大容量非结构化数据,如图片、视频等。文章详细描述了MinIO的部署方式,包括单节点和分布式部署,并提供了Java客户端的上传和下载示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MinIO对象存储服务

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。试用相比 hadoop hdfs 分布式存储服务轻量很多。且支持单节点部署,非常容易上手。推荐使用!

官网地址,含官方文档

http://docs.minio.org.cn/docs/

部署

单节点部署

#1 下载地址
https://dl.min.io/server/minio/release/windows-amd64/minio.exe

#2 cmd 启动 server 指定数据存储目录
minio.exe server E:\data1

#3 启动日志如下
Endpoint:  http://169.254.6.240:9000  http://169.254.157.192:9000  http://169.254.87.123:9000  http://192.168.10.112:9000  http://169.254.0.44:9000  http://169.254.143.36:9000  http://127.0.0.1:9000

Browser Access:
   http://169.254.6.240:9000  http://169.254.157.192:9000  http://169.254.87.123:9000  http://192.168.10.112:9000  http://169.254.0.44:9000  http://169.254.143.36:9000  http://127.0.0.1:9000

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'
Exiting on signal: INTERRUPT

分部署部署

  • 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
  • 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
  • 分布式Minio里的节点时间差不能超过3秒
  • 分布式部署至少需要4个节点,否则启动会报错

linux 启动分布式Minio实例,4个节点,每节点1块盘;命令需要在每个服务器执行一遍

export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
minio server http://192.168.10.11/data1 http://192.168.10.12/data2 \
               http://192.168.10.13/data3 http://192.168.10.14/data4 \

win 启动分布式Minio实例,1个节点,4块盘(目前win分布式部署处于实验阶段慎重使用)

set MINIO_ACCESS_KEY=minioadmin
set MINIO_SECRET_KEY=minioadmin
minio.exe server http://192.168.10.112/E:/data1 http://192.168.10.112/E:/data2 http://192.168.10.112/E:/data3 http://192.168.10.112/E:/data4

在这里插入图片描述
在这里插入图片描述

UI查看

#账号密码 'minioadmin'
http://127.0.0.1:9000

在这里插入图片描述

客户端

Maven依赖

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

上传功能

public static void main(String[] args) {
    try {
        // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
        MinioClient minioClient = new MinioClient("http://192.168.10.112:9000", "minioadmin", "minioadmin");
        // 检查存储桶是否已经存在
        boolean isExist = minioClient.bucketExists("asiatrip");
        if(isExist) {
            System.out.println("Bucket already exists.");
        } else {
            // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
            minioClient.makeBucket("asiatrip");
        }
        // 使用putObject上传一个文件到存储桶中。
        // 存储桶\上传文件名称\上传文件目录\PutObjectOptions(上传InputStream对象时传)
        minioClient.putObject("asiatrip","0.zip", "E:/0.zip",null);
        System.out.println(" End:"+sdf.format(new Date()));
    } catch(MinioException e) {
        System.out.println("Error occurred: " + e);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }
}

在这里插入图片描述

下载功能

public static void main(String[] args) {
    try {
        // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
        MinioClient minioClient = new MinioClient("http://192.168.10.112:9000", "minioadmin", "minioadmin");
        try {
            // 调用statObject()来判断对象是否存在。
            // 如果不存在, statObject()抛出异常,
            // 否则则代表对象存在。
            minioClient.statObject("asiatrip", "test.zip");
            // 获取"myobject"的输入流。
            InputStream input = minioClient.getObject("asiatrip", "test.zip");
            //将输入流输出到磁盘文件,byte[文件大小]
            byte[] bytes = new byte[1289500];
            int index;
            File file = new File("e:/test.zip");
            FileOutputStream downloadFile = new FileOutputStream(file);
            while ((index = input.read(bytes)) != -1) {
                downloadFile.write(bytes, 0, index);
                downloadFile.flush();
            }
            downloadFile.close();
            // 关闭流,此处为示例,流关闭最好放在finally块。
            input.close();
        } catch (MinioException e) {
            System.out.println("Error occurred: " + e);
        }
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }
}
Minio是一个基于Apache License v2.0开源协议的工具存储服务,它兼容亚马逊S3云存储服务接口,适用于存储大容量非结构化的数据,比如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。\[1\] Minio具有以下功能特性: 1. Amazon S3兼容:Minio使用Amazon S3 v2/v4 API,可以使用Minio SDK、Minio Client、AWS SDK和AWS CLI访问Minio服务器。 2. 数据保护:Minio使用Minio Erasure Code来防止硬件故障,即使有一半以上的驱动器损坏,数据仍然可以恢复。 3. 高度可用:Minio服务器可以容忍分布式设置中高达(N/2)-1节点故障,并且可以配置在Minio和任意Amazon S3兼容服务器之间存储数据。 4. Lambda计算:Minio服务器通过兼容AWS SNS/SQS的事件通知服务触发Lambda功能,支持的目标包括消息队列(如Kafka、NATS、AMQP、MQTT)、Elasticsearch、Redis、Postgres和MySQL等数据库。 5. 加密和防篡改:Minio提供机密性、完整性和真实性保证的加密数据,使用AES-256-GCM、ChaCha20-Poly1305和AES-CBC支持服务器端和客户端加密。 6. 可对接后端存储:除了Minio自己的文件系统,还支持DAS、JBODs、NAS、Google云存储和Azure Blob存储等后端存储。\[1\] 您可以通过自建Minio对象存储集群的方式来满足对存储服务的需求,特别是在不使用云厂商提供的存储服务的情况下。\[1\] Minio的官方网站是https://min.io/,您可以在该网站上找到更多关于Minio的信息和文档。\[2\] \[3\] #### 引用[.reference_title] - *1* [Minio对象存储](https://blog.csdn.net/weixin_30575309/article/details/99263291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [minio对象存储](https://blog.csdn.net/qq_17522211/article/details/126867470)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值