当前位置:首页 » 存储配置 » 文件存储架构

文件存储架构

发布时间: 2022-11-26 00:58:46

A. 目前主要三种数据存储方式

三种存储方式:DAS、SAN、NAS
三种存储类型:块存储、文件存储、对象存储

块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。

本质是一样的,底层都是块存储,只是在对外接口上表现不一致,分别应用于不同的业务场景。

分布式存储的应用场景相对于其存储接口,现在流行分为三种:

对象存储: 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,如七牛、又拍、Swift、S3

块存储: 这种接口通常以QEMU Driver或者Kernel Mole的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口)

文件存储: 通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。

B. 对象存储、文件存储和块存储有什么区别

对象存储、文件存储和块存储区别为:存储设备不同、特点不同、缺点不同。

一、存储设备不同

1、对象存储:对象存储的对应存储设备为swift,键值存储。

2、文件存储:文件存储的对应存储设备为FTP、NFS服务器。

3、块存储:块存储的对应存储设备为cinder,硬盘。

二、特点不同

1、对象存储:对象存储的特点是具备块存储的高速以及文件存储的共享等特性。

2、文件存储:文件存储的特点是一个大文件夹,大家都可以获取文件。

3、块存储:块存储的特点是分区、格式化后,可以使用,与平常主机内置硬盘的方式完全无异。

三、缺点不同

1、对象存储:对象存储的缺点是不兼容多种模式并行。

2、文件存储:文件存储的缺点是传输速率低。

3、块存储:块存储的缺点是不能共享数据。

C. 什么是文件的逻辑结构和物理结构

逻辑结构:指一个文件在用户面前所呈现的形式.物理结构:指文件在文件存储器上的存储形式.
逻辑结构有两种形式:①记录式文件(有结构式文件).②字符流式文件(无结构式文件),也称流式文件.
物理结构:所谓文件系统的物理结构是指数据存放在硬盘上时硬盘磁粉的排列形状.
物理结构的形式:①连续文件结构②串联文件结构③索引文件结构④散列文件结构.

D. Ceph 架构与原理

Ceph 是一个开源项目,它提供软件定义的、统一的存储解决方案 。Ceph 是一个具有高性能、高度可伸缩性、可大规模扩展并且无单点故障的分布式存储系统 。
Ceph 是软件定义存储解决方案
Ceph 是统一存储解决方案
Ceph 是云存储解决方案

高可用性

高扩展性

特性丰富

Ceph独一无二地统一的系统提供了对象存储、块存储和文件存储功能。Ceph存储集群由几个不同的软件守护进程组成(比较重要的两个是MON和OSD),每个守护进程负责Ceph的一个独特功能并将值添加到相应的组件中。

RADOS是CEPH存储系统的核心,也称为Ceph 存储集群。Ceph的数据访问方法(如RBD,CephFS,RADOSGW,librados)的所有操作都是在RADOS层之上构建的。当Ceph 集群接收到来自客户端的请求时,CRUSH算法首先计算出存储位置,最后将这些对象存储在OSD中,当配置的复制数大于1时,RADOS负责的形式将数据分发到集群内的所有节点,最后将这些对象存储在OSD中。当配置的复制数大于1时,RADOS负责数据的可靠性,它复制对象,创建副本并将它们存储在不同的故障区域中。
RADOS包含两个核心组件: OSD和MON

OSD 是Ceph 存储集群中最重要的一个基础组件,他负责将实际的数据以对象的形式存储在每一个集群节点的物理磁盘中。对于任何读写操作,客户端首先向MON请求集群MAP,然后客户端旧可以直接和OSD进行I/O操作。
一个Ceph 集群包含多个OSD。一个典型的Ceph集群方案会为集群节点上的每个物理磁盘创建一个ODS守护进程,这个是推荐的做法。OSD上的每个对象都有一个主副本和几个辅副本,辅副本分散在其他OSD。一个OSD对于一些对象是主副本,同时对于其他对象可能是辅副本,存放辅副本的OSD主副本OSD控制,如果主副本OSD异常(或者对应的磁盘故障),辅副本OSD可以成为主副本OSD。
OSD是有一个已经存在的Linux文件系统的物理磁盘驱动器和OSD服务组成。Ceph 推荐OSD使用的文件系统是XFS。OSD的所有写都是先存到日志,再到存储.

