初识对象存储MinIO

团队  /  介绍

我们是光大科技有限公司智能云计算部云计算团队容器云项目组,致力于容器技术在金融行业的落地与实践,以容器云助力金融行业科技转型。我们的团队拥有经验丰富的容器与云原生领域研发工程师和专家,将不定期分享容器和云原生行业的原创技术文章和实践经验,共同探索与见证云原生时代金融领域的前沿技术和发展趋势。

MinIO /  简介

MinIO是一个基于Apache License v2.0开源协议的高性能对象存储服务。它兼容亚马逊S3云存储服务接口,单个对象最大可达5TB,适合存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。

产品  特点

云原生

容器化、基于K8S的编排、多租户支持。  

高性能

作为高性能对象存储,在标准硬件条件下它能达到183GB/s的读、171GB/s 的写速率。  

高度可用

MinIO服务器可以容忍分布式设置中高达(N/2)-1个节点故障。而且,您 可以配置MinIO服务器在MinIO与任意Amazon S3兼容服务器之间存储数据。

可扩容

不同MinIO集群可以组成联邦,形成一个全局的命名空间,并跨越多个数 据中心。 

Amazon S3兼容

MinIO使用Amazon S3 v2/v4 API。可以使用MinIO SDK、MinIO Client、AWS  SDK和AWS CLI访问MinIO服务器。

可对接后端存储

除了MinIO自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和 Azure Blob存储。 

Lambda计算

MinIO服务器通过其兼容AWS SNS/SQS的事件通知服务触发Lambda功能。支 持的目标是消息队列,如Kafka、NATS、AMQP、MQTT、Webhooks以及 Elasticsearch、Redis、Postgres和MySQL等数据库。 

部署简单

只有一个可执行文件,参数极少,部署非常简单。如只需要一条命令:MinIO  server /data,即可启动一个MinIO系统。   

无元数据数据库

MinIO在带有本地驱动器的商品服务器上运行,集群中的所有服务器的功能均相同(完全对称的体系结构),没有名称节点或元数据服务器。MinIO将数据和元数据作为对象一起写入,从而无需使用元数据数据库。避免元数据库成为整个系统的性能瓶颈,并将故障限制在单个集群之内,而 不会涉及其他集群。   

精细化修复

修复操作可以精细化到单个对象。 

S3 Select支持

支持完整的AWS S3 SELECT SQL语法。支持所有运算符。支持所有聚合,条件,类型转换和字符串函数。对于超大的对象,可通过执行SQL语句以加速人工智能与大数据分析处理。 

多语言客户端支持

提供JavaScript、Java、Python、Golang、.Net、Haskell多种语言的客户 端开发SDK。

操作系统支持友好

服务器端操作系统支持Linux、Unix、Windows、Max OS等主流操作系统。 

高级  特性

MinIO的高级特性主要体现在数据的安全性和完整性。

数据安全

①用户身份管理

支持与OpenID connect规范,支持临时密码,支持高度细化的、可配置的访问策略。

②单写多读(worm)

启用此选项可开启“一次写入多次读取”,默认设置为关闭。该特性一旦开启,MinIO将禁止可能改变对象数据、元数据的所有API。

③加密和防篡改

MinIO为加密数据提供了机密性,完整性和真实性保证,而且性能开销微乎其微。使用AES-256-GCM,ChaCha20-Poly1305和AES-CBC支持服务器端和客户端加密。加密的对象使用AEAD服务器端加密进行防篡改。支持HashiCorp的秘钥管理解决方案。

数据完整

①持续备份

支持快速增量备份到NAS、公有云等。

②支持纠删码

针对CPU进行汇编级优化后的纠删码保护每一个对象。  

③比特位保护

用户未知的情况下的静默错误/比特位衰减是磁盘的一个严重的问题。MinIO使用高度优化的HighwayHash算法保证从不读到错误的数据。

MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失一半数量(N/2)的磁盘也能恢复数据。  

【补充阅读】 

点此阅读

存储机制

Minio使用纠删码erasure code和校验和checksum。即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。

①校验和  

保护数据免受硬件故障和无声数据损坏。

②纠删码

纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。  

阵列纠删码中比如RAID5只支持一个盘失效,即使是RAID6也仅支持两个盘失效。纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio RS纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。而且Minio RS纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio RS纠删码的设计目标是为了性能和尽可能的使用硬件加速。

MinIO采用Reed-Solomon code将对象拆分成N/2数据和N/2奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复。  

RS code编码数据恢复原理    

RS编码以word为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的word,然后对word进行编解码。数据块的编码原理与word编码原理相同,后文中以word为例说明,变量Di, Ci将代表一个word。  

把输入数据视为向量D=(D1,D2,…, Dn), 编码后数据视为向量(D1, D2,…, Dn, C1, C2,.., Cm),RS编码可视为如下(图1)所示矩阵运算。  

图1最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n*n子矩阵可逆。为方便数据存储,编码矩阵上部是单位矩阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。

图片来源网络

RS最多能容忍m个数据块被删除。数据恢复的过程如下:   

(1)假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。(图2、3)  

(2)由于B\’ 是可逆的,记B\’的逆矩阵为 (B\’^-1),则B\’ * (B\’^-1) = I 单位矩阵。两边左乘B\’ 逆矩阵。(图4、5) 

 

(3)得到如下原始数据D的计算公式 。   

(4)对D重新编码,可得到丢失的编码。

初识对象存储MinIO

图片来源网络

初识对象存储MinIO

应用  场景

对象存储专为解决非结构化数据而来,提供低频存储(如应用与企业数据备份、监控数据、网盘应用)、镜像存储 、日志存储等核心功能及服务。

对象存储的规模大、容量可扩展、对公有云、私有云的兼容性好,另一方面是它更适合云原生的架构。单业务小文件多、容量要求大、大平台架构、混合云等场景可考虑应用对象存储。

此外,影像系统存储、互联网金融业务、归档备份、容器平台、大数据平台、机器学习存储等方面都是对象存储大有可为的场景。

我们的PaaS容器云平台存储使用minIO提供分布式对象存储服务,在minIO的基础上我们做一些改进,MinIO网关使用NAS存储支持Amazon S3。

目前minIO在容器云平台的应用场景包括承接内部离线镜像、yum源、python源,前端流水线更新(如内部安装docker,存放镜像的仓库需要用到minIO、nexus仓库、制品库、命令行下载应用,存放应用使用minIO、主机驱动的存放、harbor镜像仓库使用minIO、etcd的自动备份机制、流水线制品和日志的持久化)。

总  结

本篇文章只是针对对象存储MinIO的产品特点、高级特性、存储机制、应用场景等四个方面进行了初步的探索,如果在工作中使用到MinIO时,还需要对MinIO的运行模式、mc配置与管理、性能测试等方面进行深入的理解和实践。

作者   吴涛

留 言 板


初识对象存储MinIO

往期回顾

Clickhouse实战之分布式集群方案

统一监控管理平台Prometheus驱动的实现

浅谈Go语言内存管理   

设计模式在项目实战中的应用

     微信公众号  |  EBcloud

                 快来关注吧!

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33211.html

(0)
EBCloud's avatarEBCloud
上一篇 2024年4月2日 下午3:29
下一篇 2024年4月2日 下午3:29

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注