文章目录

  • 概述
    • 定义
    • 特性
    • 架构设计
    • 推荐配置
    • 常见应用场景
  • 部署
    • 支持部署方式
    • 部署常见错误
    • 快速入门MinIO
    • Minio纠删码快速入门
    • 分布式MinIO

概述

定义

MinIO 官网地址 http://www.minio.org.cn/

MinIO GitHub地址 https://github.com/minio/minio

MinIO 文档地址 http://docs.minio.org.cn/docs/

MinIO 是一款高性能、分布式的对象存储系统.可运行在标准硬件即X86等低成本机器。构建高性能的云原生数据,机器学习,大数据分析,海量存储的基础架构,MinIO支持各种应用程序数据工作负载。

  • 高性能:MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
  • 可扩展性:MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
  • 开放全部源代码 + 企业级支持:MinIO 基于Apache V2 license 100% 开放源代码 。
  • 与Amazon S3 兼容:亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。
  • 简单:极简主义是MinIO的指导性设计原则。简单性减少了出错的机会,提高了正常运行时间,提供了可靠性,同时简单性又是性能的基础。 只需下载一个二进制文件然后执行,即可在几分钟内安装和配置MinIO。

特性

MinIO的企业级功能代表了对象存储空间中的标准。从AWS S3 API支持到S3 Select支持,以及设计的擦除编码和数据安全等实现,代码受到了技术和业务领域的一些知名人士的广泛赞誉和频繁使用。

  • 纠删码:MinIO使用按对象的嵌入式擦除编码保护数据,该编码以汇编代码编写,可提供最高的性能。 MinIO使用Reed-Solomon代码将对象划分为n / 2个数据和n / 2个奇偶校验块-尽管可以将它们配置为任何所需的冗余级别。 这意味着在12个驱动器设置中,将一个对象分片为6个数据和6个奇偶校验块。即使丢失了多达5个((n / 2)–1)个驱动器(无论是奇偶校验还是数据),仍然可以从其余驱动器可靠地重建数据。MinIO的实现可确保即使丢失或无法使用多个设备,也可以读取对象或写入新对象。最后,MinIO的纠删码位于对象级别,并且可以一次修复一个对象。
  • bitrot
    • 无声的数据损坏或Bitrot是磁盘驱动器面临的严重问题,导致数据在用户不知情的情况下损坏。原因多种多样(驱动器老化,电流尖峰,磁盘固件错误,虚假写入,读/写方向错误,驱动程序错误,意外覆盖),但结果是一样的——数据泄漏。
    • MinIO对高速哈希算法的优化实现可确保它永远不会读取损坏的数据-它可以实时捕获和修复损坏的对象。 通过在READ上计算哈希值,并在WRITE上从应用程序,整个网络以及到内存/驱动器的哈希值,来确保端到端的完整性。 该实现旨在提高速度,并且可以在Intel CPU的单个内核上实现超过10 GB /秒的哈希速度。
  • 加密
    • 加密飞行中的数据是一回事,保护静态数据是另一回事。 MinIO支持多种复杂的服务器端加密方案,以保护数据-无论其位于何处。 MinIO的方法可确保机密性,完整性和真实性,而性能开销却可以忽略不计。 使用AES-256-GCM,ChaCha20-Poly1305和AES-CBC支持服务器端和客户端加密。加密的对象使用AEAD服务器端加密进行了防篡改。此外,MinIO与所有常用的密钥管理解决方案(例如HashiCorp Vault)兼容并经过测试。
    • MinIO使用密钥管理系统(KMS)支持SSE-S3。如果客户端请求SSE-S3,或启用了自动加密,则MinIO服务器会使用唯一的对象密钥对每个对象进行加密,该对象密钥受KMS管理的主密钥保护。由于开销极低,因此可以为每个应用程序和实例打开自动加密。
  • WORM:启用WORM后,MinIO会禁用所有可能会使对象数据和元数据发生变异的API。这意味着一旦写入数据就可以防止篡改。这对于许多不同的法规要求具有实际应用。
  • 身份认证和管理:MinIO支持身份管理中最先进的标准,并与OpenID connect兼容提供商以及主要的外部IDP供应商集成。这意味着访问是集中的,密码是临时的和轮换的,而不是存储在配置文件和数据库中。此外,访问策略是细粒度的且高度可配置的,这意味着支持多租户和多实例部署变得简单。
  • 连续复制
    • 传统复制方法的挑战在于它们无法有效扩展到几百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设计为云原生,可以作为轻量级容器运行,由外部编排服务(如Kubernetes)管理。整个服务器约为40MB静态二进制文件,即使在高负载下也可以高效利用CPU和内存资源。达到共享硬件上共同托管大量租户。

  • MinIO在带有本地驱动器(JBOD / JBOF)的商品服务器上运行。集群中的所有服务器的功能均相同(完全对称的体系结构)。没有名称节点或元数据服务器。
  • MinIO将数据和元数据作为对象一起写入,从而无需使用元数据数据库。此外,MinIO以内联,严格一致的操作执行所有功能(擦除代码,位rotrot检查,加密),异常灵活。
  • 每个MinIO群集都是分布式MinIO服务器的集合,每个节点一个进程。 MinIO作为单个进程在用户空间中运行,并使用轻量级的协同例程来实现高并发性。将驱动器分组到擦除集(默认情况下,每组16个驱动器),然后使用确定性哈希算法将对象放置在这些擦除集上。
  • MinIO专为大规模,多数据中心云存储服务而设计。每个租户都运行自己的MinIO群集,该群集与其他租户完全隔离,从而使他们能够保护他们免受升级,更新和安全事件的任何干扰。每个租户通过联合跨地理区域的集群来独立扩展。

