分布式文件存储服务器之Minio对象存储技术参考指南

Minio对象存储技术

minio

MinIO 是一种高性能对象存储解决方案,原生支持 Kubernetes 部署。MinIO 提供与 Amazon Web Services S3 兼容的 API 并支持所有核心 S3 功能。MinIO 是在GNU Affero 通用公共许可证 v3.0下发布的。

也许提起对象存储技术,我们都经历过Fastdfs长时间的拉锯战,即使现在大部分都在使用云服务厂商提供的OSS对象存储服务,但是其所花费的经济成本也是递增的,而且数据都存储在别人的服务器上,从一定程度上来说,对于文件资源的把控粒度是极其不可控制,公网数据是何其的没有隐私可言。虽然,对于开发层面上来说,只需要整合对应的SDK,对其使用已经是开箱即用。但是,对于选择自研对象存储技术来说,Minio何尝不失为一大利器。
其搭建过程与整合方面,几乎已经没有什么瓶颈可言。不论是从传统服务器的安装,还是基于Docker以及Kubernetes的部署,简直简单得不要不要的。

基本概述

MinIO supports the widest range of use cases across the largest number of environments. Cloud native since inception, MinIO’s software-defined suite runs seamlessly in the public cloud, private cloud and at the edge - making it a leader in the hybrid cloud. With industry leading performance and scalability, MinIO can deliver a range of use cases from AI/ML,analytics, backup/restore and modern web and mobile apps.

MinIO 在最大数量的环境中支持最广泛的用例。自云原生以来,MinIO 的软件定义套件在公共云、私有云和边缘无缝运行——使其成为混合云的领导者。凭借行业领先的性能和可扩展性,MinIO 可以提供一系列用例,包括 AI/ML、分析、备份/恢复以及现代 Web 和移动应用程序。

  • Hybrid Cloud:混合云
  • Born cloud native :云原生
  • MinIO is pioneering high performance object storage:高性能对象存储的先驱
  • Built on the principles of web scale:建立在网络规模的原则上
  • The #1 open source object store. And the most enterprise ready.开源对象存储,并且最适合企业
  • The defacto standard for Amazon S3 compatibility:Amazon S3 兼容性的事实标准
  • Simply powerful:简单强大[极简主义]

基本特点

MinIO 的企业级特性代表了对象存储空间的标准。从 AWS S3 API 到 S3 Select 以及我们对内联擦除编码和安全性的实施,我们的代码广受赞誉,并经常被一些技术和商业领域的大腕复制。

  • Erasure Coding:纠错码

MinIO 使用以汇编代码编写的每个对象内联擦除编码来保护数据,以提供尽可能高的性能。MinIO 使用 Reed-Solomon 代码将对象条带化为具有用户可配置冗余级别的数据和奇偶校验块。MinIO 的 Erasure Coding 在对象级别执行修复,可以独立修复多个对象。

在 N/2 的最大奇偶校验下,MinIO 的实现可以确保在部署中仅使用 ((N/2)+1) 个操作驱动器进行不间断的读写操作。例如,在 12 个驱动器的设置中,MinIO 将对象分片到 6 个数据和 6 个奇偶校验驱动器,并且可以可靠地写入新对象或重建现有对象,而部署中仅剩下 7 个驱动器。

  • Bitrot Protection:Bitrot 保护

静默数据损坏或 bitrot 是磁盘驱动器面临的严重问题,导致数据在用户不知情的情况下损坏。原因是多方面的(驱动器老化、电流峰值、磁盘固件中的错误、幻像写入、读取/写入方向错误、驱动程序错误、意外覆盖),但结果是一样的 - 数据受损。

MinIO 对HighwayHash算法的优化实现确保它永远不会读取损坏的数据 - 它即时捕获和修复损坏的对象。通过在 READ 上计算散列并在从应用程序、网络到内存/驱动器的 WRITE 上对其进行验证来确保端到端的完整性。该实现专为速度而设计,可以在 Intel CPU 的单核上实现超过 10 GB/秒的散列速度。

  • Encryption:加密处理

在飞行中加密数据是一回事;保护静态数据是另一回事。MinIO 支持多种复杂的服务器端加密方案来保护数据——无论数据在哪里。MinIO 的方法以可忽略的性能开销确保机密性、完整性和真实性。使用 AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC 支持服务器端和客户端加密。

