文章目录

  • 1.什么是minio
    • 1.1 minio的优点
    • 1.2 MinIO的基础概念
    • 1.3 纠删码EC (Erasure Code)
    • 1.4 存储形式
    • 1.5 存储方案
  • 2 MinIO环境搭建
    • 2.1 单机部署(standalone mode)
      • 2.1.1 基于Windows(non-erasure code mode)
      • 2.1.2 纠删码模式
    • 2.2 分布式集群部署
      • 2.2.1Windows示例:
    • 2.3 Minio客户端使用
      • 2.3.1部署客户端MC
    • 2.4 MinIO Server 及Minio Client数据同步
    • 2.5 Docker环境下安装(单机)
  • 3. springboot集成minio实现上传和删除资源
    • 3.1 引入依赖
    • 3.2 创建对象保存资源相关信息
    • 3.3 上传资源类
    • 3.4 配置minio相关信息
    • 3.5 存储路径分析
    • 3.6 测试
      • 3.6.1 上传资源
      • 3.6.2 删除资源

1.什么是minio

MinlO是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinlO是一个非常轻量的服务 可以很简单的和其他应用的结合,类似NodeJS, Redis或者MySQL。

官网:https://min.io

中文官网文档:https://docs.min.io/cn/

英文官网文档:https://docs.min.io

介绍参考:https://www.jianshu.com/p/cbd1d8cac6f0

minio GitHub地址:https://github.com/minio/minio

源码地址:https://github.com/gl-stars/small-study-case/tree/master/nm-demo/classicsCase-demo/src/main/java/com/classics/controller

1.1 minio的优点

  • 部署简单:一个single二进制文件即是一切,还可以支持各种平台。
  • minio支持海量存储,可按2one打展(原zone不受任何影响),支持单个对象最大5TB;
    兼容Amazon S3接口,充分考虑开发人员的需求和体验;
  • 低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1 M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的
  • 读写性能优异

1.2 MinIO的基础概念

  • Object: 存储到Minio的基本对象,如文件、字节流,Anything…
  • Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。
  • Drive: 即存储数据的磁盘,在MinIO启动时,以参数的方式传入。Minio 中所有的对象数据都会存储在Drive里。
  • Set:即一组Drive的集合,分布式部署根据集群规模自动划分一 个或多个Set, 每个Set中的Drive分布在不同位置。一个对象存储在一个Set 上。(For example: {1…44} is divided into 4 sets each of size 16.)
  • 一个对象存储在一 个Set上
  • 一个集群划分为多个Set
  • 一个Set包含的Drive数显是固定的,默认由系统根据集群规模自动计算得出
  • 一个SET中的Drive尽可能分布在不同的节点上

1.3 纠删码EC (Erasure Code)

MinIO使用纠删码机制来保证高可靠性,使用highwayhash来处理数据损坏( Bit Rot Protection)。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。

即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

1.4 存储形式

文件对象上传到MinlO ,会在对应的数据存储磁盘中,以Bucket名称为目录,文件名称为下一级目录,文件名下是xl.meta,通过奇偶的形式存储 编码数据块及检验块和元数据文件。

如:

有data01,data02,data03,data04 四块盘

其中奇数盘:data01和data03中存储的是编码数据块及检验块(EC码)

偶数盘:data02和data04 存储的是元数据文件

1.5 存储方案

2 MinIO环境搭建

官方文档:MinIO High Performance Object Storage — MinIO Object Storage for Kubernetes
中文文档:https://docs.minio.org.cn/docs/
MinIO支持多种Server启动模式:

2.1 单机部署(standalone mode)

minio server的standalone模式,即要管理的磁盘都在host本地。该启动模式一般仅用于实验环境、测试环境的验证和学习使用。在standalone模式下,还可以分为non-erasure code mode和erasure code mode.

non-erasure code mode:

在此启动模式下,对于每一份对象数据,minio直接在data下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失。

erasure code mode:

此模式为minio server实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server会自动启用erasure code mode , erasure code对磁盘的个数是有要求的,如不满足要求。实例启动将失败。erasure code启用后,要求传给minio server的

Endpointi (standalone模式下,即本地磁盘上的目录)至少为4个。

2.1.1 基于Windows(non-erasure code mode)

操作系统: 地址
Windows10、11 https://min.io/docs/minio/windows/index.html

下载:
http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe|

cmd命令启动程序

进入到minio的目录下,执行:

minio.exe server D:\Office\Test1

这里有两个报错:

WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.

WARNING: Detected default credentials ‘minioadmin:minioadmin’, we recommend that you change these values with ‘MINIO_ROOT_USER’ and ‘MINIO_ROOT_PASSWORD’ environment variables

第一个报错:因为时单机部署,且只有一块磁盘,因此这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失,所以报错

第二个报错:没有指定用户名和登录密码。(MinIO会给定默认账户密码及端口号)

如上图Console中的任意一个地址皆可访问:
http://192.168.10.25:61162
http://127.0.0.1:61162/
访问界面如下:

使用默认的登录密码即可使用(defaultuser : minioadmin,defaultpassword : minioadmin)

登录后界面:

点击Create bucket:

桶的命名规则:

●存储桶名称的长度必须介于3 (最小)到63 (最大)个字符之间。

●存储桶名称只能由小写字母、数字、点(.) 和连字符(-) 组成。

●存储桶名称不得包含两个相邻的句点,或与连字符相邻的句点。

●存储桶名称的格式不得为IP地址(例如192.168.5.4)。

●存储桶名称不得以前缀 xn 开头–.

●存储桶名称不得以后缀 -s3alias 结尾。此后缀保留用于接入点别名。

●存储桶名称在分区中必须是唯一的。

下图为上传文件后的界面:


上传成功后在本地可以看到文件:

2.1.2 纠删码模式

Minio使用纠删码erasure code 和校验和checksum来保护数据免受硬件故障和无声数据损坏。即便您丢失一 半数量(N/2)的硬盘,您仍然可以恢复数据。

纠删码是一种恢复丢失和损坏数据的数学算法,Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块) , 你们仍可以从剩下的盘中的数据进行恢复。

在Windows中操作:
cmd命令启动程序:

minio.exe server D:\Office\Test1 D:\Office\Test2 D:\Office\Test3 D:\Office\Test4

或者

minio.exe server D:\Office\Test{1…4}

与2.1.1的区别在于启动时添加了多块盘,如下图:


新建桶及上传文件不再赘述。

上传文件后,可以在每个盘中看到其文件,如下图:

测试:在本地磁盘删除一个xl.meta文件

结果:过一会,该文件会自动恢复(因为EC码,自动恢复了)

2.2 分布式集群部署

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。 由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。

分布式存储可靠性常用方法

分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失。不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。

冗余

冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方实现,如Hadoop的文件系统(3个副本),Redis 的集群,MySQL的主备模式等。

校验

校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如TCP协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的RAID技术,纠删码(Erasure Code)技术等。MinlO 采用的就是纠删码技术。

分布式Minio优势

数据保护

分布式Minio采用纠删码来防范多个节点宕机和位衰减bit rot。

分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

高可用

单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+ 1个硬盘来创建新的对象。

例如,一个16节点的Minio集群, 每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写数据。

一致性

Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write 一致性模型。

运行分布式Minio

启动一个分布式Minio实例。你只需要把硬盘位置做为参数传给minio server命令即可,然后你需要在所有其它节点运行同样的命令。

●分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export(Linux)或者 path(Windows)成环境变量。 新版本使用MINIO_ROOT_USER & MINIO_ROOT_PASSWORD。

●分布式Minio使用的磁盘里必须是干净的,里面没有数据。

●下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径,每个IP之间可以互相通信。

●分布式Minio甲的节点时间差不能超过3秒,你可以使用NTP来保证时间一致。

