文件存储服务-MinIO

1. 概述

1.1 背景

文件存储服务主要用于管理和存储大量文件资源,具有以下功能和特点:

  1. 存储管理:文件存储服务系统提供高效的存储管理功能,能够安全地存储和组织各种类型的文件。用户可以轻松上传、下载和删除文件,并能通过文件夹和标签等方式进行分类和组织。
  2. 数据同步和备份:该系统支持数据同步和备份功能,确保用户的数据在多个存储节点之间保持一致性,并提供数据冗余和备份策略,以防止数据丢失或损坏。
  3. 访问控制和权限管理:文件存储服务系统提供灵活的访问控制和权限管理机制,使用户能够控制文件的访问权限。管理员可以设置不同的权限级别,并为特定用户或用户组分配适当的访问权限,从而确保文件的安全性和机密性。
  4. 文件分享和协作:用户可以方便地共享文件给他人,实现团队内外的协作和文件交流。该系统提供链接共享和访问密码等方式,确保文件在被授权的范围内被访问和编辑。
  5. 扩展性和可靠性:该系统通常具备良好的扩展性和可靠性,能够应对大规模数据存储和高并发访问的需求。

1.2 分类

分类维度类型一类型二类型三
存储形态块存储:以物理块为单位进行存储,如windows系统的c盘。 优点:适用于需要高性能的场景,如数据库。 缺点:太过于底层,不利扩展,不可以被共享。文件存储:以文件为单位进行存储,如D:\Users\Desktop\1.txt 优点:适用于需要共享文件和对数据进行一定的高级管理的场景 缺点:读写速度比较慢对象存储:以对象为单位进行存储 优点:适用于需要海量数据的存储、管理和访问的场景,如海量视频、图像、文件等。
存储架构DAS(Direct AttachSTorage):直联式存储,指将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上。SAN(Storage Area Network):存储区域网络,独立于数据网络的单独的存储网络,SAN可以将存储和服务器隔离,简化了存储管理。NAS(Network Attached Storage):网络附属存储系统,就是连接在网络上,具备资料存储功能的文件服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据。

2. MinIO-高性能分布式云存储

2.1 简介

MinIO是为海量数据存储、人工智能、大数据分析而设计的高性能对象存储系统,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据等。MinIO主要采用Golang语言实现,整个系统都运行在操作系统的用户态空间,客户端与存储服务器之间采用HTTP/HTTPS通信协议。
https://www.minio.org.cn/
在这里插入图片描述

PS:对于中小型企业,如果不选择存储上云,Minio是个不错的选择,麻雀虽小,五脏俱全。在国内,阿里巴巴、腾讯、百度、中国联通、华为、中国移动等9000多家企业都在使用MinIO产品。

2.2 设计原则

性能高度重视性能,MinIO对象存储可作为云原生应用的第一存储。
扩展性MinIO带来了一个简单的扩展模型。通过联盟模式,可以无穷扩展。
分散性想要超扩展的核心是存储与计算相分离这个概念,这种架构可带来更高的性能、容量、I/0。
简单性极简主义是MinIO设计的指导原则。
Amazon S3兼容Amazon S3 API是对象存储世界的事实标准。从诞生的早期,MinIO就是支持S3API,并且是最早支持S3 Select的。

2.3 基础概念

  • Object:存储到Minio的基本对象,如文件、图片、字节流,Anything…
  • Bucket:用来存储Object的逻辑空间,每个Bucket之间的数据是是相互隔离的,对于客户端而
    言,就相当于一个存放文件的顶层文件夹。
    [图片]
  • Drive: Drive可以被理解为一块磁盘,用于存储数据。在Minio启动时,可以以参数的方式指定Drive,所有在Minio中的对象都会存储在Drive里。
# 启动minio server服务,指定数据存储目录/mnt/data
./minio server /mnt/data  
  • Set:Set是一组Drive的集合,在分布式部署Minio时,系统会根据集群规模自动划分一个或多个Set,每个Set中的Drive分布在不同的位置。例如,如果集群规模为1到64,它会划分为4个Set,每个Set的大小为16。
    一个对象存储在一个Set上;
    一个集群划分为多个Set;
    一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出;

Set和Drive的关系可以理解为:
一个集群被划分为多个Set,每个Set又包含了若干块Drive,而对象则被存储在这些Drive中。这种设计使得Minio能够适应大规模的存储需求,同时也提高了数据的可靠性和冗余性。

2.4 技术架构

2.4.1 数据组织结构

传统NAS(网络附属文件存储系统)将整个存储资源组织为目录树的形式,如下图1:
在这里插入图片描述

与此不同,对象存储系统把存储资源组织为租户-桶-对象的形式,数据结构组织见下图2:
在这里插入图片描述

