【分布式知识】分布式对象存储组件-Minio

文章目录

什么是minio

MinIO是一个开源的对象存储服务器,它旨在提供高性能、高可扩展性的存储解决方案。以下是关于MinIO的一些详细介绍:

核心特点:

  1. 高性能:MinIO设计用于提供高速的数据访问速度,在标准硬件上也能达到非常高的吞吐量。
  2. 云原生:MinIO支持Kubernetes,并且适合在云环境中运行,特别是对于微服务架构的应用。
  3. 可扩展性:MinIO支持水平扩展,可以通过增加更多的节点来扩展存储容量和性能。
  4. API兼容性:MinIO与Amazon S3 API兼容,这使得现有的S3应用程序可以轻松迁移或与MinIO集成。
  5. 跨平台:MinIO可以在Linux、Windows和macOS等多个操作系统上运行。
  6. 安全性:MinIO支持加密、身份验证和授权等功能,确保数据的安全性。

使用场景:

  • 大数据存储:适合存储海量的数据,如日志文件、分析数据等。
  • 备份与归档:可以用来备份重要的数据,同时也支持长期的数据归档。
  • Web应用:可以作为Web应用的静态资源存储库,如图片、视频等。
  • 容器化应用:非常适合云原生应用的数据持久化需求。
  • IoT应用:可以存储从物联网设备收集的数据。

开发者工具:

  • MinIO支持多种编程语言的SDK,包括Java、Python、Go等,方便开发者快速集成MinIO到自己的应用中。
  • 它还提供了命令行界面(CLI),使得终端用户可以方便地管理和操作存储在MinIO中的对象。

社区和支持:

  • MinIO有一个活跃的开源社区,提供了丰富的文档和技术支持,帮助用户更好地理解和使用这个工具。
    由于MinIO的这些特点,它成为了许多组织和个人在构建需要高性能、可扩展存储解决方案的应用和服务时的选择。

核心概念

什么是对象存储?

对象是二进制数据,有时也称为二进制大对象 (BLOB)。Blob 可以是图像、音频文件、电子表格,甚至是二进制可执行代码。MinIO 等对象存储平台提供专用工具和功能来存储、检索和搜索 Blob 。

MinIO 对象存储使用存储桶来组织对象。存储桶类似于文件系统中的文件夹或目录,每个存储桶可以容纳任意数量的对象。MinIO 存储桶提供与 AWS S3 存储桶相同的功能。

例如,假设有一个托管网络博客的应用程序。该应用程序需要存储各种 blob,包括视频和图像等丰富的多媒体。

MinIO 通过功能支持多级嵌套目录,prefixing 以支持最动态的对象存储工作负载。

MinIO 如何确定对对象的访问权限?

MinIO 要求客户端对每个新操作执行身份验证和授权。 因此,身份和访问管理 (IAM)是 MinIO 配置的关键组件。

身份验证可验证连接客户端的身份。MinIO 要求客户端使用AWS 签名版本 4 协议进行身份验证,并支持已弃用的签名版本 2 协议。具体来说,客户端必须提供有效的访问密钥和密钥才能访问任何 S3 或 MinIO 管理 API,例如PUT、GET和DELETE操作。

然后,MinIO 检查经过身份验证的用户或客户端是否有权在部署上执行操作或使用资源。MinIO 使用基于策略的访问控制 (PBAC),其中每个策略描述一个或多个规则,这些规则概述了用户或用户组的权限。MinIO在创建策略时支持特定于 S3 的操作和条件。

默认情况下,MinIO拒绝访问用户分配或继承的策略中未明确引用的操作或资源。

MinIO 提供了访问管理功能作为软件的一部分。或者,您可以将 MinIO 配置为使用Active Directory/LDAP或OpenID/OIDC与多个外部 IAM 提供程序之一进行身份验证。

MinIO 如何保护数据安全?

MinIO 支持在驱动器上对对象进行编码(静态加密)以及在从一个位置转换到另一个位置时进行编码(传输中加密或"动态加密")的方法。启用后,MinIO 会利用服务器端加密以加密状态写入对象。要检索和读取加密对象,用户必须具有适当的访问权限并提供对象的解密密钥。

MinIO 支持传输层安全性(TLS) 版本 1.2 和 1.3 加密对象。TLS 取代了以前使用的安全套接字层 (SSL) 方法,该方法现已弃用。由互联网工程任务组 (IETF) 维护的 TLS 标准提供了互联网通信用于支持加密、身份验证和数据完整性的标准。

