Minio基础

博客介绍了对象存储的引入原因、概念,它综合了NAS和SAN优点,适合存储海量数据。还阐述了Minio原理,包括节点存储概念、数据可靠性保证、存放形式和对象元数据。此外,介绍了临时凭证STS及Minio官方网站相关信息,使用Java客户端获取STS有特定要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本介绍

1.1 对象存储

1.1.1 为什么引入对象存储

由于块存储和文件存储的存储特点,并不适合公有云存储,一般只适合在局域网内部使用。另外随着互联网需求的发展,数据量爆炸式的增长,不断吞食着存储资源;数据类型也逐渐多元化,各类非结构化的数据占比显著增加。为了应对新的存储需求,对象存储应运而生。

image-20230601114812739

块存储

块存储像是一块块硬盘直接挂载在主机上,以卷或硬盘形式体现,对于存储的数据内容和格式一无所知,只关心读取和写入,不关心关系和用途,数据按字节来访问,性能很高。但是太偏向于底层,不利于扩展,常见的有DAS(直连式存储)、SAN(存储区域网络)。

  • DAS是指将存储设备通过SCSI接口直接连接到一台服务器上使用,存储介质直接挂载到内部总线上,数据存储是整个服务器结构的一部分。
  • SAN是通过高速网络将一个或多个存储设备和服务器连接起来的专用存储系统,可以把SAN理解成一个网络,里面包含着磁盘阵列、交换机等各种元素。

文件存储

文件存储一般以文件和目录形式体现,有多级访问路径和基于文件系统的目录结构,数据以文件的形式进行存取,也可以进行一些高级管理功能,比如文件层面的访问权限控制等。文件存储可以很方便的进行共享,用途也非常广泛,但是其读写速度相对较慢。常见的有NAS(网络附加存储服务器)。

  • NAS设备本质就是将本地主机的文件系统迁移至IP网络设备上,多个用户节点可以公用同一个NAS上的同一个文件系统。

1.1.2 什么是对象存储

对象存储是一种基于对象的存储设备,综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势。适合存储海量图片、视频、日志文件、备份数据、容器镜像等。

2006年美国亚马逊发布了AWS S3(Simple Storage Service)服务,正式将对象存储作为一种云存储服务,引入云计算领域,正式开启了对象存储的黄金年代,S3现在作为一种主流的对象存储协议标准,很多服务实现厂家对其都有很好的兼容。对象存储底层存储硬件介质,仍旧是硬盘,这一点和块存储、文件存储没有区别,但是底层硬件之上的系统和两者完全不同。

image-20230601120027350

对象存储非常简单,只有两个核心概念:桶(bucket)和对象(object),存储数据组织形式按照“租户-桶-对象”的方式进行组织:

  • 用户可以创建用于访问不同存储桶权限的租户。
  • 租户可以隔离存储资源,创建不同的存储桶和对象。
  • 存储桶是承装对象的容器集合,一个存储桶可以有很多对象,这些对象都是平级的(扁平化)。
  • 对象是数据存储的实体单位,类似于hash表项,key为对象名称,value为对象内容,以一种KV方式存储。

对象存储通常是通过REST API接口(HTTP动作)去处理资源信息,接口命令也十分简洁,存储协议是S3、swift等,以S3为例,主要接口命令有PUT/GET/DELETE等;扁平化的数据组织结构,也带来了极高的可扩展性。

1.2 Minio原理

MINIO整个集群是由多个角色完全相同的节点组成,没有特殊节点,任何一个节点宕机,都不会影响整个集群,对象被分片打散之后存放在不同节点的多块硬盘上,对外提供统一的命名空间,通过Web负载均衡或DNS轮询(Round Robin)的方式在各个节点上实现负载均衡。每个节点都能兼容S3接口。

1.2.1 节点存储概念

Drive: 存储数据的磁盘称之为Drive。

Set: 一组Drive的集合构成一个Set,每个Set的Drive尽可能分布在不同节点上,一个对象存储在一个Set上;