租户:用于隔离存储资源。在租户之下可以建立桶、存储对象。
桶:是若干个对象的逻辑抽象,是盛装对象的容器。
对象:类似于hash表中的表项:它的名字相当于关键字,它的内容相当于“值”。
用户:在租户下面创建的用于访问不同桶的账号,可以使用MinIO提供的mc命令设置不用用户访问各个桶的权限。

2.4.2 数据存储方案

  • A:去中心化架构

    MinIO采用去中心化的无共享架构,对象数据被打散存放在不同节点的多块硬盘,对外提供统一命名空间访问。 一方面,提高系统可靠性和可用性,因为数据分布在多个节点上,即使某个节点出现故障,也不会影响整个系统的运行。另一方面,通过Nginx在各服务器之间实现负载均衡,可以确保所有节点的负载相对均衡,避免了部分节点过载的情况发生。
    在这里插入图片描述

  • B:统一命名空间

MinIO对象存储服务主要有两种部署方式,一种是本地分布式集群部署,另一种是联盟模式部署。本地分布式集群部署方式即在多个本地服务器节点部署MinIO服务,将其组件成单套分布式存储集群,并提供统一命名空间和标准S3访问接口。联盟部署模式将不同地理位置或不同数据中心的多个MinIO服务器组合成一个统一的全局命名空间,在逻辑上组成一个联盟,对外以一个整体提供服务,显著提升数据的可用性和容错性。
如下图所示,4个服务器节点组成一个MinIO集群,每个服务器节点中会选择相同数据的硬盘创建一个纠删组,某个桶的数据会根据MinIO的分布式算法,切片分散存储到对应的纠删组中(详见纠删码相关内容)。

在这里插入图片描述

2.4.3 纠删码策略

一般上我们如果要保证数据高可用,主流的有两种策略:

多副本(Replication)策略:实打实的复制,常见的是三副本,意味着现实世界有三份一模一样的数据。存储代价较高,但如果一个副本挂了,可以马上切到另外一个,漂移时间非常短,N副本存储效率永远是1/N。
纠删码(Erasure Code)策略:纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用RS-Code将对象拆分成N/2数据块和N/2奇偶校验块。也就是如果有任意小于等于N/2份的数据失效,仍然能通过剩下的数据还原出来。

在同一集群内,MinIO会自动生成若干纠删组,用于存放桶数据。一个纠删组中的一定数量的磁盘发生的故障,通过纠删码算法可以恢复出正确的数据。MinIO存储对象数据时,首先把它生成若干等长的片段(默认按5MB切片),然后每一个片段会纠删算法分成若干分片,包括数据分片与校验分片,每个分片放置在一个纠删组的某个节点上。
在这里插入图片描述

2.4.4 部署模式

a、单主机 - 普通模式

在这里插入图片描述

在此启动模式下,对于每一份对象数据,minio直接在data下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是"单点",无任何高可用保障,磁盘损坏就表示数据丢失。

# 基于二进制
    wget -q http://dl.minio.org.cn/server/minio/release/linux-amd64/minio 
    chmod +x minio 
    ./minio server --console-address ":50000" /mnt/data  
    # 启动minio server服务,指定数据存储目录/mnt/data,通过--console-address ":port"指定静态端口 

# 基于docker 
    docker run -p 9000:9000 --name minio \ 
    -v /mnt/data:/data \ 
    -v /mnt/config:/root/.minio \ 
    minio/minio server /data
存在问题: 浏览器无法访问minio控制台,因为没有对外暴露控制台端口 
对外暴露minio控制台的端口,通过--console-address ":50000"指定控制台端口为静态端口 
    docker run -d -p 9000:9000 -p 50000:50000 --name minio \ 
    -e "MINIO_ROOT_USER=admin" \ 
    -e "MINIO_ROOT_PASSWORD=12345678" \ 
    -v /mnt/data:/data \ 
    -v /mnt/config:/root/.minio \ 
    minio/minio server --console-address ":50000" /data
b、单主机 - 纠删码模式

在这里插入图片描述

此模式为minio server实例传入多个本地磁盘参数。一旦多于一个磁盘参数,minioserver会自动启用纠删码模式。该模式对磁盘个数至少为4个,如不满足要求,实例启动将失败。

docker run -d -p 9000:9000 -p 50000:50000 --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 /data{1...8} --console-address ":50000" 
c、多主机 - 分布式模式

在这里插入图片描述
该模式是Minio服务最常用的架构,通过共享一个access_key和secret_key,在多台服务器上搭建服务,且数据分散在多块(大于4块,无上限)磁盘上,提供了较为强大的数据冗余机制(Reed-Solomon纠删码)。

以8个节点,每节点1块盘为例:启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令:
    export MINIO_ROOT_USER=admin 
    export MINIO_ROOT_PASSWORD=12345678 
    minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \ 
    http://192.168.1.13/export3 http://192.168.1.14/export4 \ 
    http://192.168.1.15/export5 http://192.168.1.16/export6 \ 
    http://192.168.1.17/export7 http://192.168.1.18/export
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr朱墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值