Minio 简介及单机部署
系列文章目录简介优点高性能可扩展性云的原生支持开放全部源代码 + 企业级支持与Amazon S3 兼容简单全世界增长最快的对象存储系统特性擦除码Bitrot保护加密WORM身份认证和管理连续复制全局一致性多云网关架构设计Minio Windows/Linux/K8S单机部署Minio下载WindowsLinuxDockerK8SMinIO 是一个基于Apache License v2.0开源协议的
系列文章目录
第一章 Minio 简介及单机部署
Minio 简介及单机部署
简介
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。目前支持JavaScript 、Java、Python、Golang、.NET。
MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。
MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。
MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。
在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品
MinIO现在也是CNCF成员,在云原生存储部分和ceph等一起作为目前的解决方案之一。
优点
高性能
MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。
可扩展性
MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。 这是我们坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
云的原生支持
MinIO 是从0开始打造的一款软件 ,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。 其中包括支持Kubernetes 、微服和多租户的的容器技术。使对象存储对于 Kubernetes更加友好。
开放全部源代码 + 企业级支持
MinIO 基于Apache V2 license 100% 开放源代码 。 这就意味着 MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、 自由的去修改、自由的再次发行新的版本和软件. 确实, MinIO 强有力的支持和驱动了很多世界500强的企业。 此外,其部署的多样性和专业性提供了其他软件无法比拟的优势。
与Amazon S3 兼容
亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。 MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和。
简单
极简主义是MinIO的指导性设计原则。简单性减少了出错的机会,提高了正常运行时间,提供了可靠性,同时简单性又是性能的基础。 只需下载一个二进制文件然后执行,即可在几分钟内安装和配置MinIO。 配置选项和变体的数量保持在最低限度,这样让失败的配置概率降低到接近于0的水平。 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服务器的集合,每个节点一个进程。 MinIO作为单个进程在用户空间中运行,并使用轻量级的协同例程来实现高并发性。将驱动器分组到擦除集(默认情况下,每组16个驱动器),然后使用确定性哈希算法将对象放置在这些擦除集上。
MinIO专为大规模,多数据中心云存储服务而设计。每个租户都运行自己的MinIO群集,该群集与其他租户完全隔离,从而使他们能够保护他们免受升级,更新和安全事件的任何干扰。每个租户通过联合跨地理区域的集群来独立扩展。
Minio Windows/Linux/K8S单机部署Minio
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
下载
国内下载地址:http://dl.minio.org.cn/server/minio/release/
Windows
1、 下载安装包;
2、 在minio.exe目录打开cmd;
3、 配置参数并启动;
# 设置用户名
set MINIO_ACCESS_KEY=admin
# 设置密码(8位)
set MINIO_SECRET_KEY=admin123
# 指定启动端口(未指定默认9000)及存储位置
minio.exe server --address 0.0.0.0:9999 D:/data
4、 登录地址IP+9999,输入用户名及密码,搭建完成;
Linux
1、 下载安装包
2、 创建相关目录;
# 创建文件存储目录
mkdir -p /data/minio
# 创建程序存放目录,并上传minio至此目录
mkdir -p /usr/local/minio
cd /usr/local/minio
# 修改可读权限
chmod +x minio
# 设置用户名
export MINIO_ACCESS_KEY=admin
# 设置密码
export MINIO_SECRET_KEY=admin123
3、 启动并访问首页;
# 启动,此处只是演示,实际使用需nohup或注册为服务启动
./minio server --address 0.0.0.0:9998 /data/minio
Docker
docker run -p 9999:9000 -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123" -v /data/minio:/data -d minio/minio server /data
Docker compose
version: '3'
services:
minio:
container_name: minio
hostname: minio
image: "minio/minio:latest"
volumes:
- /data/minio:/data
ports:
- "9999:9000"
environment:
MINIO_ACCESS_KEY: admin
MINIO_SECRET_KEY: admin123
TZ: Asia/Shanghai
command: server /data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
K8S
要点:使用yml文件配置资源,使用PVC存储minio文件
1、 在节点上(如:192.168.0.100)创建NFS;
# 安装nfs-utils rpcbind
yum install nfs-utils nfs-common rpcbind
# 创建目录
mkdir -p /data/minio
chmod 666 /data/minio/
chown nfsnobaby /data/minio/
# 添加访问策略
vi /etc/exports
# 输入内容
/data/minio *(rw,no_root_squash,no_all_squash,sync)
# 启动
systemctl start rpcbind
systemctl start nfs
# 查看
showmount -e
2、 创建PV(master执行);
# vim minio-pv.yaml
# 添加
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-minio
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /data/minio
server: 192.168.58.103
# 创建
kubectl create -f minio-pv.yaml
# 查看
kubectl get pv -o wide
3、 创建PVC(master执行);
#
vim minio-pvc.yaml
# 内容
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-minio
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
# 查看
kubectl get pvc -o wide
4、 创建pod及service(master执行);
#
vim minio.yaml
# 添加
apiVersion: v1
kind: Service
metadata:
name: minio-svc
labels:
app: minio
spec:
type: NodePort
ports:
- name: minio-port
protocol: TCP
port: 9000
nodePort: 32600
targetPort: 9000
selector:
app: minio
---
apiVersion: v1
kind: Pod
metadata:
name: minio
labels:
app: minio
spec:
containers:
- name: minio
env:
- name: MINIO_ACCESS_KEY
value: "admin"
- name: MINIO_SECRET_KEY
value: "admin123"
image: minio/minio:latest
args:
- server
- /data
ports:
- name: minio
containerPort: 9000
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: pvc-minio
# 创建
kubectl apply -f minio.yaml
# 查看pod
kubectl get pods -o wide
# 查看service
kubectl get svc -o wide
5、 验证:因为service采用的是NodePort,所以需要输入minio所在node的IP+32600访问;
文件存放:页面上传一个文件,进入nfs所在服务器,然后发现文件已被存放在PVC中
更多推荐
所有评论(0)