MON 负责监控整个集群的健康状况。它以守护进程的形式存在,一个MON为每一个组件维护一个独立的MAP,如OSD,MON,PG,CRUSH 和MDS map。这些map 统称为集群的MAP。MON 不为客户端存储和提供数据,它为客户端以及集群内其他节点提供更新集群MAP的服务。客户端和集群内其他节点定期与MON确认自己持有的是否是集群最新的MAP.一个Ceph集群通常包含多个MON节点,但是同一时间只有一个MON。

librados是一个本地的C语言库,通过它应用程序可以直接和RADOS通信,提高性能

Ceph 块存储,简称 RBD,是基于 librados 之上的块存储服务接口。RBD 的驱动程序已经被集成到 Linux 内核(2.6.39 或更高版本)中,也已经被 QEMU/KVM Hypervisor 支持,它们都能够无缝地访问 Ceph 块设备。Linux 内核 RBD(KRBD)通过 librados 映射 Ceph 块设备,然后 RADOS 将 Ceph 块设备的数据对象以分布式的方式存储在集群节点中

RGW,Ceph对象网关,也称做RADOS网关,它是一个代理,可以将HTTP请求转换为RADOS,也可以把RADOS转换为HTTP请求,从而提供restful接口,兼容S3和Swift。Ceph对象网关使用Ceph对象网关守护进程(RGW)与librgw、librados交互。Ceph对象网关支持三类接口:S3、Swift、管理API(通过restful接口管理Ceph集群)。RGW有自己的用户管理体系

Ceph 元数据服务器服务进程,简称 MDS。只有在启用了 Ceph 文件存储(CephFS)的集群中才需要启用 MDS,它负责跟踪文件层次结构,存储和管理 CephFS 的元数据。MDS 的元数据也是以 Obejct 的形式存储在 OSD 上。除此之外,MDS 提供了一个带智能缓存层的共享型连续文件系统,可以大大减少 OSD 读写操作频率。

CephFS在RADOS层之上提供了一个兼容POSIX的文件系统。它使用MDS作为守护进程,负责管理其元数据并将它和其他数据分开。CephFS使用cephfuse模块(FUSE)扩展其在用户空间文件系统方面的支持(就是将CephFS挂载到客户端机器上)。它还允许直接与应用程序交互,使用libcephfs库直接访问RADOS集群。

Ceph管理器软件,可以收集整个集群的所有状态。有仪表板插件

一个对象通常包含绑定在一起的数据和元数据,并且用一个全局唯一的标识符标识。这个唯一的标识符确保在整个存储集群中没有其他对象使用相同的对象ID,保证对象唯一性。基于文件的存储中,文件大小是有限制的,与此不同的是,对象的大小是可以随着大小可变的元数据而变得很大。对象不使用一个目录层次结构或树结构来存储,相反,它存储在一个包含数十亿对象且没有任何复杂性的线性地址空间中。对象可以存储在本地,也可以存放在地理上分开的线性地址空间中,也就是说,在一个连续的存储空间中。任何应用程序都可以基于对象ID通过调用restful API从对象中获取数据。这个URL可以以同样的方式工作在因特网上,一个对象ID作为一个唯一的指针指向对象。这些对象都以复制的方式存储在OSD中,因为能提供高可用性。