推荐配置

MinIO与硬件无关,可在从基于ARM的嵌入式系统到高端x64和POWER9服务器的各种硬件体系结构上运行。但是对于大规模数据存储基础结构,
建议以高密度和高容量形式使用以下服务器配置。(注意:对象存储操作主要受吞吐量限制。因此,MinIO充分利用了现代硬件改进,例如AVX-512 SIMD加速,100GbE网络和NVMe SSD可用)。

常见应用场景

  • 互联网海量非结构化数据的存储需求
  • 电商网站:海量商品图片
  • 视频网站:海量视频文件
  • 网盘:海量文件
  • 社交网站:海量图片

部署

支持部署方式

如只是在开发和测试环境使用可使用podman和docker容器快速部署。MinIO是一个云原生的应用程序,旨在在多租户环境中以可持续的方式进行扩展。编排(orchestration)平台为MinIO的扩展提供了非常好的支撑。支持Docker Swarm、Docker Compose、Kubernetes、DC/OS编排平台的MinIO部署文档。

  • 为什么说MinIO是云原生的(cloud-native)?

    • 云原生这个词代表的是一些思想的集合,比如微服务部署,可伸缩,而不是说把一个单体应用改造成容器部署。一个云原生的应用在设计时就考虑了移植性和可伸缩性,而且可以通过简单的复制即可实现水平扩展。现在兴起的编排平台,像Swarm、Kubernetes以及DC/OS,让大规模集群的复制和管理变得前所未有的简单,哪里不会点哪里。
    • 容器提供了隔离的应用执行环境,编排平台通过容器管理以及复制功能提供了无缝的扩展。MinIO继承了这些,针对每个租户提供了存储环境的隔离。
    • MinIO是建立在云原生的基础上,有纠删码、分布式和共享存储这些特性。MinIO专注于并且只专注于存储,而且做的还不错。它可以通过编排平台复制一个MinIO实例就实现了水平扩展。
    • 在一个云原生环境中,伸缩性不是应用的一个功能而是编排平台的功能。
    • 现在的应用、数据库,key-store这些,很多都已经部署在容器中,并且通过编排平台进行管理。MinIO提供了一个健壮的、可伸缩、AWS S3兼容的对象存储,这是MinIO的立身之本,凭此在云原生应用中占据一席之地。

部署常见错误

io.minio.errors.ErrorResponseException: Access denied

原因可能是:

  • 时间不同步,如果经过niginx的话,需要配置一下9000的映射。
  • 如果是时间不同步,可以按以下步骤进行
# 安装ntp ntpdate
yum -y install ntp ntpdate
# 与时间服务器同步时间
ntpdate cn.pool.ntp.org
# 将系统时间写入硬件时间
hwclock --systohc

快速入门MinIO

如果开发熟悉使用可以直接使用单机容器部署

# podman中运行MinIO单点模式非持久化,9000端口是提供客户端的端口,9001是MinIO控制台页面端口
podman run \-p 9000:9000 \-p 9001:9001 \minio/minio server /data --console-address ":9001"
# docker中运行MinIO单点模式持久化宿主机
docker run \-p 9000:9000 \-p 9001:9001 \-v /mnt/data:/data \-v /mnt/config:/root/.minio \minio/minio server /data --console-address ":9001"
# 如果需要设置密码可以使用可以再加上如下参数-e "MINIO_ROOT_USER=minioadmin" \-e "MINIO_ROOT_PASSWORD=minioadmin123" \

查看docker进程

访问http://192.168.50.95:9001/ 输入上述提示的用户名密码minioadmin/minioadmin123 ,进入后首页显示如下

