数据存储简介

举报
Eric Shi 发表于 2024/03/29 16:04:23 2024/03/29
【摘要】 数据存储即持久化并安全存储计算机系统中信息的技术统称,包括存储数据的硬件、软件、格式和架构等。

1       一句话介绍

数据存储即持久化并安全存储计算机系统中信息的技术统称,包括存储数据的硬件、软件、格式和架构等。

2       存储介质

数据存储的存储介质是硬盘、磁带等可以持久化存储的介质,保证下电状态下数据不丢失,不同于RAM断电即丢失数据。硬盘分为机械硬盘(HDD)和固态硬盘(SSD)。

2.1      硬盘结构

  • 机械硬盘:主要由磁头、磁头控制器、盘片、盘片转轴构成。磁头控制器可控制磁盘沿着盘片半径方向移动,同时盘片高速移动,因此磁头能到达盘片的任何位置进行数据读取。
  • 固态硬盘:内部由一块PBC板加上控制芯片(控制单元)、闪存芯片(存储单元)以及缓存芯片(缓存单元)构成。控制芯片充分考虑磨损均衡等因素将数据分发到闪存芯片中进行存储。
  • 硬盘差异:固态硬盘没有机械部件,因而抗震性、耗电量、噪音、读写速度上都有明显优势,缺点是磁盘损坏难以恢复数据、造价高。

2.2      硬盘接口与协议

接口是硬件层面上硬盘与主机系统间的连接部件,协议则是软件层面的通信协议。

主流机械硬盘采用的接口与协议如下:

接口

接口速率

协议

支持硬盘类型

SATA 3.0

0.6 GB/s

SATA

HDD

SSD

SAS 3.0

1.2 GB/s

SAS

HDD

SSD

PCIE 3.0*4

3.9 GB/s

NVME

SSD

PCIE是一种主板标准接口(Interface),除了可以连接磁盘外,还支持连接网卡等硬件。M.2是一种硬盘规格(Form Factor),支持采用SATAPCIE等接口。

2.3      RAID

RAID即独立磁盘冗余阵列,将多个物理磁盘组合成一个逻辑磁盘,提高其读写性能以及冗余容灾能力。RAID主要包含三大技术模块:

  • 条带:即将数据分片同时分配到一组磁盘上,多块盘同时读写,从而提高性能。
  • 镜像:镜像旨在提高安全性,配置一块冗余磁盘,保存完全相同的数据。
  • 校验:RAID组内配置一块或两块校验盘,用于RAID组内磁盘损坏时,能通过校验计算恢复数据。


不同RAID级别都是组合以上三大技术而成,其容量、读写性能、安全性能会有差异。

RAID级别

技术

容量

写惩罚

RAID

N

1

RAID 0

条带

N

1

RAID 1

镜像

N/2

2

RAID 5

条带、校验

N-1

4

RAID 6

条带、二次校验

N-2

6

RAID 10

先做RAID 1,再做RAID 0

N/2

2

一般而言,RAID0的性能最高,相对的安全性较低。RAID1的安全性较高,但读性能较低,RAID5/6带有校验位,介于两者之间。

RAID1同时从镜像盘读数据,读性能较单盘好,但是写数据时要同时写入镜像磁盘,因此写惩罚为2RAID5写数据时,需要将原数据以及校验数据都读取出来,重新计算后写入,因此写惩罚为4RAID6多一个校验位,多一次度一次写,因此写惩罚为6

华为存储支持的RAID-TPRAID6还多一个校验位,允许同时3块盘损坏数据不丢失,允许更长的重构时长,可靠性提升约1000倍,然而性能损耗相对RAID6仅约5%

2.4      RAID2.0

华为自研RAID2.0技术旨在让所有盘的负荷均衡,避免单盘负荷过高提前达到寿命,此外所有盘都能参与重构,加快重构速率。RAID2.0技术示意图如下:


  • Chunk:将每块盘分割成固定大小的物理空间(64MB)。
  • CKG:来自不同硬盘的Chunk组成的RAID组,可以设置RAID策略。
  • Extent:即CKG条带,大小可调,数据空间申请、释放、迁移的最小单位(对于Think Lun,会将Extent进一步划分未更细粒度的块,称为Grain)。
  • Lun:来自不同CKG(覆盖硬盘域中所有硬盘)的Extent组成一个逻辑硬盘挂给主机使用。

