1.5.2 OSD基本概念
与传统的数据访问方法,包括基于块的方法(并行SCSI, SAS, FCP, ATA, SATA)和基于文件的方法(NFS和CIFS)相比,基于对象的数据访问模型是一个新兴的技术。
一个OSD类似于一个逻辑单元。传统的面向块的设备提供作为无关联块阵列组织的数据的访问方式,与其不同,对象存储允许以存储对象的方式来访问数据。存储对象是一个组织数据的虚拟个体,该虚拟个体通过用户以逻辑上相关的方式进行制定。存储对象的空间是由OSD的本身进行分配而不是一个基于主机的文件系统。OSD对所有必要的底层存储设备进行管理,包括空间管理和提供安全功能。因为对于对象没有基于主机的元数据(如inode信息),那么对于应用程序而言获取一个对象的唯一方法就是通过它的对象标识符(OID)获取。图1.1将传统的基于块的磁盘数据结构与基于对象的磁盘数据结构进行了对比。
图1.1 基于块的磁盘与基于对象的磁盘的数据结构对比
OSD中对象的集合,形成一个单一的OID的平坦空间。虚拟文件的层次结构可以通过重新排列对象的指针来模拟,如图1.2所示。
图1.2 传统的层次、平坦模型和虚拟的数据访问模型
对象是在OSD中数据存储的基本单位。每个对象是完备的,它由用户数据、一个OID、元数据(构成对象的块的物理位置)和属性构成,如图1.3所示。
图1.3 包含数据、OID、元数据和属性的对象
ANSI T10 SCSI OSD标准定义了四种不同的对象(见图1.4):
图1.4 对象类型
• 根对象:OSD本身。
• 用户对象:由来自应用程序或客户端的SCSI命令创建。
• 集合对象:一组用户对象,如所有的“*.mp3”对象或所有属于同一个项目的对象。
• 分区对象:为一组用户对象和集合对象的容器,这些用户对象和集合对象具有相同的安全和空间管理的特点,如配额和密钥值这些对象。
文件系统和其他基于主机的数据管理应用程序同时存储用户数据和元数据。OSD的对象属性保证了OSD对象上应用程序的关联性,如根对象、分区对象、集合对象或用户对象。属性可以用来描述一个OSD对象的具体特点,如OSD的对象所占用的总字节数、OSD的对象的逻辑大小,或OSD对象的最后修改时间。
属性页的编号表明了该属性页所关联的OSD对象类型,据ANSI T10 SCSI OSD标准的定义对于每个对象有232种属性页,而每个属性页有232种属性。只有小范围的属性命名空间是由标准预定义的。最主要的部分可以由应用程序定义,这就提供了很好的数据服务和有助于改善服务质量(QoS)。两类属性包括:
• 存储属性(类似的inode):OSD使用其来管理对于数据的块的分配,如OID、数据块的指针、逻辑长度、使用的容量。
• 用户属性:用于应用程序和元数据管理者存储对象相关的更高层次的信息,如密度、容量、性能、成本、适应性、权能、可管理性、可靠性、可用性、可维护性、互操作性、安全性、用电量、配额等。
数据对象的属性和元数据的存储是直接的,并在层与层之间和跨设备自动进行的。当对象通过某个系统层或设备,该系统层能根据它所理解的属性值产生反应。忽略其他属性,不修改也没有动作。因此,标记为高可靠性的对象与标记为临时的对象是被区别对待的。数据的存储属性将高服务级别与数据关联起来,以获得更好的数据缓存、预取和迁移等,如图1.5所示。
图1.5 属性层服务级别
对象存储系统的组成:
①首要成分是对象(object),它包含了数据以及足够的附加信息——对象的属性,对象属性反映对象的某些特征,能帮助OSD进行数据自治和自我管理。
②基于对象的存储设备(OSD),它比现今的磁盘驱动器更加智能,它能储存对象并服务于对象,而不是简单地将数据放到其扇区和磁道上。
③元数据服务器,它保存文件的元数据信息,协调集群环境中的众多计算节点,使它们能共享数据,同时能保持所有节点上的Cache一致性。
④互联网络,它将用户客户端OSD和元数据服务器互联起来。
⑤对象存储文件系统,它与计算节点集成在一起,接受来自操作系统的POSIX文件系统命令和数据,直接寻址OSD,并将对象跨多个OSD条带化分布。
1.对象
对象是对象存储系统中的数据存储的基本单元。和传统存储系统中的基本成分——“文件”或“块”——不一样,对象是数据加上一组描述此数据各方面的属性的一个组合。这些属性反映了对象的某些特征。不像传统的基于“块”的存储系统,存储系统必须集中管理系统中的每一个块的存储属性,对象只需维护它自身的属性,告诉存储系统如何管理这一片特定的数据。这就简化了存储系统的任务,通过把数据管理与数据本身分开而增加了灵活性。
在存储设备中,所有对象都是通过一个128位的对象标识(对象ID号)被访问的。访问时用一个基于对象ID的简单接口——ObjectID, Offset, Length, Operation。其中,Offset是对象内的开始字节地址,Length是要访问的数据字节长度,Operation为操作命令(读、写等)。
2.对象存储设备
对象存储设备代表了下一代用于网络存储的磁盘驱动器。它是一种智能的设备,包含磁盘、处理器、RAM内存和一个网络接口。这就使得OSD能管理本地对象及其属性,并自治地服务和存储来自网络的数据。OSD是对象存储体系结构的基础。
命令集中描述的OSD命令是一组可用于基于对象的存储设备的各种操作。对象存储系统中,众多的OSD直接连接到网络交换机上,统一向客户端提供服务。跟传统的SAN配置不一样,对象存储设备能被直接并行寻址,能达到极高的聚合数据吞吐率。
OSD在对象存储系统中的主要功能分成以下4个方面:
①数据存储——任何存储设备的首要功能是在物理介质上可靠地存取数据。像任何传统的存储设备那样,它必需管理布局在标准的磁道和扇区上的数据。这些数据只能通过它们的对象ID来访问,不能在OSD之外以“块”格式被访问。也就是说,OSD只提供“对象”一级的访问接口。客户端访问OSD时,需要指定一个特定的对象ID、一个在对象内读或写数据的起始地址(offset)、请求的数据块长度(length)以及一个操作命令,才能去访问对象中的数据。在对象存储系统中,用户无法直接获取OSD中某个物理“块”中存储的数据。
②智能布局——OSD用它的内存和处理器去优化数据在磁盘上的布局并从磁盘上预取(pre-fetching)数据。对象的属性提供了对象数据的附加信息,来帮助做出布局决策。例如,当对象的属性说明此对象是一个较大的多媒体数据信息时,OSD可以根据此属性信息,在磁盘上分配一段连续的块空间存放此对象。OSD拥有一个写后缓存(write-behind cache),大量写的数据能被缓冲存放,并被跨磁盘有效地写多遍。同样,OSD能智能地提前读(read-ahead)或预取一个对象的数据块,把它们放在缓存中随时可用,以达到最大的性能。
③元数据管理——OSD管理与其上存储的对象相关的元数据。这些元数据与传统的inode数据相似,包括与对象相关的如时间戳、在磁盘上的逻辑分布、数据块和对象的长度等。在传统的存储系统中,这些数据是由文件服务器(对NAS而言)或主机操作系统(对DAS或SAN而言)管理的。对象存储体系结构把管理存储系统中绝大部分元数据的任务分摊给各个OSD去做,从而降低了客户端和系统元数据服务器的开销,消除了SAN中元数据服务器成为整个系统瓶颈的可能。
④安全性——对象存储通过两个途径使其安全性高于SAN或NAS网络存储系统。首先,对象存储是一个网络存储协议,像其他网络存储协议(SAN或NAS)一样,它很容易受到外部攻击。但对象存储体系结构不需要担心存储系统之外客户端对OSD安全的影响,它使用了一种基于三方通信的安全协议。每一个数据传输的命令,都要核准数据请求及其动作是否合法才能执行。其次,对象存储系统提供给每一个客户端一个安全加密记号。这个记号告诉OSD,允许该计算节点以什么样的特权,在多长时间内,能访问哪一个对象。OSD检查每一个进来的数据传输请求是否有正确的授权,并且拒绝任何不正确的、无效的或过期的请求。这些记号由元数据服务器管理,并实时与客户端和OSD进行信息交互。
3.元数据服务器
为客户端提供元数据,主要是文件的逻辑视图,包括文件与目录的组织关系、每个文件所对应的OSD等。在传统的文件系统中,元数据由本机或者文件服务器负责维护,每次对数据库的操作都要获取元数据。
在对象存储系统中,由于每次操作只有一次对元数据的访问,具体的数据传输都由OSD和客户端通过直接连接进行,大大地减少了元数据的操作,降低了元数据服务器的负担,从而为系统的扩展提供了可能性。
元数据服务器(metadata server, MDS)协调客户端与OBD之间的交互,管理与上层文件系统有关的元数据。它提供下列功能:
①安全策略:包括身份验证、授权证书管理、访问控制等。新的OSD加入网络中时,由元数据服务器对OSD的身份进行验证,并向新加入的OSD颁发证书,元数据服务器周期地更新证书,确保每个OSD都是合法的。同样,当客户端请求访问OSD时,先由元数据服务器进行身份验证,然后才向客户端发送证书授权访问。对文件的每一对Open(Create)/Close操作,客户端只需在Open(Create)时向元数据服务器发请求取得授权证书,此后,客户端将用该证书访问OSD,直到文件被关闭。元数据服务器用访问控制位(access control bit)描述客户的访问权限,包含在证书中返回给客户端。客户端访问OSD时,OSD检查访问控制位,给予用户相应权限。
②Cache一致性维护。在对象存储系统中,Cache一致性是至关重要的,因为Cache存在于客户端、OSD和元数据服务器中,必须保证三者的统一。而数据与元数据在系统中是分开存放的,这使一致性的维护变得更加重要。当客户端请求对一个特定的文件执行一个操作时,MDS检查与此文件相联系的访问允许和访问控制,并提供一个映射图(map)和一个访问能力(capability)给此请求节点。此映射图由OSD列表及它们的IP地址组成,包含了要访问的对象的组成成分等。capability是一个提供给计算节点的安全加密的记号。
③文件目录的元数据管理。MDS将存储系统的文件结构提供给客户端。当客户端请求对一个特定的文件执行一个操作时,MDS检查与此文件相联系的访问允许和访问控制,并提供一个映射图和一个访问能力给此请求节点。此映射图由OSD列表及它们的IP地址组成,包含了要访问的对象的组成成分等。
④负载平衡。MDS与OSD和客户端保持实时的通信联系。MDS掌握了整个对象存储系统中的数据传输负载。另外,客户端在将文件存放在OSD之前,都会到MDS申请存储空间,此时MDS就可以根据整个系统的负载以及系统中对象在各OSD之间的分布,给客户端分配较为合理的OSD用来存储数据,尽量做到对象在各OSD之间平均分布。另外,MDS还可以根据当前客户端请求对象的热度,将热点的对象进行复制,由多个OSD同时向客户端提供服务,减小用户的等待时间,提高系统的集合带宽。
⑤网络连接。为客户端提供认证,为了增强系统的安全性,MDS为客户端提供认证方式。OSD将依据MDS的认证来决定是否为客户端提供服务。
网络连接是对象存储系统的重要组成部分。它将客户端、MDS和OSD连接起来,构成了一个完整的系统。
计算机网络的发展是当前计算机体系结构中发展最快的领域之一。目前常用于网络存储的是光纤通道(FC)和以太网(Ethernet)。由于FC的成本比较高,由其构建的大规模SAN存储系统的价格一直十分昂贵。而以太网的成本较为低廉,性能上也有了很大的改进,在网络存储领域已经占有一席之地。在网络存储系统中使用较为广泛的是千兆位以太网(gigabit Ethernet, GE)。随着万兆位以太网(10 Gb Ethernet)的大规模应用,其成本也会随之降到可接受的程度。使用以太网构建的网络存储系统在数据传输速度上并不亚于光纤通道,而万兆位以太网甚至已经超过了光纤通道。用以太网实现对象存储系统有两个优势:一是廉价的商业化部件;另一个是可以利用大量成熟的基于Ethernet的管理技术和工具。目前影响力较大的集群文件系统公司的Lustre系统和Panasas公司的Activescale Storage Cluster都是构建在以太网之上的。但对象存储系统并不只针对Ethernet,同样可在其他网络(如Myrinet, InfiniBand)上构建。
⑥对象存储文件系统。为了使客户端能直接对OSD读写对象,必须安装一个文件系统。这个分布的文件系统在对象存储体系结构中提供了6个关键功能。
• POSIX文件系统接口——对象存储文件系统必须为其上的应用提供一个透明的接口。文件系统将提供一个POSIX接口给应用层,使应用能实现标准的文件系统操作,如对其下的存储系统做Open, Close, Read和Write文件的操作。此外,它还必须支持一整套用户所期望的访问保护和控制,允许它对任何给定的文件进行互斥或共享的访问。
• 缓存(cache)——对象存储文件系统必须在客户端上提供对读入的数据的缓存,以补充OSD上的缓存,提高系统整体性能。还将有一个写数据的缓存,用来聚集多次写入的数据,以更高效地传输数据到OSD上以及数据在各OSD上的合理布局。第三个缓存是用作存放元数据和安全记号的,这样客户端就能够很快地生成安全命令去访问OSD上它们被允许访问的数据。
• 对象RAID——对象存储文件系统必须能处理以对象为单位的跨多个OSD的对象RAID。不像标准的RAID,对象分布文件系统能对每一个对象用一种不同的数据布局和RAID级别。此分布文件系统取一个对象,将它分成一个或多个组成对象(component object),作为对象的子集送到每一个OSD上。每个组成对象的大小(条带单元的大小)可被指定为对象的一个属性。条带的宽度,也即对象被条带跨越的OSD的个数,也可被指定作为对象的一个属性。因为对象是被并行读写的,所以条带的宽度将直接与对象的带宽关联。如果RAID被规定了,那么奇偶校验位将由客户端提交给对象条带。
• iSCSI ——对象存储文件系统必须有一个iSCSI驱动程序,来将SCSI命令、对象存储系统对命令的扩展以及要在TCP网络上传送的数据打包,才能对OSD进行数据读写。这里的iSCSI驱动程序同时要安装在客户端和OSD上。
• 可安装(mount)——可在所有的客户节点的根目录上安装此文件系统。同时使用访问控制来确定对文件树的不同部分的访问。
• 附加的文件系统接口——除了POSIX接口,还可能要用到其他的应用接口,例如MPI-IO(Message Passing Interface for I/O)。此接口允许并行的应用程序能通过文件系统中的低级的I/O控制命令去完全控制数据跨多个OSD的布局。这对于建立数据分块比较大的RAID,或允许集群将检查点设置到单个文件以达到最大的重新启动的灵活性是很有用的。两种MPI-IO实现被广泛地使用,一种是Argonne实验室的MPICH/ROMIO,另一种是MSTI的MPIPRO,它们都支持MPI标准。