验证用户和验证对象访问权限的过程称为TLS 握手。验证完成后,TLS 提供密码来加密和解密从服务器到请求客户端的信息传输。

MinIO 支持多种服务器端加密方法。

我可以在存储桶内按文件夹结构组织对象吗?

MinIO 为每个对象使用前缀方法,模仿传统文件系统的文件夹结构。前缀涉及在对象名称前面添加固定字符串。

使用前缀,您无需手动创建文件夹和子文件夹。相反,MinIO 会查找/对象名称前缀中的字符。每个字符都/表示一个新文件夹或子文件夹。

MinIO 使用对象的名称和前缀自动生成一系列用于存储对象的文件夹和子文件夹。当你在多个对象上使用相同的前缀字符串时,MinIO 会将它们识别为相似或分组的对象。

例如,名为 的对象/articles/john.doe/2022-01-02-MinIO-Object-Storage.md最终会存放在articles存储桶中标有 的文件夹中john.doe。

MinIO 对象存储可能类似于以下结构,具有三个存储桶。MinIO 会articles根据这些对象的前缀自动在存储桶中生成两个文件夹。

bash 复制代码
/ #root
/images/
   2022-01-02-MinIO-Diagram.png
   2022-01-03-MinIO-Advanced-Deployment.png
   MinIO-Logo.png
/videos/
   2022-01-04-MinIO-Interview.mp4
/articles/
   /john.doe/
      2022-01-02-MinIO-Object-Storage.md
      2022-01-02-MinIO-Object-Storage-comments.json
   /jane.doe/
      2022-01-03-MinIO-Advanced-Deployment.png
      2022-01-02-MinIO-Advanced-Deployment-comments.json
      2022-01-04-MinIO-Interview.md

MinIO 本身不限制任何特定前缀可以包含的对象数量。但是,硬件和网络条件可能会因前缀较大而对性能产生影响。

使用中等或预算有限的硬件进行部署时,应将其工作负载设计为以每个前缀 10,000 个对象为基准。根据基准测试和对实际工作负载的监控将此目标提高到硬件可以有效处理的水平。

使用高性能或企业级硬件的部署通常可以处理具有数百万个或更多对象的前缀。

MinIO SUBNET企业账户可以利用年度架构审查作为部署和维护策略的一部分,以确保依赖 MinIO 的项目的长期性能和成功。

有关限制前缀内容的好处的更深入讨论,请参阅有关优化 S3 性能的文章。

如何备份和恢复 MinIO 上的对象?

MinIO 提供两种类型的复制,用于将对象、其版本及其元数据从一个位置复制到另一个位置。您可以在存储桶级别或站点级别配置复制。

存储桶级别复制既可以作为单向、主动-被动复制(例如用于存档目的),也可以作为双向、主动-主动复制,以使两个存储桶彼此保持同步。

站点级复制功能作为双向、主动-主动复制,以使多个数据位置(例如不同的地理数据中心)彼此同步。

除了复制之外,MinIO 还提供镜像服务。 仅将实际对象复制到任何其他 S3 兼容数据存储,包括其他 MinIO 存储。但是,版本和元数据不会使用该命令备份。mc mirrormc mirror

独家访问驱动器

MinIO需要 对用于对象存储的驱动器或卷具有独占访问权限。任何其他流程、软件、脚本或人员都不得直接对提供给 MinIO 的驱动器或卷或 MinIO 放置在其上的对象或文件执行任何操作。

除非得到 MinIO 工程部门的指示,否则请勿使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能会导致大面积损坏和数据丢失,超出 MinIO 的修复能力。

MinIO 提供哪些工具来根据访问速度和频率管理对象?

分层规则允许将经常访问的对象存储在热存储或温存储中,这通常更昂贵但提供更好的性能。

访问频率较低的对象可以移至冷存储。冷存储通常会以较低的性能换取较低的价格。

MinIO 如何保护对象免遭意外覆盖或删除?

锁定

锁定是一种一次写入多次读取 (WORM) 机制,可防止删除或修改对象。锁定后,MinIO 会无限期地保留对象,直到有人移除锁定或锁定过期。

MinIO 提供:

  • 法律保留锁,供所有用户无限期保留

  • 对所有用户实施基于时间的限制

  • 为非特权用户制定基于时间的锁规则

版本控制

默认情况下,使用相同名称(包括前缀)写入的对象会覆盖现有的同名对象。MinIO 提供了一个配置选项来创建启用了版本控制的存储桶。 版本控制可让您访问随时间变化的唯一命名对象的各个迭代。启用后,MinIO 会将变异对象写入与原始对象不同的版本,从而允许访问原始对象和更新的已更改对象。