2.5      EC纠删码

EC纠删码技术类似于RAID技术,每个“源数据分片”相当于RAID组中的单块硬盘,“冗余数据分片”相当于RAID组中的校验盘。EC技术应用于分布式存储中,因此不同分片分布到不同的节点上(当节点数少于总分片数时,存在分片分配到同一节点的情况,相应的允许同时坏掉的节点少了)。


上图以EC4+2为例,共计6个分片分布到6个节点上,允许同时故障两个节点数据不丢失。

3       存储容量

  • 物理容量:即硬盘的原始裸容量。
  • 可用容量:硬盘除去RAID冗余、元数据、热备等开销后的容量。一般指存储系统中可看到的容量,一般为物理容量的70-80%
  • 可得容量:又称有效容量。即采用重删压缩技术后,可实际写入存储的数据容量。

可得容量=可用容量*数据缩减比。


4       数据存储设备类型

4.1      集中式

集中式存储即将数据存储在一台或多台主机组成的中心节点上,从整体外形上看是一个大号服务器,由控制框和硬盘框构成。

  • 控制框负责接收业务、管理配置命令并保存至硬盘。各模块都集成到系统插框上,核心模块包括控制器、前端接口模块、后端接口模块、电源-BBU模块以及硬盘模块。
  • 硬盘框负责数据存储。各模块都集成到系统插框上,核心模块包括硬盘模块、级联模块以及电源模块。

控制框内控制器、前端接口模块和后端接口模块通常采用SmartMatrix 高速全互联均衡架构。即任一前端接口模块通过PCIE接口与任一控制器互联,框内所有控制器之间互联,任一后端接口模块通过PCIE接口与任一控制器互联。如果扩展控制框、硬盘框,同理框间全互联。


4.2      分布式

分布式存储即通过分布式软件将各个硬件节点的资源组织起来,形成一个或多个通用的虚拟化存储资源池。所采用的硬件节点一般为通用服务器,一般服务器的缓存主存比大于3%

5       存储网络

5.1      块存储协议

传统的块存储协议主要是SCSI协议。NVME协议作为新一代块存储协议,定义了一套新的块存储协议命令集,无论从时延、带宽都比SCSI协议要强。SCSINVME协议栈的对比如下:


5.1.1      SCSI协议

  • SCSI协议即小型计算机接口协议,规定了一套不同设备之间(例如主机、存储、光设备、网络设备)进行数据交互的模型和规范,是一个跟具体传输介质解耦的C-S架构的协议。协议结构中主要模块是作为Client的启动器(Initiator)和作为Server的目标器(Target)。


  • FC协议仅包含了物理层、传输层的规范,上层应用层可以封装SCSIIP协议等。封装SCSI协议后即FCP协议,通常用于主机与存储间通信。
  • iSCSI协议即将SCSI协议运行在IP网络上。iSCSI协议和FC协议可以看做SCSI协议在Fiber网络上拉远拓展的协议。

5.1.2      NVME协议

  • NVME协议原本是SSD硬盘传输协议,采用PCIE接口。
  • NVME Over FC协议即NVME基于FC网络封装的协议。
  • NVME Over RoCE协议即NVME基于RoCE协议进一步封装的协议。RoCE即基于以太网进行RDMA(远端内存访问技术,一般基于IBRoCEiWARP三种协议实现)的网络通信协议。

5.2      集中式

集中式存储网络平面分为交换网络、管理网络、BMC网络。交换网络组网总体分成三块:

  • 应用服务器连接控制框

直连方式:每个控制器至少一个前端端口与应用服务器直连,保证链路冗余,UltraPath多路径自动计算最优路径。

