自建对象存储服务(MinIO)

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();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MinIO是一个开源的分布式对象存储服务,它可以在私有云环境中提供高性能和高可用性的存储解决方案。下面是关于MinIO的一些基本概念和使用方法: 1. 分布式存储MinIO使用分布式架构,可以将数据存储在多个节点上,实现数据的冗余和高可用性。每个节点都可以独立地提供存储服务,并且可以通过添加更多的节点来扩展存储容量和吞吐量。 2. 对象存储MinIO以对象的形式存储数据,每个对象都有一个唯一的键(Key)和对应的值(Value)。对象可以是任意类型的文件,例如图片、视频、文档等。通过使用对象存储MinIO可以提供高效的数据访问和管理。 3. 数据分片:MinIO将每个对象分成多个数据片段(Data Shard),并将它们分布在不同的节点上。这种数据分片的方式可以提高数据的可靠性和可用性,同时也可以提高数据的读写性能。 4. 冗余备份:MinIO使用纠删码(Erasure Code)技术来实现数据的冗余备份。纠删码可以将数据分成多个片段,并将这些片段分布在不同的节点上。即使某个节点发生故障,系统仍然可以通过其他节点上的数据片段进行数据恢复。 5. 客户端接口:MinIO提供了丰富的客户端接口,可以方便地与MinIO进行交互。你可以使用MinIO的命令行工具、API接口或者各种编程语言的SDK来管理和操作MinIO存储。 下面是一个使用MinIO Python SDK上传文件的例子: ```python from minio import Minio # 创建MinIO客户端 client = Minio('play.min.io', access_key='YOUR_ACCESS_KEY', secret_key='YOUR_SECRET_KEY', secure=True) # 上传文件 client.fput_object('mybucket', 'myobject', 'path/to/local/file.jpg') # 关闭客户端连接 client.close() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值