💻 minio - object storage
minio
入门
minio是分布式对象存储系统,兼容S3协议,可以作为对象存储服务使用。
- 对象存储 vs 文件存储 vs 块存储
对象存储:
- 以对象为单位进行存储,每个对象包含数据、元数据和全局唯一标识符
- 扁平的命名空间,没有传统的目录层级结构
- 高度可扩展,适合存储海量非结构化数据
- 通过 HTTP/HTTPS 协议访问,适合云端存储
- 应用场景:图片、视频、备份文件等大文件存储 \
- 常见的有:
- 云服务商提供的服务(S3、OSS、COS等)
- 开源解决方案(MinIO、Ceph)
文件存储:
- 采用传统的目录树结构组织数据
- 支持文件级别的存取和共享
- 使用 POSIX 接口,方便用户直接操作
- 适合需要频繁读写的场景
- 应用场景:共享文件系统、文档管理系统
- 常见的有:
- 传统协议(NFS、SMB/CIFS)
- 分布式文件系统(GlusterFS、HDFS)
- 云服务(EFS、NAS)
块存储:
- 将存储空间划分为固定大小的块
- 直接对硬件设备进行操作,性能最好
- 需要文件系统来组织数据
- 适合需要高性能、低延迟的场景
- 应用场景:数据库、虚拟机磁盘等
- 常见的有:
- 传统解决方案(SAN、iSCSI)
- 云服务(EBS)
- 开源方案(Ceph RBD、LVM)
- 对象存储中的核心概念
对象(Object)
- 存储的基本单位
- 包含:数据本身、元数据(metadata)、对象键(key)
- 元数据包含:文件类型、创建时间、大小、自定义属性等
存储桶(Bucket)
- 存储对象的逻辑容器
- 具有全局唯一的名称
- 可以设置访问权限、生命周期规则等策略
访问密钥(Access Key)
- Access Key ID:用于身份识别
- Secret Access Key:用于签名认证
- 类似于用户名和密码的概念
策略(Policy)
- 访问控制策略:控制用户对资源的访问权限
- 生命周期策略:自动管理对象的存储周期
- 版本控制:管理对象的多个版本
端点(Endpoint)
- 访问存储服务的 URL 地址
- 可以是公网或内网地址
- 用于 API 调用和访问对象
安装
- 使用docker安装
$ docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"
部署好之后,可以直接在浏览器中访问:http://127.0.0.1:9001
中可视化访问。(默认用户名:minioadmin
,密码:minioadmin
)
CLI - mc
mc是minio的命令行工具,可以用来管理minio的存储桶和对象。
在本机Mac上安装mc
$ brew install minio/stable/mc
常用命令
- alias: 设置别名
➜ ~ mc alias set myminio http://localhost:9000 minioadmin minioadmin
mc: Configuration written to `/Users/wangxg/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/Users/wangxg/.mc/share`.
mc: Initialized share uploads `/Users/wangxg/.mc/share/uploads.json` file.
mc: Initialized share downloads `/Users/wangxg/.mc/share/downloads.json` file.
Added `myminio` successfully.
- mb: 创建存储桶
- ls: 列出存储桶
- rb: 删除存储桶
➜ ~ mc mb myminio/bucket-mc
Bucket created successfully `myminio/bucket-mc`.
➜ ~ mc ls myminio
[2025-02-14 18:45:24 CST] 0B bucket-1/
[2025-02-14 19:16:02 CST] 0B bucket-mc/
➜ ~ mc rb myminio/bucket-mc
Removed `myminio/bucket-mc` successfully.
➜ ~ mc ls myminio
[2025-02-14 18:45:24 CST] 0B bucket-1/
- stat: 查看存储桶信息
➜ ~ mc stat myminio/bucket-1
Name : bucket-1
Date : 2025-02-14 19:19:17 CST
Size : N/A
Type : folder
Properties:
Versioning: Un-versioned
Location: us-east-1
Anonymous: Disabled
ILM: Disabled
Usage:
Total size: 175 KiB
Objects count: 1
Versions count: 0
Object sizes histogram:
1 object(s) BETWEEN_1024B_AND_1_MB
0 object(s) BETWEEN_1024_B_AND_64_KB
0 object(s) BETWEEN_10_MB_AND_64_MB
0 object(s) BETWEEN_128_MB_AND_512_MB
0 object(s) BETWEEN_1_MB_AND_10_MB
0 object(s) BETWEEN_256_KB_AND_512_KB
0 object(s) BETWEEN_512_KB_AND_1_MB
1 object(s) BETWEEN_64_KB_AND_256_KB
0 object(s) BETWEEN_64_MB_AND_128_MB
0 object(s) GREATER_THAN_512_MB
0 object(s) LESS_THAN_1024_B
- cp: 上传对象、下载对象
- ls: 列出存储桶内对象
# 上传:
➜ ~ mc cp ./Downloads/good.jpg myminio/bucket-1
...s/good.jpg: 1.55 MiB / 1.55 MiB ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 60.13 MiB/s 0s
# 列出:
➜ ~ mc ls myminio/bucket-1
[2025-02-14 19:02:06 CST] 175KiB STANDARD 2.png
[2025-02-14 19:21:10 CST] 1.6MiB STANDARD good.jpg
# 删除对象:
➜ ~ mc rm myminio/bucket-1/2.png
Removed `myminio/bucket-1/2.png`.
➜ ~ mc ls myminio/bucket-1
[2025-02-14 19:21:10 CST] 1.6MiB STANDARD good.jpg
# 下载:
➜ ~ mc cp myminio/bucket-1/good.jpg ./
...1/good.jpg: 1.55 MiB / 1.55 MiB ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 152.92 MiB/s 0s
SDK
- python
$ pip install minio
from minio import Minio
client = Minio(
"127.0.0.1:9000", # 直接使用主机名:端口号格式
access_key="minioadmin",
secret_key="minioadmin",
secure=False # 使用 HTTP 而不是 HTTPS
)
# 查看存储桶
buckets = client.list_buckets()
for bucket in buckets:
print(bucket.name)
# run:
➜ ~ python3 miniodemo.py
bucket-1