双交换机互联:直接基础上插入两台独立交换机,扩展主机端口,提高存储系统接入能力以及延长数据传输距离。


  • 控制框级联:

直连方式:两个控制框间四条线缆RDMA直连。

交换机组网:每个控制框分别两条链路连接两台交换机。

  • 控制框级联硬盘框:冗余连接的级联方式。(下图橙色和蓝色线缆相互冗余、独立)


5.3      分布式

分布式存储网络平面一般分为BMC网络、管理网络、业务网络、存储网络、控制网络、复制网络。

  • 管理网络:分为管理内部网络和管理外部网络。内部网络用于存储节点与管理节点通信,外部网络用户客户管理网络接入存储管理界面。
  • 业务网络:应用程序同存储之间的通信网络,块存储即应用通过iSCSI协议访问VBS(块存储客户端),非结构化存储则通过NASS3等协议调用存储接口。
  • 存储网络:分为存储前端网络和存储后端网络。前端网络承载存储节点之前的前台数据(例如VBSOSDDPCOSD间通信),后端网络承载存储节点后台数据(例如OSD之间的通信)。
  • 控制网络:为控制集群(ZK集群)提供IP地址。大部分场景下与存储前端网络合并,不体现。但是当采用多IP组网(部分网卡不支持bond模式运行RDMA,故通过多IP方式,为每个存储网口配置IP提升网络带宽)时,控制网络不能合入,需要独立规划(建议与存储网络同一子网)。
  • 复制网络:用于复制节点间进行数据同步。

私有客户端:指部署在节点上,提供标准接口给应用使用的客户端程序。VBS即块存储的私有客户端,DPC即文件存储的私有客户端。

VBS分离部署时,计算节点上应用程序直接通过虚拟化网络访问VBS,外部不呈现业务网络,呈现块存储前端网络;VBS融合部署时,计算节点通过物理网络访问存储,呈现业务网络,不呈现块存储前端网络。同理,应用程序直接调用文件存储接口,呈现业务网络;通过DPC访问则呈现文件存储前端网路。


6       数据存储类型

依据数据存储方式,数据存储可以分为块存储、文件存储和对象存储。

  • 块存储:面向文件系统。提供裸磁盘,文件被分割成一块一块存储到磁盘中。
  • 文件存储:面向自然人。提供树形文件系统,方便文件的组织与查阅。
  • 对象存储:面向应用系统。提供二层文件系统以及文件访问API,便于应用调用。

三类存储的原理如下图所示:


文件存储系统是树形结构,文件数量多了,树的深度过大,文件寻址效率低下。对象存储是为解决这个问题而生。对象存储将文件的元数据抽取出来保存到数据库中,所有数据文件则存储到扁平的同一逻辑层面上,即桶(bucket)。文件的检索效率大大提升,特别适合大量小文件并发访问的场景。

对象存储是key-value存储结构,直接通过key去获取对象。为了方便查阅,对象存储可以通过在对象的名称中增加“/”模拟文件存储的文件夹。例如“test/123.jpg”。此时,“test”就被模拟成了一个文件夹,“123.jpg”则模拟成“test”文件夹下的文件名,而实际上,对象名称(key)仍然是“test/123.jpg”。

7       数据存储软件

7.1      集中式

7.1.1      架构

集中式存储软件架构相对简单,由存储系统端、应用服务器端以及维护终端软件三个部分组成。

存储系统端软件承载存储的核心功能,主要包括如下几个软件模块:

  • 操作系统:操作系统向下管理硬件资源,向上支撑存储业务软件运行。
  • 基本功能控制软件:实现数据的存储以及读写等基本功能。
  • 增值功能控制软件:实现存储快照、重删压缩、双活等增值服务能力的软件。
  • 管理功能控制软件:提供对存储系统的资源、配置和告警的管理功能。

应用服务器端软件主要包括存储多路径软件和对业务数据进行保护容灾的软件。

维护终端软件包括巡检工具、同一管理平台等。

