当前位置:网站首页>高性能云原生数据对象存储MinIO实战-上
高性能云原生数据对象存储MinIO实战-上
2022-08-06 02:05:00 【IT小神】
概述
定义
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
边栏推荐
- Wejo加入MONET联盟,进一步推动国际移动出行创新
- IJCAI 2022 | 量化交易相关论文(附论文链接)
- Nacos Installation Guide
- 在靠近客户端的代理上缓存常用数据有什么特点?
- 代理缓存是什么呢?
- History and Development of Character Encodings (ASCII, GBK, Unicode)
- Configuring Smart Link Load Balancing on Huawei Devices
- 软件工程-大学体育馆管理系统类图
- deque(双端数组)——STL
- Soul submitted a listing application to the Hong Kong Stock Exchange and continued to develop the social metaverse track
猜你喜欢
随机推荐
The miniPCIe interface CAN card quickly expands the CAN channel for the industrial computer
ansible 学习
【刷题系列】顺序表OJ题
MVCC interview questions
IJCAI 2022 | 量化交易相关论文(附论文链接)
CAD一键添加审图批注、AUTOCAD——图形界线怎么设置
软件工程-大学体育馆管理系统用例图
小程序的对象监听事件
The correct posture for Internet workers to write weekly reports
CAN转4G远程透传记录云网关为工程机械赋能
session、cookie的区别
Xpansiv acquires APX to expand environmental commodity market infrastructure
币圈新手指南,虚拟币交易平台哪个好
递归,动态规划实现
esp32之arduino配置下载提速
产业园区实现产业集聚的三大举措
华为设备配置Smart Link负载分担
map(自动排序的pair)——STL
SSH-KeyGen - Authentication key generation, management and conversion
list(链表)——STL