开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情
Minio是什么?
Minio 是一个基于Apache License v2.0开源协议的对象存储服务,轻量且与性能兼备。单个文件大小可以达到5T,可谓“非常可观”。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。
另外一点要提的是它的纠缠码部署模式。
纠缠码是一种用于重建丢失或损坏的数据的数学算法,它将数据分块冗余的分散存储在各个节点的磁盘上,所有的可用磁盘组成一个集合。
如下图,是由8个硬盘组成的一个集合,当上传一个文件通过纠缠码算法计算对文件进行分块存储,处理将文件本身分成4个数据块,还会生成4个校验块,分散存储在8个硬盘上。
纠缠码带来的好处是,即便丢失一半数量的硬盘,仍然可以恢复数据。丢失小于一半的磁盘是支持上传下载、访问等等,丢失一半的磁盘就不能上传文件了。 这里来演示一下数据恢复,我们挂载了data1、data2两个磁盘,
如下图是创建的bucket:
我们删除一个磁盘:
仍然正常使用
docker搭建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的搭建与上传测试就结束了!!