●在Windows 下运行分布式Minio处于实验阶段,请悠着点使用。

2.2.1Windows示例:

4个节点(minio01、minio02、minio03、minio04),每节点4块盘(Data01…04)

Windows建议写成.bat脚本文件运行,如下图:

代码如下:

set MINIO_ROOT_USER=admin
set MINIO_ROOT_PASSWORD=12345678
minio.exe server --console-address “192.168.0.46:9001” --address “192.168.0.46:9091” ^
http://192.168.0.46:9091/D:/Office/Data{01…04} ^
http://192.168.0.39:9092/D:/Office/Data{01…04} ^
http://192.168.0.40:9093/D:/Office/Data{01…04} ^
http://192.168.0.61:9094/E:/Office/Data{01…04}

参数详解:

● MINIO_ROOT_USER=admin 设置登录账号(access秘钥)

● MINIO_ROOT_PASSWORD=12345678 设置登录密码(secret秘钥)

● --console-address “192.160.0.96:9001” 指定IP和API端口

● --address “192.160.0.96:9091” 指定IP和控制台(UI界面)端口

● ^ 表示连接符 后面不可接空格

● Data{01…04} 表示Data01、Data02、Data03、Data04 这四块盘,找不到会自动创建文件

在每一个节点(服务器)运行如上代码(记得修改对应的IP和端口号)

运行.bat脚本之后可以看到:

根据图中信息在浏览器浏览器登录

创建桶–》上传文件

在每一个服务器中可以看到文件已上传

本地磁盘也可查看到:

在Web界面可以看到服务器的在线状态:

2.3 Minio客户端使用

MinlO Client (mc)为Is, cat, cp,mirror, diff, find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS signature v2和V4)。

ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。

2.3.1部署客户端MC

操作系统 地址
Windows11 http://docs.minio.org.cn/minio/baremetal/reference/minio-cli/minio-mc.html
配置文件路径C:\Users\当前用户\config.json

Windows建议把mc.exe文件放在C:\Windows\System32目录下,这样mc命令就是全局命令。

查看命令使用语法:

直接数据命令回车即可,比如:mc config
使用 – help参数,比如:mc config – help
使用 mc config -h 命令查看 mc config 的帮助信息,如下:

其中,host 命令用来添加、删除和列出配置文件中的服务主机。

我们继续使用 “mc config host -h” 命令查看 mc config host 子命令的帮助信息,如下:


示例

查看 HOST 列表

使用 mc config host ls 命令列出 MinIO 客户端中的所有 host,如下:

添加新的 HOST

命令模板:

mc config host add<ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SRCRET-KEY> [--api API-SIGNATURE]

其中:

● ALIAS 别名就是给你的云存储服务起了一个短点的外号。

● YOUR-S3-ENDPOINT 云存储的主机和端口,如:http://127.0.0.1:9000

● YOUR-ACCESS-KEY 云存储服务的 Access Key

● YOUR-SECRET-KEY 云存储服务的 Secret Key

● API-SIGNATURE API签名是可选参数,默认情况下它被设置为 “S3v4”

示例-Amazon S3云存储

参考AWS Credentials指南获取你的AccessKeyID和SecretAccessKey:

mc config host add minio01 http://192.168.0.46:9091 admin 12345678 --api s3v4

通过mc config host ls 可以看到新增的host

其他MC命令参考官方文档。

2.4 MinIO Server 及Minio Client数据同步

功能将一个集群中的Minio服务的数据同步到另一集群的Minio服务中去。

minio server
搭建两套Minio分布式系统(参考2.2.1)

示例:

第一套Minion系统中有(后文称M1)

192.168.0.11:9091、192.168.0.12:9092

2个节点,每个节点4块盘

第二套Minion系统中有(后文称M2)

192.168.0.21:9093、192.168.0.22:9094

2个节点,每个节点4块盘

密钥均为:

● MINIO_ROOT_USER=admin 设置登录账号(access秘钥)

● MINIO_ROOT_PASSWORD=12345678 设置登录密码(secret秘钥)

若把M1中的桶同步到M2中

使用mc客户端

添加host:

mc config host add minio91 http://192.168.0.11:9091 admin 12345678

mc config host add minio93 http://192.168.0.21:9093 admin 12345678

每一套Minio系统使用Nginx负载均衡并反向代理,所以只需添加M1和M2中的任一节点即可

同步两个Minio服务的bucket:将minio91的所有桶数据同步至minio93

mc mirror --remove --overwrite --watch minio91 minio93

写如下.bat脚本,让Minio client实时监听文件改动并同步

@echo off
SET minio91_uat=minio91
SET minio93_uat=minio93
SET Description=minioc
SET After=network.target
SET Type=simple
mc mirror --remove --overwrite --watch “%minio91_uat%” “%minio93_uat%”
SET %minio93_uat%Restart=on-failure
SET %minio93_uat%WantedBy=multi-user.target
EOF

运行时如果提示,没有指定锁对象,则在minio93中新建一个桶(与minio91的桶名一致),勾选对象锁定

2.5 Docker环境下安装(单机)

参考:https://docs.min.io/cn/minio-docker-quickstart-guide.html

  • 创建文件夹保存资源
mkdir -p /app/cloud/minio/data
mkdir -p /app/cloud/minio/config
# 给予权限
chmod -R 777 /app/cloud/minio/data
chmod -R 777 /app/cloud/minio/config
  • 创建minio启动脚本
mkdir -p /opt/docker
vim /opt/docker/minio.sh
  • 写入启动脚本数据
docker stop minio
docker rm minio
docker run -d -p 9000:9000 \--name minio \-e "MINIO_ACCESS_KEY=minio" \-e "MINIO_SECRET_KEY=Aa123456" \-v /app/cloud/minio/data:/data \-v /app/cloud/minio/config:/root/.minio \minio/minio server /data

MINIO_ACCESS_KEY和 MINIO_SECRET_KEY相当于用户名和密码,上传资源时需要使用到。

  • 启动脚本
    因为我使用的是docker安装,所以不用直接去拉去镜像。我们可以直接启动这个脚本,会自动拉去镜像的。
sh /opt/docker/minio.sh
  • 浏览器访问
    注意需要将9000端口开放。
http://主机IP:9000

3. springboot集成minio实现上传和删除资源

3.1 引入依赖

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

3.2 创建对象保存资源相关信息

package com.classics.dto;import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.util.List;/*** Minio Bucket访问策略配置*/
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
public class BucketPolicyConfigDto {private String Version;private List<Statement> Statement;@Data@EqualsAndHashCode(callSuper = false)@Builderpublic static class Statement {private String Effect;private String Principal;private String Action;private String Resource;}
}
package com.classics.dto;import lombok.Data;
import lombok.EqualsAndHashCode;/*** 文件上传返回结果*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MinioUploadDto {/**** 文件访问URL*/private String url;/*** 文件名称*/private String name;/**** 对象存储名称,删除资源的时候需要指定这个名称*/private String objectName ;
}

3.3 上传资源类

package com.classics.dto;import lombok.Data;
import lombok.EqualsAndHashCode;/*** 文件上传返回结果*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MinioUploadDto {/**** 文件访问URL*/private String url;/*** 文件名称*/private String name;/**** 对象存储名称,删除资源的时候需要指定这个名称*/private String objectName ;
}

3.4 配置minio相关信息

minio:endpoint: http://服务器IP:9000 #MinIO服务所在地址bucketName: mall #存储桶名称accessKey: minio #访问的keysecretKey: Aa123456 #访问的秘钥

3.5 存储路径分析

3.6 测试

3.6.1 上传资源

3.6.2 删除资源

