目录
1、minio简介
2、minio特性
3、下载及部署
4、配置开机自启动
5、集成Springboot
MinIO 是在GNU Affero 通用公共许可证 v3.0下发布的软件定义的高性能对象存储 。它与亚马逊的 S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。
本节选自官网介绍
高性能:
MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。
可扩展性:
MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。 这是我们坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
云的原生支持:
MinIO 是在过去4年的时间内从0开始打造的一款软件 ,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。 其中包括支持Kubernetes 、微服和多租户的的容器技术。使对象存储对于 Kubernetes更加友好。
与Amazon S3 兼容:
亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。 MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和。
安装包下载地址:地址1 地址2
上传到服务器指定位置并执行以下命令:
sudo chmod +x minio
./minio server /data/Minio/minio_data --console-address :9090 > /data/Minio/log/minio.log 2>&1 &
参数说明
./minio:/data/Minio文件夹下的minio应用
/data/Minio/minio_data:数据存储位置
–console-address 9090:指定固定端口(设置https访问时必须指定)
/data/Minio/log/minio.log:日志存储位置
输出以下信息说明运行成功。
打开Web 浏览器输入minio部署:ip端口:9090,如本机则:127.0.0.1:9090
1)创建编辑minio.sh脚本,存储在minio应用同级目录,如/data/Minio 文件夹下
cd /data/Minio
touch minio.sh
vim minio.sh
2)minio.sh脚本内容如下:
#!/bin/bash
./minio server /data/Minio/minio_data --console-address :9090 > /data/Minio/log/minio.log 2>&1 &
3)赋予minio.sh可执行权限
sudo chmod +x minio.sh
4)编辑开机运行文件 /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
5)添加以下脚本:
cd /data/Minio
./minio.sh minio
6)赋予rc.local可执行权限
sudo chmod +x /etc/rc.local
7)重启服务器测试
reboot
8)重启之后,查看是否启动
ps -ef | grep minio
pom.xml导入:
io.minio minio 8.2.1
对monio进行创建桶,删除桶,上传文件,下载文件,删除文件
代码:
package andanyoung.redis.rediscluster.controller;
import io.minio.*;
import io.minio.errors.*;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* @author wly
* @date 2022-05-23 8:45:27
* @describe java minio 创建桶,删除桶及文件上传,下载及删除
*/
@Slf4j
@RestController
public class minioFileUploader {
//创建桶
@GetMapping("creatBucket")
public String creatBucket(){
log.info("开始创建桶!");
String name="datatest";
String result="创建桶成功,桶名称:"+name;
try {
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")//minio 服务器地址
.credentials("minioadmin","minioadmin")//minio 账号密码
.build();
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("datatest").build());
if (!found) {
// Make a new bucket called 'datatest'.
minioClient.makeBucket(MakeBucketArgs.builder().bucket("datatest").build());
} else {
log.info("Bucket 'datatest' already exists.");
}
log.info(result);
return result;
}catch (Exception e){
log.info("创建桶失败!");
return "创建桶失败!";
}
}
//删除桶
@GetMapping("removeBucket")
public String removeBucket() {
log.info("开始删除桶!");
String name="datatest";
String result="删除桶成功,桶名称:"+name;
try {
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")//minio 部署服务器地址
.credentials("minioadmin","minioadmin")//minio 账号密码
.build();
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("datatest").build());
if (found) {
// remove a bucket called 'datatest'.
minioClient.removeBucket(RemoveBucketArgs.builder().bucket("datatest").build());
} else {
log.info("Bucket 'datatest' already exists.");
}
log.info(result);
return result;
}catch (Exception e){
log.info("删除桶失败!");
return "删除桶失败!";
}
}
//文件上传
@GetMapping("fileUploader")
public String fileUploader(){
String path="D://data/hello.txt";
log.info("开始进行文件上传,文件名称:hello.txt");
try {
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")//minio 部署服务器地址
.credentials("minioadmin","minioadmin")//minio 账号密码
.build();
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("datatest").build());
if (!found) {
// Make a new bucket called 'datatest'.
minioClient.makeBucket(MakeBucketArgs.builder().bucket("datatest").build());
} else {
log.info("Bucket 'datatest' already exists.");
}
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("datatest") //minio 桶名称
.object("hello.txt") //minio服务器上的保存文件名称
.filename(path) //本地文件路径
.build());
log.info(path);
}catch (Exception e){
log.info("文件上传失败!");
}
return "文件上传成功,上传到桶位置是:datatest,上传成功文件是:"+path;
}
//下载文件
@GetMapping("downloadFiles")
public String downloadFiles() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
String path="D://data/";
String bucketName = "datatest";
log.info("开始进行文件下载,文件名称:hello.txt");
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")//minio 部署服务器地址
.credentials("minioadmin","minioadmin")//minio 账号密码
.build();
// 检查'datatest'是否存在。
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (found) {
// 列出'my-bucketname'里的对象
Iterable> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
//下载minio指定目录下的所有文件
// for (Result- result : myObjects) {
// Item item = result.get();
// log.info(item.lastModified() + ", " + item.size() + ", " + item.objectName());
//
// minioClient.downloadObject(
// DownloadObjectArgs.builder()
// .bucket(bucketName)
// .object(item.objectName())
// .filename(path+item.objectName())
// .build());
// }
//下载minio指定目录下的某个文件
minioClient.downloadObject(
DownloadObjectArgs.builder()
.bucket(bucketName)
.object("hello.txt")
.filename(path+"hello.txt")
.build());
log.info("文件下载成功,文件保存路径是:"+path+",下载文件名称是:hello.txt");
}
return "文件下载成功,文件保存路径是:"+path+",下载文件名称是:hello.txt";
}
//删除指定文件
@GetMapping("removeFiles")
public String removeFiles(){
String bucketName = "datatest";
log.info("开始进行删除指定文件!");
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")//minio 部署服务器地址
.credentials("minioadmin","minioadmin")//minio 账号密码
.build();
// 检查'datatest'是否存在。
try{
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (found) {
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket(bucketName)
.object("hello.txt")
.build());
}
}catch (Exception e){
log.info("删除指定文件失败!");
}
return "文件删除成功,删除文件名称是:hello.txt";
}
}
官网API接口文档