对于Ceph集群的一次读写操作,客户端首先联系MON获取一个集群map副本,然后使用对象和池名/ID将数据转换为对象。接着将对象和PG数一起经过散列来生成其在Ceph池中最终存放的那一个PG。然后前面计算好的PG经过CRUSH查找来确定存储或获取数据所需的主OSD的位置。得到准确的OSD ID之后,客户端直接联系这个OSD来存取数据。所有这些计算操作都由客户端来执行,因此它不会影响Ceph集群的性能。一旦数据被写入主OSD,主OSD所在节点将执行CRUSH查找辅助PG和OSD的位置来实现数据复制,进而实现高可用。
  简单地说,首先基于池ID将对象名和集群PG数应用散列函数得到一个PG ID,然后,针对这个PG ID执行CRUSH查找得到主OSD和辅助OSD,最后写入数据。

PG是一组对象地逻辑集合,通过复制它到不同的OSD上来提供存储系统的可靠性。根据Ceph池的复制级别,每个PG的数据会被复制并分发到Ceph集群的多个OSD上。可以将PG看成一个逻辑容器,这个容器包含多个对象,同时这个逻辑容器被映射到多个OSD。
  计算正确的PG数对一个Ceph存储集群来说是至关重要的一步。PG数计算公式如下

Ceph池是一个用来存储对象的逻辑分区,每个池都包含一定数量的PG,进而实现把一定数量的对象映射到集群内部不同OSD上的目的。每一个池都是交叉分布在集群所有节点上的,这样就能提供足够的弹性。池可以通过创建需要的副本数来保障数据的高可用性。
  Ceph的池还支持快照功能,我们可以使用ceph osd pool mksnap命令来给特定的池制作快照。此外,Ceph池还允许我们为对象设置所有者和访问权限。

数据管理始于客户端向Ceph池中写数据。一旦客户端准备写数据到Ceph池中,数据首先写入基于池副本数的主OSD中。主OSD再复制相同的数据到每个辅助OSD中,并等待它们确认写入完成。只要辅助OSD完成数据写入,就会发送一个应答信号给主OSD。最后主OSD再返回一个应答信号给客户端,以确认完成整个写入操作。

E. HBase存储架构

上图是HBase的存储架构图。

由上图可以知道,客户端是通过Zookeeper找到HMaster,然后再与具体的Hregionserver进行沟通读写数据的。

具体到物理实现,细节包括以下这些:

首先要清楚HBase在hdfs中的存储路径,以及各个目录的作用。在hbase-site.xml 文件中,配置项 <name> hbase.rootdir</name> 默认 “/hbase”,就是hbase在hdfs中的存储根路径。以下是hbase0.96版本的个路径作用。1.0以后的版本请参考这里: https://blog.bcmeng.com/post/hbase-hdfs.html

1、 /hbase/.archive
HBase 在做 Split或者 compact 操作完成之后,会将 HFile 移到.archive 目录中,然后将之前的 hfile 删除掉,该目录由 HMaster 上的一个定时任务定期去清理。

2、 /hbase/.corrupt
存储HBase损坏的日志文件,一般都是为空的。

3、 /hbase/.hbck
HBase 运维过程中偶尔会遇到元数据不一致的情况,这时候会用到提供的 hbck 工具去修复,修复过程中会使用该目录作为临时过度缓冲。

4、 /hbase/logs
HBase 是支持 WAL(Write Ahead Log) 的,HBase 会在第一次启动之初会给每一台 RegionServer 在.log 下创建一个目录,若客户端如果开启WAL 模式,会先将数据写入一份到.log 下,当 RegionServer crash 或者目录达到一定大小,会开启 replay 模式,类似 MySQL 的 binlog。

5、 /hbase/oldlogs
当.logs 文件夹中的 HLog 没用之后会 move 到.oldlogs 中,HMaster 会定期去清理。

6、 /hbase/.snapshot
hbase若开启了 snapshot 功能之后,对某一个用户表建立一个 snapshot 之后,snapshot 都存储在该目录下,如对表test 做了一个 名为sp_test 的snapshot,就会在/hbase/.snapshot/目录下创建一个sp_test 文件夹,snapshot 之后的所有写入都是记录在这个 snapshot 之上。

