目录

MinIO 对象存储

MinIO 是高性能 S3(Simple Storage Service / 简单存储服务) 兼容对象存储。

MinIO offers high-performance, S3 compatible object storage. Native to Kubernetes, MinIO is the only object storage suite available on every public cloud, every Kubernetes distribution, the private cloud and the edge. MinIO is software-defined and is 100% open source under GNU AGPL v3.

MinIO 存储堆栈具有三个主要组件:MinIO Server、MinIO Client(又名mc,这是一个命令行客户端,用于与任何Amazon S3兼容的服务器进行对象和文件管理),以及可供应用程序开发人员使用的MinIO Client SDK进行交互与任何与Amazon S3兼容的服务器。

MinIO Server

1
2
brew install minio/stable/minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password minio server /Users/ynthm/Apps/miniodata --console-address ":9001"

MinIO 控制台

MinIO Client (mc)

MinIO 客户端 mc 命令行工具提供了一种现代的替代 UNIX 命令, 如 ls、cat、cp、mirror 和 diff 支持文件系统和兼容 Amazon S3 的云存储服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
brew install minio/stable/mc
mc --help
# Create an Alias for the S3-Compatible Service
# mc alias set ALIAS HOSTNAME ACCESS_KEY SECRET_KEY
mc alias set myminio http://127.0.0.1:9000 admin password
mc admin info myminio
mc alias list
# jav bucket
mc ls --recursive --versions myminio/jav
mc find myminio/jav --name "*.mp4"
# updates all MinIO servers in the deployment
mc admin update myminio

Nginx proxy with MinIO Server

Set up Nginx proxy with MinIO Server

Upload Files Using Pre-signed URLs

MinIO SDK - Java Client

1
2
3
dependencies {
    implementation("io.minio:minio:8.4.0")
}

Examples

实践

  • 每个平台(或应用)层级的创建两个桶,一个public桶,一个private桶。
    • 公有桶里的文件通过:ip:port/文件名称  可以直接访问到
    • 私有通的文件只能通过:presignedGetObject获取临时的访问地址,或者使用有权限的user进行下载访问
  • 过大的文件,整体传递到服务端会消耗大量内存,但是可以通过presignedPutObject方法生成一个临时上传地址,客户端可使用这个地址直接访问minio服务进行上传,不经过服务端上传。

单个对象的最大大小限制在5TB。putObject在对象大于5MiB时,自动使用multiple parts方式上传。这样,当上传失败时,客户端只需要上传未成功的部分即可(类似断点上传)。

1
2
3
4
5
// 需要继承MinioClient,把这几个方法变成公开的。
createMultipartUpload //创建分片上传,返回uploadId
getPresignedObjectUrl //创建文件预上传地址
listParts //获取uploadId下的所有分片文件
completeMultipartUpload //合并分片文件

附录