加密对象使用 AEAD 服务器端加密进行防篡改。此外,MinIO 与所有常用的密钥管理解决方案(例如 HashiCorp Vault)兼容并经过测试。MinIO 使用密钥管理系统 (KMS) 来支持 SSE-S3。

如果客户端请求 SSE-S3 或启用自动加密,则 MinIO 服务器使用唯一的对象密钥加密每个对象,该对象密钥受 KMS 管理的主密钥保护。鉴于极低的开销,可以为每个应用程序和实例打开自动加密。

  • Identity Management:身份管理

MinIO 支持身份管理中最先进的标准,与 OpenID 连接兼容提供商以及关键的外部 IDP 供应商集成。这意味着访问是集中的,密码是临时的和轮换的,而不是存储在配置文件和数据库中。此外,访问策略是细粒度和高度可配置的,这意味着支持多租户和多实例部署变得简单。

  • Continuous Replication:连续复制

传统复制方法的挑战在于,它们无法有效扩展超过数百 TB。话虽如此,每个人都需要一个复制策略来支持灾难恢复,并且该策略需要跨越地域、数据中心和云。

MinIO 的持续复制专为大规模、跨数据中心部署而设计。通过利用 Lambda 计算通知和对象元数据,它可以高效快速地计算增量。Lambda 通知确保更改立即传播,而不是传统的批处理模式。

连续复制意味着如果发生故障,即使面对高度动态的数据集,数据丢失也将保持在最低限度。最后,与 MinIO 所做的一样,持续复制是多供应商的,这意味着您的备份位置可以是从 NAS 到公共云的任何位置。

  • Global Federation:全球联合会

现代企业到处都有数据。MinIO 允许将这些不同的实例组合起来形成一个统一的全局命名空间。具体来说,可以将任意数量的 MinIO 服务器组合成一个分布式模式集,多个分布式模式集可以组合成一个 MinIO 服务器联合。每个 MinIO Server Federation 都提供统一的管理和命名空间。

MinIO 联合服务器支持无限数量的分布式模式集。这种方法的影响是对象存储可以为大型、地理分布的企业大规模扩展,同时保留从单个控制台容纳各种应用程序(Splunk、Teradata、Spark、Hive、Presto、TensorFlow、H20)的能力。

  • Multi-Cloud Gateway:多云网关

所有企业都在采用多云战略。这也包括私有云。因此,您的裸机虚拟化容器和公共云服务(包括 Google、Microsoft 和阿里巴巴等非 S3 提供商)必须看起来相同。虽然现代应用程序具有高度可移植性,但支持这些应用程序的数据却不是。

让这些数据无论位于何处都可用,是 MinIO 解决的主要挑战。MinIO 在裸机、网络附加存储和每个公共云上运行。更重要的是,MinIO 通过 Amazon S3 API 确保您从应用程序和管理的角度来看这些数据的视图看起来完全相同。

MinIO 可以走得更远,使您现有的存储基础设施与 Amazon S3 兼容。影响是深远的。现在,组织可以真正统一他们的数据基础设施——从文件到块,所有这些都显示为可通过 Amazon S3 API 访问的对象,而无需迁移。

  • WORM:WORM对象锁定

启用 WORM 后,MinIO 会禁用所有可能改变对象数据和元数据的 API。这意味着一旦写入的数据就可以防篡改。这对于许多不同的监管要求具有实际应用。

基本架构

MinIO 被设计为云原生,可以作为由外部编排服务(如 Kubernetes)管理的轻量级容器运行。整个服务器是一个约 40MB 的静态二进制文件,并且在使用 CPU 和内存资源方面非常高效 - 即使在高负载下也是如此。结果是您可以在共享硬件上共同托管大量租户。

MinIO 在带有本地连接驱动器 (JBOD/JBOF) 的商用服务器上运行。集群中的所有服务器的能力相同(完全对称架构)。没有名称节点或元数据服务器。

MinIO 将数据和元数据作为对象一起写入,无需元数据数据库。此外,MinIO 将所有功能(擦除代码、bitrot 检查、加密)作为内联、严格一致的操作执行。结果是 MinIO 非常有弹性。

