今天没有测试任务,简单分享点存储知识吧,内容很初级,大佬大神级别的勿喷!

第一章节 存储硬件认知

存储硬件认知-什么是存储

一方面它是数据临时或长期驻留的物理媒介,数据被保存的地方。

一方面,它是保证数据完整安全存放的方式或行为。

下图那些存储设备是你见过的:

磁带设备代表:磁带机、自动加载机、磁带库     

优点:成本低廉,移动性高、防震且经久耐用、格式可靠等诸多优点。     

缺点:速度慢、保存条件苛刻

光盘设备: 一次写入 长期保存

磁盘分类:IDE硬盘、SATA硬盘、SAS硬盘     

设备代表:磁盘阵列         

优点:速度快、可靠性高     

缺点:不易于离线归档、成本较高

存储硬件认知-常见的存储介质介绍:

机械硬盘:

SSD硬盘:

常见的硬盘 分成两类   机械硬盘 和 SSD 首先我们先看下

        机械硬盘刚才我们从磁盘中读到了数据,接下来我们讲解磁盘通过什么样的接口跟计算机做交互。这个接口也叫磁盘管理协议。

        磁盘管理协议的定义又分成两部分:软件和硬件。其中软件是指指令级,目前指令级就两个:ATA和SCSI;硬件代表数据传输方式,一般都是主板上的导线传输原理,但并不限制,数据甚至可以通过TCP/IP传输。定义一个协议需要同时定义了指令级以及硬件传输方式。

        ATA 全称是Advanced Technology Attachment,现在看起来不咋地,不过从名字看来,当时这个东西还是很高级的。 这个指令是上个世纪80年代提出的。按照硬件接口的不同,又分成了两类,一类是并行ATA(PATA,一类是串行ATA(SATA)。一开始流行起来的是PATA,也叫IDE。不过由于并行线抗干扰能力太差,排线占空间,不利电脑散热。而更高级的SATA协议自从2000年被提出之后,很快PATA/IDE接口的磁盘就被历史淘汰,目前的ATA接口的磁盘只有SATA磁盘了。

        SCSI 全称是Small Computer System Interface。也是上个世纪80年代提出来的,当时设计他的目的就是为了小型服务器设计的磁盘交互接口。用该接口可以达到更大的转速,更快的传输效率。但是价格也相对较高。 所以目前基本上在服务器领域SCSI磁盘会比较多,在PC机领域SATA硬盘会比较多。不过随着SATA盘的进化以及其得天独厚的价格优势,在服务器领域SATA也在逐步侵蚀SCSI的市场。 不过SCSI也不会坐以待毙,他按照PATA进化成SATA的思路,自己也搞串行化,进化出来了SAS(Serial Attach SCSI)接口。这个接口目前很对市场胃口,不仅价格低廉,而且性能也还不错。所以估计SATA淘汰PATA的一幕在不久的将来也会在SCSI领域里上演。 SCSI指令还可以通过Internet传输(iSCSI),通过FC网络传输(FC-SCSI),这些我们会再后文提及。

        然后我们在看下 SSD 是近些年才火起来的存储介质。ssd一般有两种,一种利用flash闪存为芯片,另一种直接用内存(DRAM)作为存储介质,只是在里面加了个电池,在断电以后还能继续用电池来维持数据。可以简单的把ssd 理解为 一个一个4K大小的小格子,直接存储 Page。一般一个Page为4K。则该Page包含4K*8个晶体管,Page是ssd读写的最小单元; Block。一般128个Page组成一个Block,Block的概念非常重要,读写数据的控制都是针对Block的,待会我们再重点讲一下Block的概念; Plane。一般2048个Block组成一个Plane; 一块芯片再包含多个Plane,多个Plane之间可以并行操作。  

        对比一下目前主流的硬盘和ssd的参数,下面是我在工作中测试得到的数据,测试数据为各种存储介质在4K大小下的随机/顺序 读/写数据,供参考:

当然现在存储m2接口的nvme SSD,大家可以自行看下m2口的SSD性能就好了

第二章节 传统存储技术

        在上面,简单介绍了单个磁盘的存储原理和读写过程。在实际生产环境中,单个磁盘能提供的容量和性能还是有限,我们就需要利用一些组合技术将多个磁盘组合起来提供更好的服务。 这一节,我们主要介绍各种磁盘组合技术。首先,我们会看一下最基本的组合技术RAID系列技术;然后,我们在看一下更大规模的集成技术SAN和NAS。

传统存储技术-DAID技术

  RAID定义:

        RAID,即Redundant Array of Inexpensive Disks,直译为汉语是廉价冗余磁盘阵列,最初是为了合成多个廉价小容量磁盘代替大容量昂贵磁盘,并保证单个小硬盘损坏不能影响数据安全性而开发的磁盘存储技术。

  RAID作用和级别:

    RAID的作用:RAID是为了获得更加安全的数据使用效果,更快的存储I/O速度,更大的存储容量而产生的解决方案。用户在应用角度上抛开了物理层面的多个硬盘管理,而从逻辑层面享有单独统一的应用空间。         标准RAID的级别:现在RAID技术经过了近30年的发展,已经发展出了RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID10、RAID50等各种级别的RAID系统。各级别之间没有技术水平高低之分,RAID级别的选择是根据不同用户的应用需求来选择的。

  RAID常见的术语:

物理盘:物理盘是指构建RAID所使用的独立的物理硬盘,RAID创建完成后,物理盘即转换成成员盘。

逻辑盘 :多块物理盘通过RAID控制器(硬件RAID卡)或操作系统的RAID程序(软件RAID)配置为设定的RAID级别后,多块物理硬盘就按固定的RAID级别逻辑算法构成了一块新的虚拟硬盘,这个虚拟硬盘就称为逻辑盘,也称为容器。

逻辑卷:由逻辑盘形成的虚拟空间称为逻辑卷,也成为逻辑分区。

热备盘:热备盘是指连接到RAID系统中没有使用并处于加电待机状态的物理盘,当把此物理盘设定成热备盘,则RAID控制器通过监控RAID系统,有成员盘发生故障,RAID控制器会自动应用热备盘换掉故障的成员盘,并通过相应RAID级别逻辑算法在热备盘上重建故障成员盘的数据,恢复RAID阵列的完整性。

盘序:多个物理盘组成RAID阵列时,RAID卡会按照硬盘的选择顺序为成员盘安排好序号,这称为盘序。

       下面分别看下RAID0,1,5…

        RAID0又称为Stripe或Striping,代表了所有RAID级别中最高的存储I/O性能。RAID0是无容错、无冗余的RAID阵列系统,由两块或两块以上物理盘进行条带化组成一个逻辑盘,数据按条带化的方式存在于各成员盘上,由于并行写入和读取数据,所以I/O数据带宽加倍,数据存储速度加倍。但由于数据条带化并行存储于各硬盘,因此当任何一成员盘损坏,都会造成逻辑盘数据崩溃,进而损失全部数据。因此,RAID0级别的阵列的安全性是随着成员盘的增加而降低的。在线扩容:它是指在不影响已存在的逻辑盘阵列的数据安全性的基础之上,对目标的逻辑盘添加成员盘的操作过程。

        RAID 1模式又称为mirror ,RAID 1模式主要是通过将一块硬盘中的数据完整复制到另一块硬盘来实现数据的备份,每一个硬盘都有一个镜像硬盘,这个镜像硬盘随时保持与源硬盘的内容一致。RAID1可靠性最高,但是其磁盘的利用率却只有50%,是所有RAID级别中磁盘利用率最低的一个级别。

        RAID 5 与RAID 2~4相似,都有进行奇偶校验,以确保数据的可靠性,但是RAID 5不是把所有的校验块集中保存在一个专门的校验盘中,而是分散到所有的数据盘中。任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。

        RAID2~4逻辑盘容量(MB)= 最小容量成员盘(MB)× (N-1),RAID3级别技术同RAID2级别技术相似,是将单位为位或字节的数据条块化分布于不同的硬盘上。RAID3使用奇偶校验的编码技术来取代海明码实现错误检测和恢复。这种编码技术在磁盘阵列中只需要一块成员盘来存放校验信息,比较RAID2校验信息节省了大量的磁盘空间。

        RAID 5也被叫做带分布式奇偶位的条带。每个条带上都有相当于一个"块"那么大的地方被用来存放奇偶位。与RAID 3不同的是,RAID 5把奇偶位信息也分布在所有的磁盘上,而并非一个磁盘上,大大减轻了奇偶校验盘的负担。尽管有一些容量上的损失,RAID 5却能提供较为完美的整体性能,因而也是被广泛应用的一种磁盘阵列方案。它适合于输入/输出密集、高读/写比率的应用程序,如事务处理等。

        RAID5逻辑盘容量(MB)= 最小容量成员盘(MB)× (N-1)

        RAID 10,也被称为镜象阵列条带,现在我们一般称它为RAID 0+1。RAID 10(RAID 0+1)提供100%的数据冗余,支持更大的卷尺寸。组建RAID 10(RAID 0+1)需要4个磁盘,其中两个为条带数据分布,提供了RAID 0的读写性能,而另外两个则为前面两个硬盘的镜像,保证了数据的完整备份。RAID (0+1) 允许多个硬盘损坏,因为它完全使用硬盘来实现资料备余。

当然还有RAID 50等等,另外现在有些卡也会支持RAID6,就是有两个校验盘~

最后在看下热备盘的概念:

        热备盘(HotSpare):当一个正在使用的磁盘发生故障后,一个空闲、加电并待机的磁盘将马上代替此故障盘,此方法就是热备。热备用磁盘上不存储任何的用户数据。 一个热备用磁盘可以专属于一个单一的阵列(本地热备盘)或者它也可以是整个阵列热备用磁盘池中的一部分(全局热备盘)。

RAID总结:

        目前用得比较多的就是Raid5和Raid1。 而Raid的实现方式一般有两种:软Raid和硬Raid。

        软Raid是指操作系统通过软件的方式,对下封装SCSI/SATA接口的硬盘操作,对上提供虚拟硬盘的接口,中间实现Raid对应逻辑;

        硬Raid就是一个再普通的SCSI/SATA卡上加了一块芯片,里面执行可以执行Raid对应的逻辑。

        现在一般的Raid实现方案都是硬Raid,因为软Raid有如下两个确定: 占用额外的内存和CPU资源; Raid依赖操作系统,所以操作系统本身无法使用Raid,如果操作系统对应的那块硬盘坏了,那么整个Raid就无法用了。

说完RAID在说下存储分类:

这张是我从网上借鉴来的,但是基本能说清楚现在传统存储分类了。       

        简单总结一下:SAN针对海量、面向数据块的数据传输,而NAS则提供文件级的数据访问和共享服务。 NAS和SAN不仅各有应用场合,也相互结合,许多SAN部署于NAS后台,为NAS设备提供高性能海量存储空间。

第三章节 常见的分布式存储

在说分布式文件系统必须要先说下什么文件系统:

        看完这个文件系统系统片子,我们在说下分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。单独的 DFS共享文件夹的作用是相对于通过网络上的其他共享文件夹的访问点。

分布式文件系统分类

分布式文件存储

        先从我们最熟悉的文件存储说起,个人计算机都采用这种存储方式。 打开电脑C盘,可以看到一个个文件夹,点开文件夹可以看到很多并列的文件。数据基于文件系统进行存储,有目录、子目录、文件,称之为文件存储,它的操作对象是文件和文件夹。

        可以理解正常文件读写和存储,对应传统存储NAS架构。

分布式块存储

        什么是块存储呢?顾名思义,是将数据拆分为“块”,并单独存储各个“块”,每个数据块都有一个唯一的标识符。块存储的体验形式,一般是卷或者硬盘,例如windows中的C盘、D盘。块存储操作的对象是磁盘。

块存储可以看作成裸盘,不能直接被使用,当挂载到主机后需要指定文件系统。

对象存储

        前文说过,早期只有文件存储和块存储两种存储方式,为什么还要搞出一种新的存储方式呢? 这是因为数据量的爆炸式增长,以及非结构化数据占比的显著增加。 什么是非结构化数据?简单举个例子,日常工作时,制作excel表格,姓名、身高、体重等可以进行逻辑表达,这些就是结构化数据。而像文本、音频、视频这样的数据,就是非结构化数据。 面对非结构化数据的存储需求,文件存储和块存储没办法进行有效的面对。于是对象存储诞生了。 对象存储早在1996年,就被当成一个研究项目提了出来,直至2006年美国Amazon发布AWS S3服务,将对象存储作为一种云存储服务,引入云计算领域,这才引起所有人的重视。 对象存储是介于块存储和文件存储之间的一种存储方式,它的诞生,主要是想解决块存储和文件存储的缺点。 文件存储虽然很方便人类访问、记忆和理解,但对计算机来说,这种路径查找方式,完全没必要。而块存储具有排他性,服务器上的某一个逻辑块被客户端挂载后,其他客户端就无法挂载数据了。

        带有属性方式的存储形式,需要使用类似http RESTful接口进行存储。

常见的分布式存储

HDFS(Hadoop Distributed File System)

        是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。        

        HDFS优点:高容错性,适合批处理,可构建在廉价机器上。      

         HDFS缺点:低延迟数据访问,小文件存取。

Glusterfs

        它主要由存储服务器(Brick Server)、客户端以及NFS/Samba存储网关组成。不难发现,GlusterFS架构中没有元数据服务器组件,这是其最大的设计这点,对于提升整个系统的性能、可靠性和稳定性都有着决定性的意义。GlusterFS支持TCP/IP和InfiniBand RDMA高速网络互联,客户端可通过原生GlusterFS协议访问数据,其他没有运行GlusterFS客户端的终端可通过NFS/CIFS标准协议通过存储网关访问数据。  

         Glusterfs优点:大文件存储,架构简单方便维护,两节点就可以部署。  

         Glusterfs缺点:小文件存取,ls查询比较慢。

Ceph

        是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。国内外很多公司实践证明,ceph块存储和对象存储是完成可靠的。        

         rados集群中分为以下角色:mdss、osds、mons.osd对象存储设备,可以理解为一块硬盘+osd 管理进程,负责接受客户端的读写、osd间数据检验(srub)、数据恢复(recovery)、心跳检测等。Mons主要解决分布式系统的状态一致性问题,维护集群内节点关系图(mon-map、osd-map、mds-map、pg-map)的一致性,包括osd的添加、删除的状态更新。Mds元数据服务器,在文件存储时是必须配置。需要注意的是,mds服务器并不存放数据,仅仅只是管理元数据的进程。Ceph文件系统的inode等元数据真正存在rados集群(默认在metadata pool)

         Ceph优点:三种存储方式都支持,是openstack最优选择。  

         Ceph缺点:维护成本太高,代码复杂。

第四章 存储知识杂谈

        存储需求理解,可以关注http://sortbenchmark.org这个网站,在网站上列出了一些衡量大数据处理能力的指标, 大家可以参考。这些指标主要关注两个方面,一是数据处理速度,另外一个是处理成本。     

常见存储需求:

1.容量需求,如果想在一个集群中分时或者并行对多个业务的数据进行存储和处理,至少需要100PB的存储容量;目前在阿里云的ODPS平台中,单个盘古存储系统的容量在150PB左右,随着业务发展,这个数字也在不断更新。 2.高吞吐需求,从上面的问题分析我们可以看出,在2小时内1PB数据的排序处理分布式存储系统提供350GB/秒的吞吐量。 3.数据可靠性需求,这也是存储系统需要满足的最关键的需求,换句话说就是数据不能丢失。在集群中存储了很多业务的历史数据,随着时间发展,存储系统会经历软件升级、硬件损坏等,在这些场景下需要保证数据不会出现错误和丢失。在100PB存储容量下,存储系统需要达到8个9的数据可靠性,在这样标准下系统百年年左右才会出现一次数据对象丢失。 4.服务可用性需求,是存储系统可以连续提供对外服务的能力。在系统运行过程中,软件升级、软件缺陷、供电和网络系统维护、硬件失效都有可能中断系统服务。如果系统可以达到三个9一个5的可用性,那么一年累计会有5个小时左右的时间不能对外提供服务。通常对于在线服务业务,分布式存储系统会同上层业务逻辑一起来规避短暂的不可以服务时间,让整个服务有4个9以上的高可用能力。 5.高效运维需求,由于大数据要求的存储容量和系统吞吐量非常高,支持的业务种类也变得非常多而且多变,所以借助于分布式的处理能力会增加众多的物理硬件设备,同时软件的复杂度也呈现指数级增加。在这样的场景下,需要分布式存储系统提供自动化运维方法,来防止硬件失效和软件缺陷导致的问题。 6.低成本需求,随着数据规模变大,如果完全靠高性能硬件来提高整个系统的处理能力,势必会将成本变得非常高。分布式存储系统为了降低成本,通常会采用数据压缩、混合存储方式来降低成本。

  分布式存储-性能指标

        IOPS (Input/OutputPer Second)   

         IOPS 即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(OnlineTransaction Processing),IOPS是关键衡量指标。     

        另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。   

         IOPS(每秒IO次数) = 1s/(寻道时间+旋转延迟+数据传输时间)     因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15Krpm,则磁盘IOPS理论最大值分别为:   

        IOPS = 1000 / (3 + 60000/7200/2)  = 140     

        IOPS = 1000 / (3 + 60000/10000/2) = 167     

        IOPS = 1000 / (3 + 60000/15000/2) = 200

性能指标(Raid 写惩罚)

        在有硬件RAID保护类型的性能的时候,上面介绍过RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RAID10是提供最好的性能和数据保护,不过成本最高等等。其实决定这些性能考虑的因素很简单,它就是RAID Write Penalty(写惩罚)。

        RAID-5 Write Penalty的例子:     存储方案规划的过程中,最基本的考虑因素有两个,性能和容量。性能上的计算看可以分为IOPS和带宽需求。计算IOPS,抛开存储阵列的缓存和前端口不谈。计算后端物理磁盘的IOPS不能简单的把物理磁盘的最大IOPS相加而获得。原因是,对于不同的RAID级别,为了保证当有物理磁盘损坏的情况下可以恢复数据,数据写入的过程中都需要有一些特别的计算。比如对于RAID-5,条带上的任意磁盘上的数据改变,都会重新计算校验位。如下图所示,一个7+1的RAID-5的条带中,七个磁盘存储数据,最后一个磁盘存储校验位。

        对于一个数据的写入,我们假设在第五个磁盘上写入的数据为1111。那么整个RAID-5需要完成写入的过程分为以下几步:    

        1.读取原数据0110,然后与新的数据1111做XOR操作: 0110 XOR 1111 = 1001    

        2.读取原有的校验位0010    

        3.用第一步算出的数值与原校验位再做一次XOR操作: 0010 XOR 1001 = 1011    

        4.然后将1111新数据写入到数据磁盘,将第三步计算出来的新的校验位写入校验盘。 由上述几个步骤可见,对于任何一次写入,在存储端,需要分别进行两次读+两次写,所以说RAID-5的Write Penalty的值是4。

        计算IOPS: 根据上文的描述,在实际存储方案设计的过程中,计算实际可用IOPS的过程中必须纳入RAID的写惩罚计算。

计算的公式如下:

        物理磁盘总的IOPS = 物理磁盘的IOPS × 磁盘数目

        可用的IOPS = (物理磁盘总的IOPS × 写百分比 ÷ RAID写惩罚) + (物理磁盘总的IOPS × 读百分比)

        假设组成RAID-5的物理磁盘总共可以提供500 IOPS,使用该存储的应用程序读写比例是50%/50%,那么对于前端主机而言,实际可用的IOPS是:          

        (500 ×50% ÷ 4)+ ( 500 * 50%) = 312.5 IOPS

存储及数据高可靠

        存储高可靠 9 是怎么计算的:     

        一般而言,几个9的可靠性是对7x24小时不间断运行的系统而言,可以正常提供服务的时间百分比,可以使用公式计算:         

        (总运行时间- 宕机时间)/总运行时间     

        用百分比表示为99.999%的就是5个9了,其意味着一年的宕机时间只有5分钟多一点。

        由于5个9代表着电信设备可靠性的一个标准,在不间断服务的系统指标中经常见到,因此5个9经常作为可靠性比较的一个基准。下表列出了在不同可靠性级别下,对应的宕机时间:

        90%            876 小时(36.5 天)

        95%            438 小时(18.25 天)

        99%            87.6 小时(3.65 天)

        99.9%         8.76 小时

        99.99%        52.56 分钟

        99.999%        (“五个九”)5.256 分钟

        99.9999%        31.536 秒

        因此那些宣称五个九的系统真的可以做到么?

        另外在存储领域还是推荐 大话存储,作者是张东就是传说中的东瓜哥,后来可惜…

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