转载至:
https://blog.csdn.net/Pencil107/article/details/127733966
https://blog.csdn.net/qq_41853447/article/details/111994873

minio的安装和springboot集成minio相关推荐

  1. SpringBoot笔记:SpringBoot集成MinIO分布式文件系统

    文章目录 搭建MinIO集群 SpringBoot集成 添加依赖 添加配置 获取MinioClient MinioUtils完整工具类 测试代码 搭建MinIO集群 首先搭建MinIO的分布式集群,集 ...

  2. springboot 集成MinIo 文件服务器

    springboot 集成 MinIo 文件服务器 1.添加依赖 dependency><groupId>io.minio</groupId><artifactId ...

  3. SpringBoot集成MinIo实现资源库功能

    项目背景 要实现一个资源库的功能,实现图片.文件.视频等资源的上传和下载. 项目git地址,还没完全完成 https://github.com/zhumengting/resource-managem ...

  4. SpringBoot集成Minio搭建自己的分布式文件服务器(Minio集成篇)

    目录 1.导入依赖 2.创建spring boot工程,工程名为springboot-minio 3.配置minio配置文件 4.创建配置类MinioConfig 5.创建Minio工具类MinioU ...

  5. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

  6. spring cloud 文件服务器,SpringBoot集成MinIO文件服务器

    docker-compose安装minio version: '3' services: minio: image: minio/minio:latest # 原镜像`minio/minio:late ...

  7. minio 单机版安装

    Minio 单机版安装 1.linux下载minio二进制文件 wget https://dl.min.io/server/minio/release/linux-amd64/minio 官网下载不下 ...

  8. minio 文件预览_MinIO Docs | MinIO快速入门指南

    MinIO Quickstart Guide MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例 ...

  9. Springboot项目集成Minio文件服务器(下)

    Springboot项目集成Minio文件服务器(下) 1.配置依赖 在pom文件里面配置Minio的相关依赖. <!--添加minio的依赖--><dependency>&l ...

最新文章

  1. JS问题Uncaught ReferenceError:XXXX is not defined
  2. 通过分析 JDK 源代码研究 Hash 存储机制--转载
  3. 看下completablefuture(暂时没看完)
  4. SAP Spartacus B2B ListComponent响应回车事件的实现
  5. NB-IOT:物联网【无码化】体验NB-loT全流程
  6. 递归处理汉诺塔问题(c++/python)
  7. 来了!最详细2019实习生退税完全攻略(适用于所有实习过的同学)
  8. 利用反射和lambda获取变量名字
  9. 如何在word中的图片上画圈标注_教你如何轻松在图片上画圈圈、画箭头、写注释...
  10. 一个屌丝程序员的青春(三六五)
  11. Nrf51xxx Bluetooth Related
  12. atan(y/x)与atan2(y,x)的区别
  13. layui.css地址,layui+高德获取经纬度(可点击更换位置)
  14. App手机应用自建平台 无需编码技术 轻松制作
  15. [4G5G专题-41]:物理层-物理随机接入信道PRACH与随机接入过程
  16. 分析各渠道广告,建立评分模型以及找到优质渠道的特性
  17. 设计实现信用卡用户定时还款功能
  18. 汉文化资讯社区(maven ,SSM ,MySQL)
  19. 章鱼体验思杰第二天:
  20. 产品经理不能做错的5件事

热门文章

  1. VLSI数字信号处理系统——第一章数字信号处理系统导论
  2. cad块无法分解,炸不开怎么办?
  3. 半车二分之一车辆垂向动力学模型
  4. 超方便的验证码套件Captcha Genie,帮你轻松在网页上制作出图片验证码!(下)
  5. 网络安全工程师可以考取哪些有价值的证书?
  6. 2023,程序员的出路在哪里?
  7. 来看看老程序员上班无聊之余,除了看CSDN还会做什么~
  8. 计算机硬件系列电子书籍
  9. vb.net 视频前了解
  10. 冯华君是个怎么样的人?