每个 MinIO 集群是一组分布式 MinIO 服务器,每个节点一个进程。MinIO 作为单个进程在用户空间运行,并使用轻量级协程来实现高并发。驱动器被分组到擦除集(默认情况下每组 16 个驱动器),并且使用确定性散列算法将对象放置在这些集上。

MinIO 专为大规模、多数据中心的云存储服务而设计。每个租户运行自己的 MinIO 集群,与其他租户完全隔离,使他们能够保护他们免受升级、更新和安全事件的任何中断。每个租户通过跨地域联合集群来独立扩展。

MinIO 服务器功能

MinIO 的企业级特性代表了对象存储空间的标准。从 AWS S3 API 到 S3 Select 以及我们对内联擦除编码和安全性的实施,我们的代码广受赞誉,并经常被一些技术和商业领域的大腕复制。

MinIO 对象保留

默认情况下,对唯一对象名称的每次新写入操作都会导致覆盖该对象。您可以将 MinIO 配置为创建 每个对象突变的版本,从而保留该对象的完整历史记录。MinIO 还支持一次写入多次 读取 (WORM) 锁定版本化对象,以确保在指定的持续时间内或直到显式解除锁定为止的完全不变性。

版本控制和对象锁定功能仅适用于 分布式 MinIO 部署:

  • Bucket Versioning:存储桶版本控制

MinIO 支持在单个存储桶中保存对象的多个“版本”。通常会覆盖现有对象的写入操作会导致创建新的版本化对象。MinIO 版本控制可防止意外覆盖和删除,同时支持“撤消”写入操作。存储桶版本控制是配置对象锁定和保留规则的先决条件 。

对于版本化存储桶,任何改变对象的写入操作都会导致该对象的新版本具有唯一的版本 ID。MinIO 标记客户端默认检索的对象的“最新”版本。然后,客户端可以明确选择列出、检索或删除特定对象版本。

其中:

  1. 具有单一版本的对象:MinIO 为每个对象添加一个唯一的版本 ID 作为写入操作的一部分。

2.具有多个版本的对象:MinIO 保留对象的所有版本,并将最新版本标记为“最新”。

3.检索最新的对象版本

4.检索特定对象版本

  • WORM:对象锁定

MinIO 对象锁定(“对象保留”)强制执行一次写入多次读取 (WORM) 不变性以保护版本化对象不被删除。MinIO 支持 基于持续时间的对象保留 和 无限期合法保留保留。

MinIO 对象锁定提供关键数据保留合规性,并符合Cohasset Associates 的SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 要求 。

其中:

  1. 不带锁的桶:MinIO 版本控制保留了对象突变的完整历史。但是,应用程序可以明确删除特定的对象版本。

  1. 带锁的桶:对存储桶中的对象应用默认的 30 天 WORM 锁定可确保所有对象版本的最短保留期和保护期。

3.锁定桶中的删除操作:删除操作遵循版本化存储桶中的正常行为 ,其中 MinIODeleteMarker为对象创建一个。但是,对象的非删除标记版本仍受保留规则约束,并且不会受到任何特定删除或覆盖尝试的影响。

4.锁定存储桶中的版本化删除操作:MinIO 会阻止任何删除在 WORM 锁定下持有的特定对象版本的尝试。客户端可以删除版本的最早可能时间是锁定到期时。

Minio部署和管理

MinIO 是一个软件定义的高性能分布式对象存储服务器。您可以在消费级或企业级硬件以及各种操作系统和架构上运行 MinIO。

MinIO 支持两种部署模式:独立分布式

  • 独立部署:具有单个存储卷或文件夹的单个 MinIO 服务器。独立部署最适合使用 MinIO 进行对象存储的应用程序的评估和初始开发,或为单个存储卷提供 S3 访问层。独立部署不提供对全套 MinIO 高级 S3 特性和功能的访问。
  • 分布式部署:一台或多台 MinIO 服务器,所有服务器上至少有四个总存储卷。分布式部署最适合生产环境和工作负载,并支持 MinIO 的所有核心和高级 S3 特性和功能。对于生产环境,MinIO 建议使用 4 个节点和 4 个驱动器的基线拓扑。

版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。