MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。
MinIO提供高性能、S3兼容的对象存储。Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。区别于分布式存储系统,minio的特色在于简单、轻量级,对开发者友好,认为存储应该是一个开发问题而不是一个运维问题。
MinIO是Kubernetes的原生产品,是唯一一个可在每个公共云、每个Kubernetes发行版、私有云和边缘上使用的对象存储套件。MinIO是软件定义的,在GNU AGPL v3下是100%开源的。
MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。
MinIO 在最大数量的环境中支持最广泛的用例。自推出云原生以来,MinIO 的软件定义套件在公共云、私有云和 边缘无缝运行- 使其成为混合云和多云对象存储的领导者。凭借行业领先的性能 和可扩展性,MinIO 可以提供一系列用例,包括 AI/ML、分析、备份/恢复以及现代 Web 和移动应用程序。
MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。
在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品。
MinIO的企业级功能代表了对象存储空间中的标准。从AWS S3 API支持到S3 Select支持,以及MinIO设计的擦除编码和数据安全等实现,MinIO的代码受到了技术和业务领域的一些知名人士的广泛赞誉和频繁使用。
MinIO使用按对象的嵌入式擦除编码保护数据,该编码以汇编代码编写,可提供最高的性能。MinIO使用Reed-Solomon代码将对象划分为n / 2个数据和n / 2个奇偶校验块-尽管可以将它们配置为任何所需的冗余级别。这意味着在12个驱动器设置中,将一个对象分片为6个数据和6个奇偶校验块。即使丢失了多达5个((n / 2)–1)个驱动器(无论是奇偶校验还是数据),仍然可以从其余驱动器可靠地重建数据。MinIO的实现可确保即使丢失或无法使用多个设备,也可以读取对象或写入新对象。最后,MinIO的擦除代码位于对象级别,并且可以一次修复一个对象。
无声的数据损坏或Bitrot是磁盘驱动器面临的严重问题,导致数据在用户不知情的情况下损坏。原因多种多样(驱动器老化,电流尖峰,磁盘固件错误,虚假写入,读/写方向错误,驱动程序错误,意外覆盖),但结果是一样的——数据泄漏。
MinIO对高速哈希算法的优化实现可确保它永远不会读取损坏的数据-它可以实时捕获和修复损坏的对象。通过在READ上计算哈希值,并在WRITE上从应用程序,整个网络以及到内存/驱动器的哈希值,来确保端到端的完整性。该实现旨在提高速度,并且可以在Intel CPU的单个内核上实现超过10 GB /秒的哈希速度。
在对象存储领域,需要高度加密才能在谈判桌上占有一席之地。MinIO通过最高级别的加密以及广泛的优化提供了更多功能,几乎消除了通常与存储加密操作相关的开销。
启用WORM后,MinIO会禁用所有可能会使对象数据和元数据发生变异的API。这意味着一旦写入数据就可以防止篡改。这对于许多不同的法规要求具有实际应用。
MinIO IAM 以 AWS Identity and Access Management (IAM) 兼容性为核心,无论环境如何,它都能向应用程序和用户展示该框架 , 从而在不同的公有云、私有云和边缘中提供相同的功能。MinIO 扩展了 AWS IAM 兼容性,支持流行的外部身份提供商(如 ActiveDirectory/LDAP、Okta 和 Keycloak),允许管理员将身份管理卸载到其组织的首选 SSO 解决方案。
传统复制方法的挑战在于它们无法有效扩展到几百TB。话虽如此,每个人都需要一种复制策略来支持灾难恢复,并且该策略需要跨越地域,数据中心和云。MinIO的连续复制旨在用于大规模的跨数据中心部署。通过利用Lambda计算通知和对象元数据,它可以高效,快速地计算增量。
Lambda通知确保与传统的批处理模式相反,更改可以立即传播。连续复制意味着即使发生高动态数据集,如果发生故障,数据丢失也将保持在最低水平。最后,就像MinIO所做的一样,连续复制是多厂商的,这意味着您的备份位置可以是从NAS到公共云的任何位置。
现代企业到处都有数据。MinIO允许将这些各种实例组合在一起以形成统一的全局名称空间。具体来说,最多可以将32个MinIO服务器组合成一个分布式模式集,并且可以将多个分布式模式集组合成一个MinIO服务器联合。每个MinIO Server Federation都提供统一的管理员和名称空间。
MinIO Federation Server支持无限数量的分布式模式集。
这种方法的影响在于,对象存储可以为大型的,地理上分散的企业进行大规模扩展,同时保留从以下位置容纳各种应用程序(S3 Select,MinSQL,Spark,Hive,Presto,TensorFlow,H20)的能力。单一控制台。
所有企业都在采用多云策略。这也包括私有云。因此,您的裸机虚拟化容器和公共云服务(包括Google,Microsoft和阿里巴巴等非S3提供商)必须看起来完全相同。尽管现代应用程序具有高度的可移植性,但为这些应用程序提供支持的数据却并非如此。
MinIO应对的主要挑战是,无论数据位于何处,都使数据可用。MinIO在裸机,网络连接存储和每个公共云上运行。更重要的是,MinIO通过Amazon S3 API从应用程序和管理角度确保您对数据的看法完全相同。
MinIO可以走得更远,使您现有的存储基础架构与Amazon S3兼容。其影响是深远的。现在,组织可以真正统一其数据基础架构-从文件到块,所有这些都显示为可通过Amazon S3 API访问的对象,而无需迁移。
MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。这是MinIO坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
缩放是一个维度概念,但它有一个真理:简单性缩放。MinIO 通过称为服务器池的概念进行水平扩展(横向扩展)。服务器池是一种组合多个技术组件的方法。每个服务器池都是一组独立的节点,具有自己的计算、网络和存储资源。
MinIO 非常适合为混合云战略寻求一致、高性能和可扩展的对象存储的企业。Kubernetes 原生设计,从一开始就兼容 S3,如今 MinIO 有超过 770 万个实例在 AWS、Azure 和 GCP 中运行——比其他私有云的总和还要多。当添加到数百万个私有云实例和广泛的边缘部署时 - MinIO 是混合云的领导者。
MinIO 是在过去四年中从头开始构建的,并且是定义云的技术和架构的本机。其中包括容器化、Kubernetes 编排、微服务和多租户。没有其他对象存储对 Kubernetes 更友好。
开源为云提供支持。开源为企业提供动力。开源为MinIO提供支持。每天都有数以万计的客户和社区成员信任 MinIO 为其部署提供安全性、弹性、持久性和卓越运营。
MinIO 基于Apache V2 license 100% 开放源代码 。这就意味着 MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、 自由的去修改、自由的再次发行新的版本和软件. 确实, MinIO 强有力的支持和驱动了很多世界500强的企业。此外,其部署的多样性和专业性提供了其他软件无法比拟的优势。MinIO 是 100% 开源的,遵循 Affero 通用公共许可证第 3 版 (AGPLv3)。这意味着 MinIO 的客户不受锁定、免费检查、免费创新、免费修改和免费重新分发。其部署的多样性以专有软件永远无法提供的方式强化了软件。
保护数据不被删除(意外或有意)是涉及每个行业的关键合规性组件。MinIO 支持完整的功能,包括对象锁定、保留、法定保留、治理和合规性。MinIO 的降压和对象可变性已通过 Cohasset Partners 的 Veeam 认证和验证,可根据 SEC 规则 17a-4(f)、FINRA 规则 4511 和 CFTC 法规 1.31 使用。
与 SAN 和 NAS 版本控制方法相比,对象级版本控制是一项重大演变。版本控制不仅提供数据保护,还作为对象锁定、不可变性、分层和生命周期管理等强大功能的基础。
使用 MinIO,对象按照 Amazon 的 S3 结构/实现进行独立版本控制。MinIO 为给定对象的每个版本分配一个唯一的 ID - 应用程序可以随时指定版本 ID 以访问该对象的时间点快照。
随着数据的不断增长,共同优化访问、安全性和经济性的能力成为一项硬性要求,而不是一项可有可无。这就是生命周期数据管理的作用。MinIO提供了一套独特的功能来保护云内和跨云的数据 - 包括公共云和私有云。
MinIO的企业数据生命周期管理工具,包括版本控制、对象锁定和各种衍生组件,可以满足许多用例。
数据是企业最关键的资产,因此必须在整个组织中轻松安全地使用,以便最大限度地提高其对每个人的价值。因此,企业必须根据受众的需求采用一系列数据接口方法。MinIO提供了一套选项来涵盖数据驱动型企业中的每个角色,例如图形用户界面(GUI),命令行界面(CLI)和应用程序编程接口(API)。MinIO 的数据管理接口可互换运行,以提供精细、高性能和可扩展的对象存储管理。
在跟踪任何系统的运行状况和性能时,指标和日志记录至关重要。MinIO 通过详细的存储性能监控、指标和每个操作的日志记录,提供对集群的完整可见性。结果是为对象存储监控、警报和可观察性提供了强大、透明且高性能的答案。
S3 兼容性是云原生应用程序的硬性要求。MinIO 在遵守 API 方面毫不妥协,拥有数以万计的用户(包括商业用户和社区用户),MinIO 的 S3 实施是全球测试和实施最广泛的 AWS S3 替代方案。
作为 S3 API(V2 和 V4)的最早采用者之一,也是仅有的专注于 S3 的存储公司之一,MinIO 庞大的社区确保没有其他 AWS 替代方案更兼容。MinIO也是为数不多的支持S3 Select的公司之一。
MinIO 开创了高性能对象存储,并且仍然是市场上最快的对象存储,在 NVMe 的 32 个节点上,GET/PUT 吞吐量分别为 325 和 165 GiB/秒。这些速度使任何工作负载都可以在MinIO上运行 - 从高级分析到AI / ML。
极简主义是 MinIO 的指导设计原则。简单性减少了出错的机会,提高了正常运行时间,提供了可靠性,同时作为混合和多云安装性能的基础。MinIO 可以在几分钟内安装和配置。配置选项和变化的数量保持在最低限度,这导致系统管理任务接近于零,故障路径更少。MinIO升级是通过一个简单命令完成的,这个命令可以无中断的完成MinIO的升级工作,并且不需要停机即可完成升级操作,大大降低总使用和运维成本。也可以参考前面的文章:高性能分布式对象存储 MinIO 部署实战,步骤齐全!少走坑路
MinIO生产部署涵盖了全球。作为全球使用最多和下载量最大的对象存储服务系统, 它的影响力在与日俱增 - 由非凡的贡献者和传播者社区提供支持。
MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。。
官网文档地址:https://docs.min.io/cn/
目前MinIO支持市面主流的开发语言并且可以通过SDK快速集成快速集成使用。
MinIO服务安装后,可以直接通过浏览器登录系统,完成文件夹、文件的管理。非常方便使用。
MinIO设计为云原生,可以作为轻量级容器运行,由外部编排服务(如Kubernetes)管理。整个服务器约为40MB静态二进制文件,即使在高负载下也可以高效利用CPU和内存资源。结果是您可以在共享硬件上共同托管大量租户。
MinIO在带有本地驱动器(JBOD / JBOF)的商品服务器上运行。集群中的所有服务器的功能均相同(完全对称的体系结构)。没有名称节点或元数据服务器。
MinIO将数据和元数据作为对象一起写入,从而无需使用元数据数据库。此外,MinIO以内联,严格一致的操作执行所有功能(擦除代码,位rotrot检查,加密)。结果是MinIO异常灵活。
每个MinIO群集都是分布式MinIO服务器的集合,每个节点一个进程。MinIO作为单个进程在用户空间中运行,并使用轻量级的协同例程来实现高并发性。将驱动器分组到擦除集(默认情况下,每组16个驱动器),然后使用确定性哈希算法将对象放置在这些擦除集上。
MinIO专为大规模,多数据中心云存储服务而设计。每个租户都运行自己的MinIO群集,该群集与其他租户完全隔离,从而使他们能够保护他们免受升级,更新和安全事件的任何干扰。每个租户通过联合跨地理区域的集群来独立扩展。
高性能软件需要高性能硬件支持能够达到更优的性能。
尽管MinIO与硬件无关,但是这些行业标准,广泛可用的盒子经过了测试,可以与MinIO的软件的出色功能相提并论。MinIO们不懈地努力以针对最新硬件优化MinIO的软件,因此可以大大胜过价格过高的过时设备。
Object:存储到 Minio 的基本对象,如文件、字节流,视频、音频、日志、镜像等等
Bucket:用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而 言,就相当于一个存放文件的顶层文件夹。
Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。Minio 中所有的对象数据都会 存储在 Drive 里。
Set :即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。(For example: {1…64} is divided into 4 sets each of size 16.)
互联网海量非结构化数据的存储需求
MinIO Client(mc)是一个命令行工具,用于与MinIO对象存储服务进行交互。它提供了用于管理对象存储桶、上传和下载文件、管理访问控制列表(ACL)等功能。
以下是使用MinIO Client(mc)进行一些常见操作的示例:
在终端中输入以下命令安装MinIO Client:
$ go get -u github.com/minio/mc
使用以下命令配置MinIO Client以连接到你的MinIO服务器:
$ mc alias set myminio http://localhost:9000 access_key your_access_key secret_key your_secret_key
其中,myminio
是别名,http://localhost:9000
是MinIO服务器的地址和端口,access_key
和secret_key
是你的MinIO访问密钥。
使用以下命令列出所有存储桶:
$ mc ls myminio
使用以下命令将文件上传到存储桶:
$ mc put myminio/mybucket/myobject mylocalfile
其中,myminio是别名,mybucket是存储桶名称,myobject是对象名称,mylocalfile是要上传的文件路径。
使用以下命令将文件从存储桶下载到本地:
$ mc get myminio/mybucket/myobject mylocalfile
使用以下命令为存储桶设置访问控制列表:
$ mc admin bucket set myminio/mybucket --acl public-read-write
其中,myminio是别名,mybucket是存储桶名称,public-read-write是将访问权限设置为可读写。其他可用的ACL选项包括private(默认)和public-read。
使用以下命令从存储桶中删除对象:
$ mc rm myminio/mybucket/myobject
其中,myminio是别名,mybucket是存储桶名称,myobject是要删除的对象名称。
MinIO是一个高性能的分布式对象存储系统,适用于存储大量非结构化数据,如图片、视频、镜像等。MinIO支持以单点、分布式集群等方式进行部署,并提供了对等扩容和联邦扩容两种水平扩容方式。
在MinIO分布式集群中,扩容指的是增加存储节点和磁盘数量,以提高系统的存储容量和性能。MinIO的极简设计理念使得其分布式集群并不支持向集群中添加单个节点并进行自动调节的扩容方式,因为这样会引发数据均衡和纠删组划分等问题,为整个集群带来复杂的调度和处理过程,不利于维护。
因此,MinIO提供了一种对等扩容的方式,即要求增加的节点数和磁盘数均需与原集群保持对等。例如,如果原集群包含2个节点2块磁盘,则在扩容时必须同样增加2个节点2块磁盘(或为其倍数),以便系统维持相同的数据冗余SLA,从而极大地降低扩容的复杂性。在扩容后,MinIO集群并不会对全部的4个节点进行完全的数据均衡,而是将原本的2个节点视作一个区域,新加入的2节点视作另一区域。当有新对象上传时,集群将依据各区域的可用空间比例确定存放区域,在各区域内仍旧通过哈希算法确定对应的纠删组进行最终的存放。
此外,MinIO还支持联邦扩容的方式。联邦扩容是指将多个MinIO集群组成一个大的逻辑集群,每个MinIO集群都可以独立地进行扩容操作。联邦扩容可以更好地解决单点故障问题,提高系统的可用性和可靠性。
总的来说,MinIO分布式集群的扩容方式对数据均衡和纠删组划分等问题进行了优化处理,提高了系统的可维护性和扩展性。用户可以根据实际需求选择对等扩容或联邦扩容的方式来进行MinIO分布式集群的扩容操作。
部分内容参考来源:https://blog.csdn.net/joshua317/ article/details/128259365 部分内容整自网络素材