MinIO 存储桶上的附加配置决定了存储桶中每个对象的旧版本保留多长时间。

架构解析

MinIO的架构设计是为了实现高性能、可扩展性以及简单易用性。以下是对MinIO架构的一些关键特性的解析:

分布式架构

  • 无中心化设计:MinIO采用了一种去中心化的架构,其中对象数据被分散存储在集群的不同节点上。这种设计避免了单点故障,并提高了系统的可靠性。
  • 负载均衡:MinIO可以使用Web负载均衡器或DNS轮询(DNS round-robin)来平衡请求负载,从而提高系统的整体性能。

存储机制

  • Bucket和Object:在MinIO中,数据被组织成Buckets(桶),每个Bucket类似于传统文件系统中的目录。Bucket中的数据则被进一步划分为Objects(对象),每个对象都有一个唯一的键来标识。
  • 本地文件系统:每个Bucket在本地文件系统中表示为一个目录,而对象则是该目录下的文件。这种设计简化了数据的管理和存储。

高可用性和扩展性

  • 水平扩展:MinIO支持水平扩展,即通过增加更多的节点来增加存储容量和性能。这种扩展性使得MinIO能够处理大量数据和高并发请求。
  • 多租户支持:MinIO支持多租户架构,允许多个用户或服务共享相同的存储基础设施,同时保持数据隔离。

兼容性

  • S3兼容API:MinIO完全兼容Amazon S3 API,这使得现有的S3应用程序可以直接与MinIO交互,无需修改代码。

安全性

  • 认证和授权:MinIO支持多种认证机制,如IAM(Identity and Access Management)用户认证,以及通过证书或其他方式对数据进行加密传输。
  • 数据加密:支持在传输过程中和静止状态下的数据加密,以保证数据的安全性。

管理和监控

  • 命令行工具(CLI):提供了强大的命令行工具,使得用户可以方便地管理存储在MinIO中的对象。
  • API和SDKs:除了S3兼容的API之外,MinIO还提供了多种编程语言的SDK,以便开发者能够更容易地集成MinIO到他们的应用中。
  • 可视化界面:虽然MinIO本身主要是一个命令行和API驱动的服务,但它也支持通过第三方工具或插件提供图形化的管理界面。

minio扩容

MinIO的设计允许通过水平扩展来增加存储容量和提升性能。扩容通常意味着添加更多的节点到现有的MinIO集群中。以下是进行MinIO扩容的一般步骤:

扩容前的准备

  1. 评估需求:确定需要增加多少存储容量或者提高多少性能。
  2. 规划布局:根据需求确定需要添加的新节点数量以及它们将如何分配存储空间。
  3. 备份数据:在进行任何可能影响数据的操作之前,最好先备份数据。

添加新节点

  1. 安装MinIO:在新的服务器上安装MinIO。确保新服务器上的MinIO版本与现有集群版本相匹配。
  2. 配置新节点:设置新节点上的MinIO服务,包括配置端点、访问密钥和秘密密钥等信息。

扩展存储

  1. 调整存储路径:将新节点上的存储路径加入到MinIO集群中。如果是单机模式,只需确保有足够的磁盘空间;如果是分布式模式,则需要将新的磁盘或服务器加入集群。
  2. 更新集群配置:如果使用的是MinIO的分布式模式,那么需要更新集群配置来反映新的节点信息。

数据迁移

  1. 手动迁移数据:如果是在同一个数据中心内,可以通过直接复制文件的方式将数据迁移到新的存储位置。
  2. 使用工具迁移数据 :可以使用mc命令行工具或者通过API调用来迁移数据。

测试和验证

  1. 测试新配置:确保所有节点都能正常工作,并且数据可以正确读写。
  2. 监控性能:检查扩容后的集群是否达到了预期的性能指标,如IOPS、吞吐量等。

示例命令

假设你要在一个已经存在的MinIO集群中添加一个新的节点,可以通过如下步骤:

在新节点上安装并启动MinIO服务:
sh 复制代码
minio server /path/to/new/data/folder --address :9000 --config-dir /etc/minio

这里--address :9000指定了监听端口,--config-dir /etc/minio指定了配置目录。

更新集群配置(如果有需要):

如果使用的是分布式模式,可能需要编辑集群配置文件,将新节点的信息添加进去。

使用mc工具测试数据迁移:
sh 复制代码
mc cp -r /path/to/local/folder miniocloud/bucket/newpath

这里miniocloud是一个预设的别名,指向你的MinIO集群。