Bucket: 文件对象存储的逻辑位置。对于客户端而言,相当于存放文件的顶层文件夹;

MINIO不是以多副本的形式存储,而是通过数据编码,将原来的数据编码成多份,然后通过Set的形式落地存储在对应的Drive上。

一个集群包含多个Set,具体存储到哪个set是通过对象名称进行哈希,映射到唯一一个Set上,这种方式可以使得数据均匀分布在所有的Drive上。

一个集群具体包含多少个Set,minio默认会根据集群规模自动计算得出,也可以自行指定配置。本着鸡蛋放在多个篮子,保证数据可靠性的原则,一个Set的Drive尽可能分布在不同的节点上。

1.2.2 数据可靠性保证

MINIO通过使用纠删码Erasure code和校验和Checksum来保证数据的可靠性,即使丢掉一半数量(N/2)的硬盘,仍可恢复数据。

首先把对象分成若干等长的片段,之后通过纠删码算法分成若干数据分片和校验分片,每个分片都存储在一个Drive上。

纠删码(ERASURE-CODED),将存储机器空闲的CPU利用起来,通过纠删码特定算法的计算处理,保证数据的可靠性。

将一个对象编码成若干数据块和校验块,为了方便,将数据块和校验块统称为编码块,纠删码就是可以根据编码块的一部分还原出整个对象的机制,当然前提需要保证故障磁盘的数量小于等于校验盘的数量。

一般情况下,一个Set中会有一半的Drive作为数据块,一半的Drive作为校验块,这种方式可靠性最强,且冗余度最高,所有的编码块大小加起来是源文件大小的2倍。但是和多副本存储的方式相比,冗余度大大降低了(只冗余多存了一份数据),且可靠性最高,一般情况下可容忍一半磁盘的丢失和损坏。

位衰减(BitRot)

存储介质可能存在的另一个问题就是位衰减问题(bit rot),它是指在遇到磨损、灰尘、辐射、高热等因素下,存储介质中的数据性能和完整性缓慢恶化的问题,这些细微的损坏,可能常常不会被OS和硬件所觉察,但是会导致很严重的后果,比如向存储介质写入一段比特流,一段时间再读出来,二者不一致的现象。

为了应对bit rot问题,MINIO将之前的编码块通过HighwayHash算法计算校验和,以保证正确性,同时提供了一个管理工具,对有问题的编码块进行修复。

1.2.3 数据存放形式

假设MINIO集群内纠删组包含4块硬盘,我们要存储的对象名为MyObject,其隶属的存储桶名为MyBucket,哈希计算得到的磁盘为Disk1-4,那么在这4个磁盘上都会生成MyBucket/MyObject的子路径,MyObject路径目录下包含两个文件,分别是存储元数据信息的xl.json和对应的分片part.1。

image-20230601121053876

1.2.4 对象的元数据

对象存储使用对象元数据来管理数据的存储、分片以及数据本身的信息。而且元数据单独存储,我们可以为一个对象扩展任意多的元数据。

对象存储是扁平化存储(所有对象平铺在桶中),通过将key设置成带层级的方式来使对象像文件系统那样看起来有目录层级结构。如:test/image/1.jpg

1.3 临时凭证STS

MinIO安全令牌服务(STS)是一种终结点服务,使客户端可以请求MinIO资源的临时凭据。临时凭据的工作原理几乎与默认管理员凭据相同,但有一些区别:

  • 临时证书是短期的。可以将它们配置为持续几分钟到几小时的时间。凭证过期后,MinIO将不再识别它们或允许使用它们发出的API请求进行任何类型的访问。
  • 临时凭证不需要与应用程序一起存储,而是动态生成的,并在请求时提供给应用程序。当临时凭证到期时,应用程序可以请求新凭证。
  • 无需在应用程序中嵌入长期凭证。