存储系统端软件自上而下根据功能分为五层:

  • 协议层:集中式存储可实现块及文件的统一存储架构,所以前端需要配置协议层实现SAN/NAS协议分离。
  • 数据服务层:基于LUN和文件系统提供数据服务功能,包括基本功能和增值功能。
  • 全局Cache:提供全局共享缓存能力。所有控制器节点的缓存一起构成全局缓存,每个LUN的缓存数据都是均匀地分布到全部节点缓存中,实现LUN无归属。缓存数据包括SAN/NAS缓存、元数据/数据/重删指纹等数据。
  • 空间管理层:对LUN或文件系统进行空间分配以及回收。
  • 存储池层:对写入的数据进行空间分配,实现存储池的高可靠、重构、重删压缩、数据分流以及后台空间回收等。

7.2      分布式

7.2.1      分布式的三种形式

  • 主从式:主节点作为控制中心,保存元数据,维护整个系统状态。例如HDFSNameNode作为主节点,是所有数据请求入口,且存储元数据,而实际数据分布在各个DataNode上。主节点易成为性能瓶颈以及故障点,因此主节点可以采用主备、集群选主的方式部署。
  • 无主式:节点之间没有主从之分,数据分散存储到所有节点,且所有节点都可以接收客户端的请求。每次请求通过哈希算法选中集群中一个节点作为头目,主导其他节点的数据处理。
  • 多主式:多个主机提供业务请求接入能力。一种方式是多个主机之间共享相同的数据,例如Oracle RAC架构;一种方式是多个主机承载不同的数据分片,例如MPP架构。

7.2.2      软件架构

分布式存储通常采用无主式架构,即集群中每个节点都可以接收客户端请求。

分布式存储软件逻辑架构总体分为三层:

  • 接入层:负责接收、处理客户端业务请求。不同类型存储协议的请求将由不同功能模块去承接,例如NAS srv模块提供NAS文件访问请求。
  • 服务层:提供统一的数据处理功能。一般分为非结构化数据和结构化数据处理两个模块,非结构化数据处理模块还提供统一的元数据管理功能。
  • 引擎层:提供数据的统一存储功能。华为分布式存储在该层继续分为I层(Index Layer)和P层(Persistence Layer)。I层负责更细粒度的空间管理,负责将数据块映射到P层存储单元Plog上;P层负责存储介质空间的分配管理与可靠性,同时向I层提供基于Plog语义的访问能力。

分布式存储软件核心组件如下:

  • 元数据管理服务组件(MDC):负责整个集群的元数据管理。
  • 硬盘管理进程(OSD):每个盘对应一个OSD进场,负责硬盘的IO操作。
  • ZooKeeper:集群一致性服务组件,负责MDC的选主。
  • 核心数据服务组件:如华为分布式存储的EDS组件,CephRADOS组件。
  • 客户端组件:如块存储客户端VBS、文件存储分布式并行客户端DPC

7.3      关键技术

7.3.1      COW&ROW快照

COWCopy On Write):写时复制。新数据写入被修改数据前,将被修改数据块复制到COW快照卷。涉及数据拷贝,主机写性能差。

ROWRedirect On Write):写时重定向。新数据写入时,不改变被修改数据,而是直接将新数据写入新的存储空间中。频繁覆盖写会打散源LUN数据分布,顺序读性能会变差;没有完整快照卷,多层级快照恢复慢。

如下图所示,源LUN上存储数据块“ABC”,此状态下打了一次快照,源LUN指针映射表复制给块照。当源LUN中数据块C需要修改为D时,COW方案下,数据块C复制到独立的COW快照卷中;ROW方案下,快照映射表不动,数据块D存储到新的空间中,并将指针指向新的存储空间。


快照状态下,删除数据时仅删除映射表中的指针,实际数据块并不删除。

7.3.2      FlashLink

