【MINIO】基于docker搭建minio与文件上传

533 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情

Minio是什么?

Minio 是一个基于Apache License v2.0开源协议的对象存储服务,轻量且与性能兼备。单个文件大小可以达到5T,可谓“非常可观”。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。

另外一点要提的是它的纠缠码部署模式。

纠缠码是一种用于重建丢失或损坏的数据的数学算法,它将数据分块冗余的分散存储在各个节点的磁盘上,所有的可用磁盘组成一个集合。

如下图,是由8个硬盘组成的一个集合,当上传一个文件通过纠缠码算法计算对文件进行分块存储,处理将文件本身分成4个数据块,还会生成4个校验块,分散存储在8个硬盘上。

image.png

纠缠码带来的好处是,即便丢失一半数量的硬盘,仍然可以恢复数据。丢失小于一半的磁盘是支持上传下载、访问等等,丢失一半的磁盘就不能上传文件了。 这里来演示一下数据恢复,我们挂载了data1、data2两个磁盘,

image.png

如下图是创建的bucket:

image.png 我们删除一个磁盘:

image.png 仍然正常使用

image.png

docker搭建minio

minio的镜象地址

step1:拉取镜像

docker pull minio/minio

拉最新版的也是可以的,这里测试过了。

step2: 创建几个文件夹(你要挂几个磁盘就创建几个,如小编使用了data1、data2、3、4四个盘)用mkdir命令创建或直接新建文件夹都是可以的。

step3:部署运行

【避坑】千万不要加--net=host \,会打不开控制页面的。

docker run -p 9000:9000 -p 9090:9090 \
     --name minio \
     -d --restart=always \
     -e "MINIO_ROOT_USER=minioadmin" \
     -e "MINIO_ROOT_PASSWORD=minioadmin" \
     -v /Users/laoli/Desktop/project2022/minio/data1:/data1 \
     -v /Users/laoli/Desktop/project2022/minio/data2:/data2 \
     -v /Users/laoli/Desktop/project2022/minio/data3:/data3 \
     -v /Users/laoli/Desktop/project2022/minio/data4:/data4 \
     -v /Users/laoli/Desktop/project2022/minio/config:/root/.minio \
     minio/minio server \
     /data --console-address ":9090" -address ":9000"
  • 这里的登录账号与密码是minioadmin 那到这里呢,咱们就搭建好了,访问Minio登录页面

上传测试

官方提供的java文档,这个文档这两天(2023.2.9)进不去,我也不太清楚什么情况...

在使用java做测试的时候,我们需要先导入下面两个依赖:

<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>

上传测试代码如下:

public class MinIOTest {

 static MinioClient minioClient =
         MinioClient.builder()
                 .endpoint("http://127.0.0.1:9000")
                 .credentials("minioadmin", "minioadmin")
                 .build();
 //上传文件
public static void upload()throws IOException, NoSuchAlgorithmException, InvalidKeyException {
 try {
  boolean found =
          minioClient.bucketExists(BucketExistsArgs.builder().bucket("testbucket").build());
  //检查testbucket桶是否创建,没有创建自动创建
  if (!found) {
   minioClient.makeBucket(MakeBucketArgs.builder().bucket("testbucket").build());
  } else {
   System.out.println("Bucket 'testbucket' already exists.");
  }
  //上传本地文件1.mp4
  minioClient.uploadObject(
          UploadObjectArgs.builder()
                  .bucket("testbucket")
                  .object("1.mp4")
                  .filename("/Users/laoli/Desktop/blog/1.mp4")
                  .build());
  //上传1.avi,上传到avi子目录
  minioClient.uploadObject(
          UploadObjectArgs.builder()
                  .bucket("testbucket")
                  .object("avi/1.avi")
                  .filename("D:\\develop\\upload\\1.avi")
                  .build());
  System.out.println("上传成功");
 } catch (MinioException e) {
  System.out.println("Error occurred: " + e);
  System.out.println("HTTP trace: " + e.httpTrace());
 }

}
public static void main(String[] args)throws IOException, NoSuchAlgorithmException, 	InvalidKeyException {
 upload();
	}
}

至此,关于Minio的搭建与上传测试就结束了!!