欢迎大家来到IT世界,在知识的湖畔探索吧!
|
本文档面向 MinIO 的最新稳定版本 RELEASE.2022-07-17T15-43-14Z。 |
1. 简介
MinIO是一款以GNU AGPL v3协议开源的高性能分布式对象存储系统,兼容AWS S3 API,支持S3的核心功能,可以100%运行在标准硬件上。
|
对象存储是用于大规模存储非结构化数据的数据存储架构,它将每项数据指定为一个对象,保存在单独的仓库中,然后与元数据和唯一标识符捆绑在一起,以方便访问和检索。 |
MinIO满足高吞吐量和低延迟要求,可用作云原生应用程序的主要存储,可用于为机器学习、分析和应用程序数据工作负载构建高性能基础架构,以及作为Hadoop HDFS的替代品。

欢迎大家来到IT世界,在知识的湖畔探索吧!
2. 特点
2.1 高性能
MinIO 开创了高性能对象存储,并且仍然是市场上最快的对象存储,在 NVMe 的 32 个节点上,GET/PUT 吞吐量分别为 325 和 165 GiB/秒,在标准硬件上,MinIO读/写速度上高达183 GB / 秒 和 171 GB / 秒。这些速度使任何工作负载都可以在MinIO上运行 – 从高级分析到AI / ML。
2.2 可扩展
MinIO可以通过具有独立计算、网络和存储资源的服务器池进行水平扩展,也可以从单个集群开始,通过与其它集群联合来实现扩展,在需要时可以跨越多个不同的数据中心。
2.3 云原生
MinIO设计为云原生,可以作为轻量级容器运行,由外部编排服务(如Kubernetes)管理。整个服务器约为40MB静态二进制文件,即使在高负载下也可以高效利用CPU和内存资源。结果是您可以在共享硬件上共同托管大量租户。
2.4 兼容S3
AWS的 S3 API 是在全球范围内达到共识的对象存储的协议。 MinIO 在很早的时候就采用了 S3 兼容协议,并支持 S3 Select 的产品。
|
大多数应用程序都必须检索整个对象,然后只筛选出需要的数据进行进一步分析。借助 S3 Select,应用程序可以将筛选和访问对象内部数据的繁重工作转移给 Amazon S3 服务。通过减少必须由应用程序加载和处理的数据量,S3 Select 可以提高大多数经常从 S3 访问数据的应用程序的性能,最高可提高 400%。 |
2.5 可靠性
Minio使用纠删码(erasure code)与校验和(checksum)来保护数据免受硬件故障和无声数据损坏(Silent Data Corruption), 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。
|
纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。Minio纠删码是作用在对象级别,可以一次恢复一个对象。 Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。 |
2.6 安全性
2.6.1 访问
MinIO IAM( Identity and Access Management ) 以 AWS IAM 兼容性为核心,无论环境如何,它都能向应用程序和用户展示该框架 , 从而在不同的公有云、私有云和边缘中提供相同的功能。MinIO 扩展了 AWS IAM 兼容性,支持流行的外部身份提供商(如 ActiveDirectory/LDAP、Okta 和 Keycloak),允许管理员将身份管理卸载到组织的首选 SSO 解决方案。
MinIO 同时支持内部和外部身份管理:内置IDP、OpenID、ActiveDirectory/LDAP。
通过身份验证后,MinIO 将允许或拒绝客户端请求,具体取决于是否授权经过身份验证的身份对指定资源执行操作。MinIO 使用基于策略的访问控制 (PBAC) 来定义经过身份验证的用户有权访问的授权操作和资源。
2.6.2 存储
MinIO 服务器端对象加密在数据存储在磁盘上之前自动加密数据(静态加密)。此方法可保证不会将任何数据写入未加密的磁盘。此基准安全层可确保静态数据的机密性、完整性和真实性。
2.6.3 传输
MinIO在网络传输和数据存储上均支持加密。
MinIO 支持群集中所有组件之间的传输层安全性 (TLS) v1.2+,可确保在群集间或群集内加密流量中没有薄弱环节。MinIO支持多个TLS证书,其中每个证书对应于一个特定的域名,使用服务器名称指示 (SNI) 来确定要为任何给定请求提供服务的证书。
2.7 对象版本
默认情况下,对唯一对象名称的每个新写入操作都会导致覆盖该对象。您可以将 MinIO 配置为创建每个对象突变的版本,从而保留该对象的完整历史记录。MinIO 支持完整的功能,包括对象锁定、保留、法定保留、治理和合规性。启用WORM后,MinIO会禁用所有可能会使对象数据和元数据发生变异的API。这意味着一旦写入数据就可以防止篡改。
版本控制和对象锁定功能仅适用于分布式 MinIO 部署。
2.8 分布式
Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
2.9 多租户
MinIO专为大规模,多数据中心云存储服务而设计。每个租户都运行自己的MinIO群集,该群集与其他租户完全隔离,从而使他们能够保护他们免受升级,更新和安全事件的任何干扰。每个租户通过联合跨地理区域的集群来独立扩展。
2.10 多云
MinIO应对的主要挑战是,无论数据位于何处,都使数据可用。 MinIO在裸机,网络连接存储和每个公共云上运行。
MinIO网关将亚马逊S3兼容性添加到微软Azure Blob存储。
MinIO GCS网关将亚马逊S3兼容性添加到Google云存储。
MinIO网关使用NAS存储支持Amazon S3。你可以在同一个共享NAS卷上运行多个minio实例,作为一个分布式的对象网关。
MinIO S3 Gateway向AWS S3或任何其他与AWS S3兼容的服务中添加了MinIO功能,如MinIO浏览器和磁盘缓存。MinIO边缘缓存允许将内容存储在离应用程序更近的地方。经常访问的对象存储在基于本地磁盘的缓存中。借助MinIO S3网关,您可以使用MinIO浏览器浏览基于AWS S3的对象。
MinIO HDFS网关将Amazon S3 API支持添加到Hadoop HDFS文件系统中。应用程序可以同时使用S3和文件API,而无需任何数据迁移。由于网关是无状态且无共享的,因此您可以弹性地分配所需数量的MinIO实例以分配负载。
2.11 磁盘缓存
边缘充当网关缓存,在应用程序和公共云之间创建中介。在此方案中,网关由具有多个硬盘驱动器或闪存驱动器的服务器提供支持,并部署在边缘数据中心。
磁盘缓存功能是指使用缓存磁盘来存储租户常用的一些数据。例如,假设你通过gateway azure设置访问一个对象并下载下来进行缓存,那接下来的请求都会直接访问缓存磁盘上的对象,直至其过期失效。此功能允许Minio用户:
对象的读取速度性能最佳。
任何对象的首字节时间得到显著改善。
磁盘缓存可以通过修改Minio服务的cache配置来进行开启。配置cache设置需要指定磁盘路径、缓存过期时间(以天为单位)以及使用统配符方式指定的不需要进行缓存的对象。
缓存设置也可以通过环境变量设置。设置后,环境变量会覆盖任何cache配置中的值。
3. 限制
|
项目 |
参数 |
|
最大驱动器数量 |
Unlimited |
|
最小驱动器数量 |
Unlimited |
|
读仲裁 |
N / 2 |
|
写仲裁 |
N / 2+1 |
|
项目 |
参数 |
|
Web浏览器上传大小限制 |
5GB |
|
S3 API |
限制 |
|
每次PUT操作的最大对象大小 |
5 GB |
|
每次上传的最大Part数量 |
10000 |
|
Part大小 |
5MB到5GB. 最后一个part可以从0B到5GB |
|
每次list parts请求可返回的part最大数量 |
1000 |
|
每次list objects请求可返回的object最大数量 |
1000 |
|
每次list multipart uploads请求可返回的multipart uploads最大数量 |
1000 |
4. 部署
MinIO 是软件定义的高性能分布式对象存储服务器,可以在消费级或企业级硬件以及各种操作系统和架构上运行。
在部署上,MinIO支持单节点单驱动器(SNSD)、单节点多驱动器(SNMD)、多节点多驱动器(MNMD或分布式)等拓扑结构。
4.1 单例
4.1.1 容器安装
|
Shell |
4.1.2 包安装
|
Shell |
4.1.3 二进制安装
|
Bash |
4.1.4 源码安装
|
Bash |
4.2 分布式集群
分布式 MinIO 部署由 4 个或更多驱动器/卷组成,这些驱动器/卷由一个或多个 minio 服务器进程管理,其中进程管理将计算和存储资源池化到单个聚合对象存储资源中。每个 MinIO 服务器都具有分布式拓扑的完整视图,以便应用程序可以连接到部署中的任何节点并执行 S3 操作。
分布式部署隐式启用纠删码,MinIO的数据冗余和可用性功能允许部署在群集中丢失多个驱动器或节点的情况下自动动态重建对象。纠删码提供对象级修复,开销比相邻技术(如 RAID 或复制)少。
Docker compose单主机多容器部署,适合测试环境。
Swarm mode多主机多容器部署,适合生产环境。
启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。
分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
分布式Minio使用的磁盘里必须是干净的,里面没有数据。
分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。
|
Bash # 使用helm在Kubernetes安装 |
4.3 联邦集群
联邦扩容的方式。通过引入etcd,将多个MinIO集群在逻辑上组成一个联邦,对外以一个整体提供服务。联邦扩容相比较对等扩容,有如下的优点:
组成联邦的各个集群不要求节点数和磁盘数的对等
联邦可以通过加入新的集群实现无限扩容
组成联邦的集群中,如果有部分集群出现故障,并不会影响其他集群的正常工作
可以灰度升级,不影响其他集群节点
4.4 负载均衡
使用 MINIO_BROWSER_REDIRECT_URL 环境变量为重定向指定外部主机名。
5. 使用
5.1 命令行工具
mc 命令行工具为 ls、cat、cp、mirror、diff 等 UNIX 命令提供了一种现代替代方案,它支持文件系统和 Amazon S3 兼容的云存储服务,但不为其它兼容S3 API的服务提供保证。
MinIO 客户端 mc 命令行工具提供admin命令,用于在 MinIO 部署上执行管理任务。
虽然 mc 支持任何 S3 兼容的服务,但 mc admin 仅支持 MinIO 部署。
5.2 Web 控制台
MinIO 控制台是一个丰富的 Web 图形用户界面,提供与 mc 命令行工具类似的功能。
您可以使用 MinIO 控制台执行管理任务,如身份和访问管理、指标和日志监控或服务器配置。
MinIO 控制台作为 MinIO 服务器二进制文件的一部分嵌入,从 RELEASE.2021-07-08T01-15-01Z 开始,也可以使用 github 存储库中的说明部署独立的 MinIO 控制台。
默认情况下,MinIO 在每次服务器启动时为 MinIO 控制台选择一个随机端口,可以通过传递–console-address 命令行选项来选择显式静态端口。
控制台对象浏览器部分显示经过身份验证的用户有权访问的所有存储桶和对象。
5.3 SDK
MinIO发布了以下SDK:
|
Language |
Reference |
|
Java (minio-java) |
MinIO Java SDK Reference |
|
Python (minio-py) |
MinIO Python SDK Reference |
|
Go (minio-go) |
MinIO Go SDK Reference |
|
.NET (minio-dotnet) |
MinIO .NET SDK Reference |
6. 运维
6.1 支持
MinIO用户有两个支持选项:
来自公共 Slack 频道的社区支持。社区支持只是尽力而为,没有 SLA 或 SLO。
MinIO 订阅网络 SUBNET 提供 24 小时或 1 小时 SLA,具体取决于订阅级别。
SUBNET 通过 MinIO 构建的门户提供 24/7/365 全天候直接工程师支持,该门户融合了 Slack 和 Zendesk 的精华。
6.2 配置
默认的配置目录是 ${HOME}/.minio,可以使用–config-dir命令行选项改写。
MinIO server在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中。
MinIO server在首次启动时会生成一个新的config.json,里面带有自动生成的访问凭据。
6.3 监控
6.3.1 健康
MinIO服务器通过端点公开监视数据,监视工具可以从这些端点中选择数据。
MinIO服务器具有两个与运行状况检查相关的未经身份验证的端点,一个活动性探针(指示服务器是否工作正常),一个就绪性探针(指示服务器是否由于重负载而未接受连接)。
可在以下位置获得活力探针 /minio/health/live
可在以下位置获得就绪探针 /minio/health/ready
6.3.2 指标
MinIO服务器在单个端点上公开与Prometheus兼容的数据,默认会对端点进行身份验证。
Prometheus 数据可在 /minio/prometheus/metrics,要使用此端点,请设置Prometheus以从该端点抓取数据。
6.3.3 日志
MinIO 将所有服务器操作发布到系统控制台,还支持将服务器日志和审核日志发布到 HTTP Webhook。
6.3.4 存储桶通知
存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控,并可通过AMQP、MQTT、Elasticsearch、Redis、NATS、PostgreSQL、MySQL、Apache Kafka、Webhooks等方式发布出去。
6.4 复制
复制功能将对象从一个 MinIO 位置复制到另一个 MinIO 位置,这为数据备份和恢复或跨区域的地理分布提供了一种方法。
MinIO 支持存储桶、站点两种类型的复制,可以选用其中一种复制,但不能同时使用。
存储桶复制将特定存储桶的内容从一个 MinIO 位置复制到另一个 MinIO 位置,目标位置可以在 MinIO 部署中,也可以跨部署。
存储桶复制可分为双向复制(主动-主动)和单向复制(主动-被动)。单向复制时,在目标存储桶上所做的更改不会复制到源存储桶。
站点复制将多个 MinIO 部署链接在一起,并使存储桶、对象和识别和访问管理 (IAM) 设置在所有连接的站点之间保持同步,但并非所有内容都可以跨站点复制。
6.5 升级
MinIO 强烈建议不要对生产群集执行盲目更新,而仅在必要时进行升级,在将升级应用于生产部署之前,应始终在较低级别环境(开发/QA/暂存)中测试升级。
MinIO 服务器支持滚动升级,即您可以在分布式集群中一次更新一个 MinIO 实例,但强烈建议同时重新启动所有节点。MinIO 操作是原子的,并且严格一致,重新启动过程不会对应用程序和正在进行的操作造成中断。
建议所有用户从客户端使用 mc admin update命令来升级,这将同时更新集群中的所有节点并重新启动它们。
6.6 扩容
MinIO支持通过命令指定新的集群来扩展现有集群,重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。
扩容添加的每个区域必须具有与原始区域相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA。 例如,第一个区有8个磁盘,您可以将集群扩展为16个、32个或1024个磁盘的区域,您只需确保部署的SLA是原始区域的倍数即可。
|
Bash |
6.7 退役
从RELEASE.2022-01-25T19-56-04Z 开始,MinIO 支持从部署中取消配置和删除服务器池。
取消配置旨在删除较旧的服务器池,与部署中的池相比,该服务器池的硬件不再足够或性能不足。MinIO 根据每个池中可用空间的比率,自动将数据从已解除授权的池迁移到部署中的其余池。
在退役过程中,MinIO 通常会路由读取操作(例如 GET,LIST 、HEAD)。MinIO 将写入操作(例如PUT,版本控制的DELETE)路由到部署中剩余的“活动”池。受版本控制的对象在整个迁移过程中保持其顺序。
退役是永久性的,一旦 MinIO 开始停用池,它就会将该池标记为永久不活动(“正在耗尽”)。取消或以其他方式中断取消配置过程不会将池还原到活动状态。
退役是一项重大的管理操作,需要在规划和执行时小心谨慎,而不是一项微不足道或“日常”的任务。
6.8 故障恢复
MinIO 部署依靠纠删码为多个磁盘或节点故障提供内置容错能力。根据部署拓扑和所选的擦除代码奇偶校验,MinIO 可以容忍部署中多达一半的驱动器或节点丢失,同时保持对对象的读取访问权限(“读取仲裁”)。
6.8.1 驱动器故障
单节点单驱动器部署是零奇偶校验的,并且依赖于底层存储卷来提供恢复。确保存储卷具有必要的复原设置,并遵从与该卷关联的工具或软件进行恢复。
MinIO 支持将故障驱动器与新的健康驱动器进行热插拔。MinIO 检测并修复这些驱动器,而无需任何节点或部署级重启。MinIO 修复仅发生在更换的驱动器上,通常不会影响部署性能。MinIO修复可确保恢复到驱动器上的所有数据的一致性和正确性。请勿尝试手动恢复数据或将数据从故障驱动器迁移到新的正常驱动器上。
6.8.2 节点故障
如果 MinIO 节点遭受完全的硬件故障(例如,丢失所有驱动器、数据等),则该节点在重新加入部署后就开始执行修复操作。MinIO 修复仅在更换的硬件上进行,通常不会影响部署性能。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/116861.html