FlashLink是华为存储针对闪存介质的一系列优化技术的统称。

  • 智能众核技术:即将ARM多核进行合理分组以实现性能提升,不同业务隔离在不同的CPU上运行,避免CPU资源争抢与冲突。
  • 大块顺序写:SSDFlash颗粒有擦写次数限制。采用ROW大块顺序写的方式,每次写通过分配新的Flash颗粒来写,实现每个Flash 颗粒擦写次数均衡,同时避免RAID写惩罚。
  • 智能分条聚合:针对采用EC方式的分布式存储而言,聚合大量随机小IOEC满分条下盘,减少写惩罚。

7.4      关键特性简介

存储厂商一般提供很多增值特性以提高产品的竞争力。增值特性可分为效率提升类和数据保护类。

效率提升:

  • 重删压缩:旨在提高数据缩减比,提升数据存储容量。重删即数据写入过程中,删除重复部分;压缩即先用压缩算法对数据块进行压缩,然后将数据块压紧后存入硬盘。
  • 多租户:旨在解决租户之间资源逻辑隔离的问题,支持业务隔离(如SANNAS隔离)以及网络隔离(如VLAN、逻辑端口隔离)。
  • 服务质量控制:旨在防止非关键应用抢占关键应用的资源。根据应用性能要求对LUN、文件系统、命名空间的IOPS、占用带宽等进行限制(上限/下限)。
  • 配额管理:旨在方便管理员管控使用者(目录、用户、用户组等)的存储资源。
  • 数据迁移:旨在不中断业务的情况下将数据从源LUN迁移至目标LUN
  • 异构虚拟化:外部异构存储资源映射给本端存储管理系统,进行存储资源的同一管理。

数据保护类:

  • 快照:旨在将数据快速恢复到快照时刻的状态。快照并不复制数据块,而是共享源LUN数据块,仅复制当时数据块的状态信息,就像拍照一样,因此快照速度极快。
  • 克隆:旨在实现两个物理隔离LUN之间的数据同步。
  • 远程复制: 旨在实现同城两套存储间同步复制或者异地两套存储间异步复制容灾。
  • 双活:旨在实现数据中心间存储双活。

8       存储性能评估

8.1      性能指标

存储性能指标不外乎IOPS、带宽以及时延。

  • IOPS:存储每秒能处理的读写IO个数,衡量存储快速响应的能力。适合大量小IO的场景下性能评估,例如OLTP
  • 带宽(吞吐量):存储每秒能处理的数据总量,衡量存储的吞吐能力。适合大IO场景下性能评估,例如OLAP

带宽=IOPS*平均IO Size

  • 时延:存储处理IO所消耗的时间,衡量存储设备处理的速度。但是要区分主机侧时延还是存储侧时延。存储侧时延即IO到达存储侧,处理完数据请求返回给主机侧的时间。

IOPS = 并发数*1000/平均时延(ms)

8.2      性能优化

  • 分条深度:即RAID条带在一个单盘上可以连续读写的数据块大小。主要影响随机IO性能。一定程度内,随着分条大小增大,一个IO请求落入两个分条的概率逐渐降低,IO性能提升。随机小IO,分条深度建议设置32KB;大IO则建议设置为512KB
  • Cache读写策略:读预取即在处理一个读I/O请求时,从硬盘侧按顺序读取除该I/O数据以外更多的数据,预先缓存到Cache中,以便下一个顺序读I/O请求到达时,可直接在Cache中获取,得到更高的性能表现;当读I/O完全随机时,不当的读预取策略会给存储系统带来额外的资源开销,不但无法保证后续I/OCache中的命中,而且会带来性能的降低。

写策略为回写(常驻)时,写Cache会通过高低水位来控制脏数据的存储容量和刷盘速率,将脏数据缓存在Cache中可使I/O得到充分整合与调度,降低延迟,提升性能;但当写Cache中缓存的I/O脏数据的总量达到一定上限时,就需要加快数据刷盘的速度,避免由于写Cache缓存了过多脏数据不能接收前端下发的新的写I/O请求,默认情况下,低水位为20,高水位为80

  • LUN归属:由于LUN可能分布在多个引擎,对于其他引擎,LUN的读写IO还是会进行转发,为了避免性能消耗,建议在创建硬盘域的时候选择同一个引擎下的硬盘。

9       参考

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。