Minio纠删码快速入门

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。

  • 什么是纠删码erasure code?

    • 纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复,是不是很NB,感兴趣的同学请翻墙google。
  • 为什么纠删码有用?

    • 纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。
  • 什么是位衰减bit rot保护?

    • 位衰减又被称为数据腐化Data Rot、无声数据损坏Silent Data Corruption,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接咔咔宕了还危险。 不过不用怕,Minio纠删码采用了高速 HighwayHash基于哈希的校验和来防范位衰减。
  • Minio纠删码快速入门

    • 前提条件需要安装Minio
    • 以纠删码模式运行Minio,示例: 使用Minio,在12个盘中启动Minio服务。
    minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8 /data9 /data10 /data11 /data12
    
    • 示例: 使用Minio Docker镜像,在8块盘中启动Minio服务。
Copydocker run -p 9000:9000 --name minio \-v /mnt/data1:/data1 \-v /mnt/data2:/data2 \-v /mnt/data3:/data3 \-v /mnt/data4:/data4 \-v /mnt/data5:/data5 \-v /mnt/data6:/data6 \-v /mnt/data7:/data7 \-v /mnt/data8:/data8 \minio/minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8

分布式MinIO

分布式Minio可以将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

  • 数据保护

    • 分布式Minio采用纠删码来防范多个节点宕机和位衰减bit rot。
    • 分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
  • 高可用
    • 单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,数据就是安全的。不过需要至少有N/2+1个硬盘来创建新的对象。
    • 例如一个16节点的Minio集群,每个节点16块硬盘,就算8台服务器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写数据。
    • 注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类。
  • 一致性
    • Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。

启动一个分布式Minio实例只需要把硬盘位置做为参数传给minio server命令即可,然后需要在所有其它节点运行同样的命令。注意

  • 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
  • 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
  • 下面示例里的IP仅供示例参考,需要改成你真实用到的IP和文件夹路径。
  • 分布式Minio里的节点时间差不能超过3秒,可以使用NTP来保证时间一致。
  • 在Windows下运行分布式Minio处于实验阶段,请悠着点使用。

启动分布式Minio实例启动分布式Minio实例4个节点,每节点4块盘(虚拟),需要在4个节点上都运行下面的命令;先根据上面下载服务端和客户端,这里修改默认MinIO客户端端口和控制台端口,依次在每一台执行。

# 模拟多个盘
mkdir -p /home/minio/data1 /home/minio/data2 /home/minio/data3 /home/minio/data4
# 进入目录
cd /home/minio/
# 下载服务端
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin123
nohup ./minio server --address :9900 --console-address :9901 \http://192.168.5.52:9900/home/minio/data1 http://192.168.5.52:9900/home/minio/data2 \http://192.168.5.52:9900/home/minio/data3 http://192.168.5.52:9900/home/minio/data4 \http://192.168.5.53:9900/home/minio/data1 http://192.168.5.53:9900/home/minio/data2 \http://192.168.5.53:9900/home/minio/data3 http://192.168.5.53:9900/home/minio/data4 \http://192.168.50.95:9900/home/minio/data1 http://192.168.50.95:9900/home/minio/data2 \http://192.168.50.95:9900/home/minio/data3 http://192.168.50.95:9900/home/minio/data4 \http://192.168.12.28:9900/home/minio/data1 http://192.168.12.28:9900/home/minio/data2 \http://192.168.12.28:9900/home/minio/data3 http://192.168.12.28:9900/home/minio/data4 > run.log &

当所有都执行完后,每一台都有如下启动配置完成的输出,系统配置保存在每个盘下面.minio.sys文件夹,这个是一个隐藏文件夹,如果想重置初始化部署可以删除这个目录。

登录http://192.168.5.52:9901/ 输入用户名密码minioadmin/minioadmin123,查看

接下来创建一个名称为file的Bucket,然后在file下上传文件tinyid-server-1.0.tar.gz,

我们登录另外一台http://192.168.5.52:9901/ 后查看的结果是一样的

点击右边的Download下载按钮,瞬间下载完毕,MinIO真的就是快,上传下载基本上只受限于网络带宽,至此分布式部署已完成

**本人博客网站 **IT小神 www.itxiaoshen.com

