什么是对象存储服务
对象存储(Object Storage)提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。
通过控制台、API、SDK 和工具等多样化方式简单、快速地接入,实现了海量数据存储和管理。通过 COS 可以进行任意格式文件的上传、下载和管理。提供了直观的 Web 管理界面,同时遍布全国范围的 CDN/EdgeOne 节点可以对文件下载进行加速。
对象存储服务能做什么?
- 做图床,比如写 Markdown 笔记时可以结合 PicGo 等工具 一键上传图片
- 做文件备份,比如用 rclone 7, Duplicacy 6, syncthing 3 等工具多端同步备份
- 个人网盘,比如可以接入 alist 可道云 等工具和其他网盘一起管理
解决了我那些痛点
- 我的博客图床问题,用的是腾讯云的cos对象存储服务,但是容易被攻击者刷流量
- 个人网盘文件存储问题,我用的腾讯云搭建的可道云网盘,服务器快到期了,但是文件都在腾讯云上存着60个g的文件迁移是个问题。非常麻烦
- obsidian写文章时,传到博客上,图片用的本地连接来回导图片问题
什么是MinIO
Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/VM映像。对象的大小可以从几KB到最大5TB。Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。
为什么选择minio
●部署简单:一个single二进制文件即是一切,还可以支持各种平台。
●minio支持海量存储,可按2one打展(原zone不受任何影响),支持单个对象最大5TB;
兼容Amazon S3接口,充分考虑开发人员的需求和体验;
●低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1 M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
●读写性能优异
MinIO的基础概念
● Object: 存储到Minio的基本对象,如文件、字节流,Anything..
● Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。
● Drive: 即存储数据的磁盘,在MinIO启动时,以参数的方式传入。Minio 中所有的对象数据都会存储在Drive里。
● Set:即一组Drive的集合,分布式部署根据集群规模自动划分一 个或多个Set, 每个Set中的Drive分布在不同位置。一个对象存储在一个Set 上。(For example: {1..44} is divided into 4 sets each of size 16.)
● 一个对象存储在一 个Set上
● 一个集群划分为多个Set
● 一个Set包含的Drive数显是固定的,默认由系统根据集群规模自动计算得出
● 一个SET中的Drive尽可能分布在不同的节点上
MinIO的搭建方式
MinIO 单机部署
- 安装 Docker 和 Docker Compose
- 创建一个 Docker Compose 文件,例如
docker-compose.yml
,并添加以下内容:
version: '3'
services:
minio:
image: minio/minio
ports:
- "9000:9000"
volumes:
- "./data:/data"
environment:
MINIO_ACCESS_KEY: "your_access_key"
MINIO_SECRET_KEY: "your_secret_key"
command: server /data
- 在命令行中进入 Docker Compose 文件所在的目录,并运行以下命令:
docker-compose up -d
Minio集群部署
1、数据保护
1.1 分布式 Minio 采用纠删码来防范多个节点宕机和位衰减。1.2 分布式 Minio 至少需要 4 个节点(4台服务器),使用分布式 Minio 就 自动引入了纠删码功能。1.3 纠删码是一种恢复丢失和损坏数据的数学算法, Minio 采用 Reed-Solomon code 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,你可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。1.4 纠删码的工作原理和 RAID 或者复制不同,像 RAID6 可以在损失两块盘的情况下不丢数据,而 Minio 纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且 Minio 纠删码是作用在对象级别,可以一次恢复一个对象,而RAID 是作用在卷级别,数据恢复时间很长。 Minio 对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio 纠删码的设计目标是为了性能和尽可能的使用硬件加速。1.5 位衰减又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接故障还危险。 所以 Minio 纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。
2、高可用
2.1 单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。例如,一个 8 节点的 Minio 集群,每个节点一块盘,就算 4 个节点宕机,这个集群仍然是可读的,不过你需要 5 个节点才能写数据。
3、限制
3.1 分布式 Minio 单租户存在最少 4 个盘最多 16 个盘的限制(受限于纠删码)。这种限制确保了 Minio 的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。注意,只要遵守分布式 Minio 的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用 2 个节点,每个节点 4 块盘,也可以使用 4 个节点,每个节点两块盘,诸如此类。
4、一致性
4.1 Minio 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。