注意事项

  • 一致性检查:扩容后,建议进行一致性检查,确保所有副本都同步并且数据完整。
  • 监控工具:使用监控工具来持续监控集群的健康状况和性能。
  • 安全性:确保新加入的节点遵循相同的安全策略,如身份验证、数据加密等。

扩容MinIO集群是一项技术要求较高的操作,尤其是在生产环境中。务必谨慎行事,并确保有详细的计划和应急措施。如果不确定如何操作,可以参考MinIO官方文档或寻求专业的技术支持。

命令行

MinIO提供了命令行界面(CLI),使得用户可以方便地执行各种对象存储相关的任务,如创建和删除存储桶(buckets)、上传和下载对象等。下面是MinIO CLI的一些常用命令及其简要说明。

基本配置

首先,你需要配置MinIO客户端以连接到你的MinIO服务器。你可以设置环境变量或者直接在命令行中指定端点、访问密钥和秘密密钥。

设置环境变量:
sh 复制代码
export MINIO_ACCESS_KEY=your_access_key
export MINIO_SECRET_KEY=your_secret_key
export MINIO_ENDPOINT=minio_server_endpoint:port

基本命令

连接到MinIO服务器:
sh 复制代码
mc alias set myminio http://minio_server_endpoint:port your_access_key your_secret_key
列出所有存储桶:
sh 复制代码
mc ls myminio
创建新的存储桶:
sh 复制代码
mc mb myminio/mybucket
删除存储桶:
sh 复制代码
mc rb myminio/mybucket
切换当前工作目录到指定存储桶:
sh 复制代码
mc cd myminio/mybucket

文件操作

上传文件到存储桶:
sh 复制代码
mc cp /path/to/local/file myminio/mybucket/remote/path
下载文件到本地:
sh 复制代码
mc cp myminio/mybucket/remote/path /path/to/local/directory
复制存储桶内的文件:
sh 复制代码
mc cp myminio/mybucket/oldpath myminio/mybucket/newpath
删除存储桶内的文件:
sh 复制代码
mc rm myminio/mybucket/path/to/object

目录操作

上传整个目录到存储桶:
sh 复制代码
mc cp -r /path/to/local/directory myminio/mybucket/remote/path
下载整个目录到本地:
sh 复制代码
mc cp -r myminio/mybucket/remote/path /path/to/local/directory
删除存储桶内的目录:
sh 复制代码
mc rm -r myminio/mybucket/path/to/directory

更多命令

列出存储桶中的所有对象:
sh 复制代码
mc ls myminio/mybucket
查看特定对象的信息:
sh 复制代码
mc stat myminio/mybucket/path/to/object
设置对象的元数据:
sh 复制代码
mc setmeta myminio/mybucket/path/to/object --header "X-Amz-Meta-Custom-Header: custom value"
获取对象的元数据:
sh 复制代码
mc getmeta myminio/mybucket/path/to/object
生成共享链接:
sh 复制代码
mc presign myminio/mybucket/path/to/object
启动MinIO服务器(如果安装了MinIO服务端):
sh 复制代码
minio server /path/to/data/folder --address :9000

以上是一些基本的MinIO CLI命令示例。通过这些命令,你可以执行大部分日常的对象存储操作。如果你需要更详细的功能介绍或者有特定的需求,建议查阅官方文档获取最新的命令列表和参数选项。

相关文献

Mino对象存储系统官网

相关推荐
Yz987610 分钟前
hive复杂数据类型Array & Map & Struct & 炸裂函数explode
大数据·数据库·数据仓库·hive·hadoop·数据库开发·big data
那一抹阳光多灿烂1 小时前
Spark中的Stage概念
大数据·spark
北京鹏生科技有限公司2 小时前
EcoVadis审核是什么?EcoVadis审核流程包括什么?
大数据·百度
Moshow郑锴3 小时前
数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别
大数据·数据库·数据仓库·数据湖·湖仓一体
IT枫斗者3 小时前
如何解决Java EasyExcel 导出报内存溢出
java·服务器·开发语言·网络·分布式·物联网
求积分不加C3 小时前
Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例
java·分布式·kafka·linq
GDDGHS_4 小时前
“Kafka面试攻略:核心问题与高效回答”
分布式·面试·kafka
꧁薄暮꧂5 小时前
kafka中的数据清理策略
数据库·分布式·kafka
二进制_博客5 小时前
Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)
大数据
hong1616886 小时前
大数据技术Kafka详解:消息队列(Messages Queue)
大数据·分布式·kafka