高性能云原生数据对象存储MinIO实战-上相关推荐

  1. 如何使用云原生数据湖,助力线上教育行业逐步智能化

    简介: 阿里云基于对象存储OSS构建的数据湖解决方案,帮助企业有效消除数据孤岛的现象,让数据的价值真正被利用起来. 行业综述 线下教育行业因疫情受挫,线上教育却逆势增长 随着90年代互联网的引入,在线 ...

  2. 云原生数据湖以存储、计算、数据管理等能力通过信通院评测认证

    又一项大能力-云原生数据湖获得信通院认证啦! 近日,中国信息通信研究院 (以下简称"信通院") 正式公布了第十四批"大数据产品能力评测"结果,腾讯云云原生数据湖 ...

  3. 阿里云对象存储Java-SDK实战

    本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:阿里云对象存储Java-SDK实战 目前项目中要保存上传的文件,很多时候都会用到对象存储.本文介绍阿里云对象存储Java-SDK在实际开发中的基 ...

  4. Fluid + GooseFS 助力云原生数据编排与加速快速落地

    前言 Fluid 作为基于 Kubernetes 开发的面向云原生存算分离场景下的数据调度和编排加速框架,已于近期完成了 v0.6.0 版本的正式发布.腾讯云容器 TKE 团队一直致力于参与 Flui ...

  5. 云端数智新引擎,腾讯云原生数据湖计算重磅发布

    引言 是否遇到过,一个简单的业务统计需求却让数据工程师们抓耳挠腮? 是否遇到过,业务峰值周期明显,要么资源大量闲置, 要么线上疯狂告警? 是否遇到过,大数据集群运维复杂,需要投入大量技术工程师? 针对 ...

  6. 听说,难于上青天的云原生数据湖能开箱即用了?

    导语 | 云原生数据湖架构以低成本优势推动客户上云,同时云上客户得以低成本撬动更多结构化和非结构化数据的价值,是一场云厂商的自我革命.本文由腾讯大数据专家工程师于华丽在 Techo TVP开发者峰会「 ...

  7. 云原生数据湖为什么要选择腾讯云大数据DLC,一份性能分析报告告诉你!

    摘要 日前,腾讯云大数据数据湖计算 DLC 与国内两家知名云厂商的数据湖产品进行了性能对比,其中腾讯云 DLC 在三款产品中SQL平均执行查询时间短,性能表现优.腾讯云大数据 DLC 在存算分离和大数 ...

  8. 如何加速云原生数据应用?这个开源项目备受关注

    2021 年 9 月 17 日,在由中国信息通信研究院.中国通信标准化协会联合主办的"2021 OSCAR 开源产业大会"上,由阿里云云原生团队联合发起(其他联合单位包括:南京大学 ...

  9. 的数据湖_一文读懂云原生数据湖体系

    导读:如何基于阿里云 OSS .JindoFS 和数据湖构建(Data Lake Formation,DLF)等基础服务,同时结合阿里云上丰富的计算引擎,打造一个全新云原生数据湖体系? 作者 | 吴威 ...

最新文章

  1. 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现
  2. rewrite 帮助实现页面静态化
  3. lidar激光雷达介绍,以及使用激光雷达数据通过深度学习做目标检测
  4. mac下Android studio配置gradle的路径
  5. 20135203齐岳 信息安全系统设计基础第十三周学习总结
  6. jQuery scroll事件
  7. VueJS组件之全局组件与局部组件
  8. React Native的键盘遮挡问题(input/webview里)
  9. kail linux更新源、挂载
  10. HDU 1058 Humble Numbers(DP,数)
  11. oracle数据库sqlloader,Oracle SQL Loader(sqlldr)
  12. 服务器硬盘安装win10系统,硬盘安装win10的方法
  13. 高德地图通过经纬度获取地区城市
  14. html让视频自动循环播放,javascript – HTML5视频 – 如何进行无缝播放和/或循环播放多个视频?...
  15. ftp客户端安装,六款可以安装的ftp客户端
  16. 百度爱番番数据分析体系的架构与实践
  17. 论文翻译(7)---Enriched Long-term Recurrent Convolutional Network for Facial Micro-Expression Recognition
  18. [4G+5G专题-144]: 测试-频谱分析仪工作原理与测试结果分析
  19. java中数据类型的等级_Java 数据类型、变量
  20. Flutter 中文文档:Flutter 应用里的国际化

热门文章

  1. matlab画累积频率曲线,matlab小白一枚,有关重要度排序、累积频率问题,求大神相助!...
  2. 最新研究发布:新冠灭活疫苗和mRNA疫苗防重症保护效果相当
  3. fcpx插件:各种酷炫视频转场特效,效果震撼
  4. 华为畅享max有没有人脸识别_华为畅享MAX:轻奢外观下的智慧功能大揭秘
  5. visual studio 2022 编译 基于 C# 的 图表控件库 ScottPlot
  6. 特斯拉AI高级总监Andrej Karpathy详解Tesla纯视觉自动驾驶方案
  7. Problem B:化装晚会(usaco月赛)
  8. 小兔鲜项目搭建-精灵图、背景图片大小、盒子阴影、过渡
  9. amd同步多线程_首次同步多线程!AMD第三代锐龙3 3300X/3100上市:4核心8线程、PCIe 4加持...
  10. IAR常用快捷键设置