项目总结:分布式文件系统Minio


前言

文件系统是负责管理和存储文件的系统软件,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。
常见的文件系统:FAT16/FAT32、NTFS、HFS、UFS、APFS、XFS、Ext4等 。


一、MinIO

MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。

官网:https://min.io
中文:https://www.minio.org.cn/,http://docs.minio.org.cn/docs/

MinIO集群采用去中心化共享架构,每个结点是对等关系,通过Nginx可对MinIO进行负载均衡访问。

在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
它将分布在不同服务器上的多块硬盘组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。如下图:
在这里插入图片描述
Minio使用纠删码技术来保护数据,它是一种恢复丢失和损坏数据的数学算法,它将数据分块冗余的分散存储在各各节点的磁盘上,所有的可用磁盘组成一个集合,上图由8块硬盘组成一个集合,当上传一个文件时会通过纠删码算法计算对文件进行分块存储,除了将文件本身分成4个数据块,还会生成4个校验块,数据块和校验块会分散的存储在这8块硬盘上。
使用纠删码的好处是即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。 比如上边集合中有4个以内的硬盘损害仍可保证数据恢复,不影响上传和下载,如果多于一半的硬盘坏了则无法恢复。

二、本机使用

1.下载minio

下载地址在https://dl.min.io/server/minio/release/
MinIO的安装文件minio.zip解压即可使用,CMD进入有minio.exe的目录,运行下边的命令:
在这里插入图片描述1)老版本使用的MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY不推荐使用,推荐使用MINIO_ROOT_USER 和MINIO_ROOT_PASSWORD设置账号和密码。
2)pool即minio节点组成的池子,当前有一个pool和4个硬盘组成的set集合
3)因为集合是4个硬盘,大于2的硬盘损坏数据将无法恢复。
4)账号和密码默认为minioadmin、minioadmin,可以在环境变量中设置通过’MINIO_ROOT_USER’ and ‘MINIO_ROOT_PASSWORD’ 进行设置。

2.登录

下边输入http://localhost:9000进行登录,账号和密码为:minioadmin/minioadmin
在这里插入图片描述
登录成功
在这里插入图片描述下一步创建bucket,桶,它相当于存储文件的目录,可以创建若干的桶。
在这里插入图片描述
输入bucket的名称,点击“CreateBucket”,创建成功
在这里插入图片描述
点击“upload”上传文件。
下边上传几个文件
在这里插入图片描述

三、SDK

MinIO提供多个语言版本SDK的支持,下边找到java版本的文档:
地址:https://docs.min.io/docs/java-client-quickstart-guide.html
最低需求Java 1.8或更高版本:
引入maven依赖:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.4.3</version>
</dependency>
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.8.1</version>
</dependency>

参数说明:
需要三个参数才能连接到minio服务。
在这里插入图片描述

1.上传示例代码如下:

package com.meeting.file;

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.MinioException;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * @description 测试MinIO
 * @author Lixiao
 * @date 2024/7/11 21:24
 * @version 1.0
 */
public class MinioTest {
   

    static MinioClient minioClient =
            MinioClient.builder()
                    .endpoint("http://192.168.101.65:9000")
                    .credentials("minioadmin", "minioadmin")
                    .build();
   //上传文件
    @Test
    public  void upload() {
   
        try {
   
            UploadObjectArgs testbucket = UploadObjectArgs.builder()
                    .bucket("testbucket")
//                    .object("test001.mp4")
                    .object("001/test001.mp4")//添加子目录
                    .filename("D:\\develop\\upload\\1mp4.temp")
                    .contentType("video/mp4")//默认根据扩展名确定文件内容类型,也可以指定
                    .build
### 彻底删除MinIO中的文件夹 为了彻底删除MinIO中的文件夹及其所有内容,可以采用两种主要方法:通过编程接口或命令行工具`mc`。 #### 使用Python SDK逐个删除对象 由于MinIO不提供直接清空桶的API调用[^1],因此可以通过遍历并移除特定前缀下的所有对象来模拟这一操作。下面是一个利用Python MinIO库执行此任务的例子: ```python from minio import Minio from minio.error import S3Error client = Minio( "play.min.io", access_key="YOUR-ACCESSKEYID", secret_key="YOUR-SECRETACCESSKEY" ) def remove_objects(bucket_name, prefix): try: objects_to_remove = client.list_objects(bucket_name=bucket_name, prefix=prefix, recursive=True) for obj in objects_to_remove: client.remove_object(bucket_name, obj.object_name) print(f"All objects under '{prefix}' have been removed.") except S3Error as err: print(err) ``` 这段代码会连接到MinIO服务器,并迭代列出给定存储桶内具有指定前缀的对象列表,接着依次将其删除。 #### 利用MC命令行工具批量删除 另一种更简便的方法是借助官方提供的`mc`命令行实用程序来进行递归式的批量删除操作。需要注意的是,在使用该命令时应确保指定了`--recursive`选项以处理整个子树结构;而`--force`参数则允许强制执行而不提示确认[^2]。 ```bash ./mc rm --recursive --force myminio/bucketname/folderpath/ ``` 上述指令将会从名为`myminio`的服务端点所指向的目标位置中永久性地清除掉位于`bucketname`内的`folderpath`路径下所有的项目。 如果遇到即使已经成功执行过这些清理动作之后依旧能在界面或其他地方看到残留记录的情况,则可能是缓存机制所致或者是某些元数据未能同步更新的结果。此时建议尝试刷新浏览器页面、重启MinIO服务实例或是等待一段时间让变更生效。 对于因版本控制特性而导致的历史快照保留问题,应当查阅具体文档了解如何禁用或调整相关设置[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值