7、 /hbase/.tmp
当对表做创建或者删除操作的时候,会将表move 到该 tmp 目录下,然后再去做处理操作。

8、 /hbase/hbase.id
它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。

9、 /hbase/hbase.version
同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来

10、 -ROOT-
该表是一张的HBase表,只是它存储的是.META.表的信息。通过HFile文件的解析脚本 hbase org.apache.hadoop.hbase.io.hfile.HFile -e -p -f 可以查看其存储的内容,如下所示:

以上可以看出,-ROOT-表记录的.META.表的所在机器是dchbase2,与web界面看到的一致:

11、 .META.
通过以上表能找到.META.表的信息,该表也是一张hbase表,通过以上命令,解析其中一个region:

以上可以看出,adt_app_channel表的数据记录在dchbase3这台reginserver上,也与界面一致,如果有多个region,则会在表名后面加上rowkey的范围:

通过以上描述,只要找到-ROOT-表的信息,就能根据rowkey找到对应的数据,那-ROOT-在哪里找呢?从本文一开始的图中可以知道,就是在zookeeper中找的。进入zookeeper命令行界面:

可以看出-ROOT-表存储在 dchbase3 机器中,对应界面如下:

以上就是HBase客户端根据指定的rowkey从zookeeper开始找到对应的数据的过程。

那在Region下HBase是如何存储数据的呢?

以下就具体操作一张表,查询对应的HFile文件,看HBase的数据存储过程。

在HBase创建一张表 test7,并插入一些数据,如下命令:

查看wal日志,通过 hbase org.apache.hadoop.hbase.regionserver.wal.HLog --mp -p 命令可以解析HLog文件,内容如下:

查看HFile文件,内容如下:

由此可见,HFile文件就是存储HBase的KV对,其中Key的各个字段包含了的信息如下:

由于hbase把cf和column都存储在HFile中,所以在设计的时候,这两个字段应该尽量短,以减少存储空间。

但删除一条记录的时候,HBase会怎么操作呢?执行以下命令:

删除了rowkey为200的记录,查看hdfs,原来的HFile并没有改变,而是生成了一个新的HFile,内容如下:

所以在HBase中,删除一条记录并不是修改HFile里面的内容,而是写新的文件,待HBase做合并的时候,把这些文件合并成一个HFile,用时间比较新的文件覆盖旧的文件。HBase这样做的根本原因是,HDFS不支持修改文件。

F. 简述计算机三级存储体系结构

在计算机系统中存储层次可分为高速缓冲存储器、主存储器、辅助存储器三级。高速缓冲存储器用来改善主存储器与中央处理器的速度匹配问题。辅助存储器用于扩大存储空间。

1、高速缓冲存储器

存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。

2、主存储器(Main memory)

计算机硬件的一个重要部件,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。现代计算机是为了提高性能,又能兼顾合理的造价,往往采用多级存储体系。即由存储容量小,存取速度高的高速缓冲存储器,存储容量和存取速度适中的主存储器是必不可少的。

主存储器是按地址存放信息的,存取速度一般与地址无关。32位(比特)的地址最大能表达4GB的存储器地址。这对多数应用已经足够,但对于某些特大运算量的应用和特大型数据库已显得不够,从而对64位结构提出需求。

3、外储存器

辅助存储器又称外存储器(简称外存)。指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等。

(6)文件存储架构扩展阅读

计算机的主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统。存储系统的性能在计算机中的地位日趋重要,主要原因是:

1、冯诺伊曼体系结构是建筑在存储程序概念的基础上,访存操作约占中央处理器(CPU)时间的70%左右。

2、存储管理与组织的好坏影响到整机效率。

3、现代的信息处理,如图像处理、数据库、知识库、语音识别、多媒体等对存储系统的要求很高。

G. 数据的存储结构指的是

数据的存储结构指的数据结构(数据的逻辑结构)在计算机中的表示,又称物理结构。数据的存储结构主要有两种:顺序存储结构和链式存储结构。

顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。

采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。

链式存储结构一般在计算机的硬盘中,文件都是链式存储的。我们知道,多个扇区组成一个簇,簇是计算机存储数据的基本单位。而一个文件是存储在多个在空间上也许并不相连的簇中的。这就是链式存储。

但是为了能够读取出这个文件,计算机会在该文件第一部分的尾部写上第二部分所在的簇号。第二部分的尾部又写上第三部分,以此类推,最后一部分写上一段代码,表示这是该文件的最后一部分。值得一提的是,高簇号在后。(如代码所示的1234实为簇3412)文件所占簇可认为是随机分配的。

H. 简述磁盘文件目录的结构和种类

文件目录结构包含:文件名、文件内部标识、文件的类型、文件存储地址、文件的长度、访问权限、建立时间和访问时间等内容。

文件目录分为一级目录、二级目录和多级目录。多级目录结构也称为树形结构,在多级目录结构中,每一个磁盘有一个根目录,在根目录中可以包含若干子目录和文件,在子目录中不但可以包含文件,而且还可以包含下一级子目录,这样类推下去就构成了多级目录结构。

(8)文件存储架构扩展阅读

文件目录是为实现“按名存取”,必须建立文件名与辅存空间中物理地址的对应关系,体现这种对应关系的数据结构称为文件目录。每一个文件在文件目录中登记一项,作为文件系统建立和维护文件的清单。

一个计算机系统中有成千上万个文件,为了便于对文件进行存取和管理,计算机系统建立文件的索引,即文件名和文件物理位置之间的映射关系,这种文件的索引称为文件目录。

采用多级目录结构的优点是用户可以将不同类型和不同功能的文件分类储存,既方便文件管理和查找,还允许不同文件目录中的文件具有相同的文件名,解决了一级目录结构中的重名问题。Windows、UNIX、Linux和DOS等操作系统采用的是多级目录结构。

I. 不是文件的存储结构

记录式文件不是文件的存储机构。
记录式文件由数据记录组成,按记录的长度可分为定长记录文件和变长记录文件。记录是记录式文件的最小存取单位。一个记录由若干属性组成。用以标识记录的属性称为关键字。以学生文件为例,每个学生的情况就是一个记录,有学号,姓名,出生日期,性别等属性。学号可以选作该记录的关键字。一般来说,可用来标识一个记录的关键字不只一个,但其中有一个是唯一标识这个记录的,称之为主关键字(如上例中的学号),而其他关键字称为次关键字(如学生的出生日期)。为了便于存储、检索或加工相关的信息项目,有时把文件划分成若干个记录,这种文件称为记录式文件。
文件结构是文件存放在磁盘等存储设备上的组织方法。主要体现在对文件和目录的组织上。在文件管理中,任何一个文件都存在着两种形式的结构:文件的逻辑结构和文件的物理结构。磁盘属于外存,磁盘文件结构是指文件在磁盘上的分配方式,采用不同的分配方式,会形成不同的文件物理结构。

热点内容
男人穿高跟鞋解压跳舞 发布:2025-07-27 13:15:01 浏览:551
抢陌陌直播间红包脚本 发布:2025-07-27 13:14:09 浏览:775
unix给服务器设ip 发布:2025-07-27 13:14:08 浏览:307
百度云下载文件解压 发布:2025-07-27 13:11:04 浏览:205
电脑qq邮箱密码在哪里找 发布:2025-07-27 13:10:58 浏览:990
c语言矩阵的加法 发布:2025-07-27 13:10:57 浏览:16
凯撒加密4 发布:2025-07-27 12:52:21 浏览:588
sql多条记录合并 发布:2025-07-27 12:42:02 浏览:510
我的世界怎么把材质包装进服务器电脑版 发布:2025-07-27 12:33:57 浏览:398
手游吃鸡90帧要什么配置 发布:2025-07-27 12:31:41 浏览:826