在使用Java客户端获取STS时,需要在创建一个新的user用来生成STS,不能使用初始化的超级管理员账号。不然会抛出异常。

java.security.ProviderException: STS service failed with HTTP status code 403

1.4 Minio官方网站

04-11
### MinIO 使用指南与安装配置 #### 什么是 MinIOMinIO 是一种高性能的对象存储服务,专为云原生应用设计。它兼容 Amazon S3 API,支持分布式部署,并提供了高可用性、高性能以及高扩展性的特性[^1]。 #### MinIO 的特点 - **S3 兼容**:完全兼容 AWS S3 API,便于迁移现有应用程序。 - **轻量级**:资源占用低,易于部署和维护。 - **分布式架构**:支持多节点部署,满足大规模数据存储需求。 - **安全性**:内置加密功能,保障数据安全传输和存储。 --- #### 安装 MinIO ##### Docker 部署 MinIO 可以通过 Docker 快速部署 MinIO 实例。以下是基本命令: ```bash docker run \ --name minio \ -p 9000:9000 \ -p 9001:9001 \ -e "MINIO_ROOT_USER=minioadmin" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ -v /data:/data \ -v /config:/root/.minio \ minio/minio server /data --console-address ":9001" ``` 上述命令会启动一个 MinIO 服务实例,监听端口 `9000` 和 `9001`,分别用于对象存储和服务管理面板[^2]。 --- ##### Linux 上手动安装 MinIO ###### 下载并运行 MinIO 服务器 1. 下载 MinIO 可执行文件: ```bash wget https://dl.min.io/server/minio/release/linux-amd64/minio ``` 2. 授予执行权限: ```bash chmod +x minio ``` 3. 启动 MinIO 服务: ```bash ./minio server /mnt/data ``` 此命令会在 `/mnt/data` 路径下初始化一个新的 MinIO 数据目录[^3]。 --- #### 配置 MinIO 客户端 (mc) MinIO 提供了一个名为 `mc` 的客户端工具,方便用户进行远程管理和操作。 1. 下载 MinIO 客户端: ```bash wget https://dl.min.io/client/mc/release/linux-amd64/mc ``` 2. 授予执行权限: ```bash chmod +x mc ``` 3. 配置 MinIO 客户端连接到本地 MinIO 服务: ```bash ./mc alias set myminio http://localhost:9000 minioadmin minioadmin ``` 完成以上步骤后,可以使用 `mc` 命令轻松管理存储桶和其他资源[^3]。 --- #### 使用 MinIO 文件操作 ##### 上传文件 通过 MinIO 客户端上传文件到指定存储桶: ```bash ./mc cp localfile.txt myminio/mybucket/ ``` ##### 删除文件 删除存储桶中的某个文件: ```bash ./mc rm myminio/mybucket/localfile.txt ``` ##### 下载文件 从存储桶下载文件到本地: ```bash ./mc cp myminio/mybucket/localfile.txt . ``` 这些基础操作可以帮助用户高效地管理存储的数据[^1]。 --- #### 设置 MinIO 为系统服务 为了使 MinIO 在系统重启后自动启动,可以将其注册为 systemd 服务。 1. 创建服务文件: ```bash sudo nano /etc/systemd/system/minio.service ``` 2. 编辑服务文件内容如下: ```ini [Unit] Description=MinIO After=network.target [Service] User=minio Group=minio EnvironmentFile=/etc/default/minio ExecStartPre=-/bin/bash -c "mkdir -p ${MINIO_VOLUMES}" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES Restart=on-failure [Install] WantedBy=multi-user.target ``` 3. 启动并启用服务: ```bash systemctl start minio systemctl enable minio ``` 这样即可确保 MinIO 在后台稳定运行[^3]。 --- #### Nginx 配置 MinIO 访问 对于生产环境,建议通过 Nginx 来代理 MinIO 请求,从而增强性能和安全性。 单机配置示例: ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 集群配置则需引入负载均衡机制,具体参见相关文档[^5]。 --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值