转载请注明出处:http://blog.csdn.net/c602273091/article/details/78631295

storage stack

关于存储栈的基础:存储栈包含了完整的服务器、网络部分和服务器虚拟化部分。

http://searchstorage.techtarget.com/definition/storage-stack

HPC I O Stack

目标:相比于直接使用并行文件系统,提高性能和使用效率。同时可以减少运用端需要进行的优化。

–》运用
–》高层次 I/O库:将应用的抽象映射到存储的抽象;使数据提供更加方便。HDF5,netCDF~
–》中间件(MPI)组织多进程的访问(MPI-IO)
–》I/O重定向:应用任务和存储系统,并且集合unaccordinated IO
–》并行文件系统:维护逻辑地址空间,并提供高效的数据访问。
–》I/O 硬件部分

本次的重点就在于并行文件系统~

Cloud Storage Stack

云存储栈:

–》云应用:基于服务的
–》负载均衡:从前端进行负载均衡
–》中间件:数据流的编程模型改进:Map Reduce
–》对象存储:在数据中心进行chunk复制。
–》数据中心:许多服务器和磁盘,共有的或者是私有的

那么接下来主要对文件系统部分进行详细描述。

Storage System Models

本地文件系统/并行/分布式文件系统

本地文件系统:将用户文件映射到数据/属性。为的是进行单个设备的优化,比如有:FFS,LFS,UFS,Ext2/3/4,ZFS,NTFS。。。

http://blog.csdn.net/liuaigui/article/details/6342903

并行文件系统:能够支持多个线程同时访问,将多个文件和目录同时映射到许多设备。并行文件系统将系统展现成单个,逻辑地址单元;将一个文件进行stripe(分割)到不同的磁盘;有比较好的容错性。在存储本地,需要考虑的问题有:块的分配;元数据管理;数据可靠性以及错误校正。之外,还有缓存一致性;high availability;弹性存储;性能。

分布式文件系统:数据虚拟化和负载均衡。coordinate(锁和同步):在用户*享文件;在服务器*享物理存储介质。错误容忍:磁盘的错误;断电;软件错误;网络错误;用户错误。

NAS,SAN,对象存储

为了实现以上功能,进行了如下的操作:
NFS(AFS,通过简单的用户/服务器协议将文件系统export出来);集群NAS(解决扩容问题,提高容错性);SAN FS(export文件系统并且增加并发协议);Object FS(通过抽象数据容器重新思考协议)。

NAS全称是Network attached storage;SAN:Storage Area Network。关于NAS/SAN的区别在于:NAS是文件级别的存储访问;SAN是基于块的存储访问。SAN更方便于扩容;NAS:其主要特征是把存储设备、网络接口和以太网技术集成在一起,直接通过以太网网络存取数据。能够快速实现部门级存储容量需求与文件传输需求。NAS网络存储更具有独立性与良好的兼容性。不但拥有自己的操作系统,同时也无需改造即可用于混合Unix/Windows NT局域网内,与各种操作系统兼容,同时具有很好的灵活性。

http://tech.sina.com.cn/it/2017-05-30/doc-ifyfqqyh9017240.shtml

集群NAS:重定向。将请求进行归档到对应的存储介质(远程存储)。这里本地存储与用户之前采用了无状态的模式,在此模式下,避免了锁和缓存协议。使得本地存储系统负载大大降低。

集群NAS:集群后端。在远程存储系统中采用了缓存机制,以及采用striping来提高带宽,以及RAID来提供容错性能。

SAN共享磁盘文件系统:将本地文件系统扩展到整个共享磁盘,需要对元数据和数据访问进行加锁协议;对称性:在每个文件的客户端里面有一个元数据服务;非对称性:需要对应到专门的元数据服务器上。工业界上的用处比如:GFS(Redhat),MPFSi(EMC),VMFS(Vmware),GPFS(IBM)等等。

https://link.springer.com/chapter/10.1007%2F978-1-4471-3042-0_11

http://www.sansky.net/article/2007-05-12-san-network-storage-sharing-software-place.html

coordination protocol:协调协议。用来处理锁同步等等情况。在NFSv2/3的文件里面是没有锁的协议的,锁的协议是由NLM协议来。元数据服务器(所有文件的元数据都在一个服务器里面,只能在里面进行修改,在更新后会把layout发给客户端);分布式锁管理器(DLM):谁使用某个块就就拥有它的锁,别的想使用的客户会被阻塞。针对一些特别的情况还有锁协议,比如缓存一致性;字节范围,数据范围的锁。

在DLM这里需要进一步说明,一般在共享磁盘数据的时候就会有这个分布式锁管理器。对共享数据中的inode,allocation info,block table等等加锁。如果当有bad client的时候,就会造成巨大的破坏。

基于对象的存储集群系统:(OSD,object storage devices)核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统,每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。对象存储同兼具SAN高速直接访问磁盘特点及NAS的分布式共享特点。

http://www.chinastor.com/a/jishu/OSD.html

所以,在网络存储方面,SAN,NAS,OSD三种,当然DAS这里没说。可以看出OSD是最佳的选择,可扩展性和性能上都是SAN和NAS的优点的结合。在网络存储系统中,要考虑数据一致性,缓存等等问题,所以才会有coordination协议。

并行文件系统

并行文件系统产品中,GPFS,PVFS, PanFs, Lustre是比较常见的。它们都采用了类似于OSD的存储集群管理,但是在元数据管理,容错机制,特征,“turn-key”布置等方面差别很大。

GPFS

给存储节点提供了基于块的访问,使用DLM进行协调;通过SAN存储网络进行数据交互。

http://docs.linuxtone.org/ebooks/autOps/GPFS%BD%E9%C9%DC.pdf

PVFS

用户管理元数据,没有元数据缓存,便于管理;类似于OSD的API进行数据访问;命名空间一致性;缺乏容错机制;单一管理节点,管理节点容易成为系统瓶颈。主要是在HPC的应用。

参考:

http://book.51cto.com/art/201004/196348.htm
http://tech.watchstor.com/storage-systems-118220.htm

PanFS

CMU NASD组研发,正好是我的老师研发的。整个系统提供了基于Obejct的RAID的容错机制。支持原生的Linux文件接口,在硬件部分还集成了电源管理/UPS。整个存储集群分为两类节点:Storage node 和 Manage Node,其比例一般是10:1, 该比例是可以设置。存储节点实现了对象存储。管理节点由四部分组成:PanFS实现了分布式的元数据管理。 SysMgr 通过实现了Paxos选举算法来提供了高可用的集群管理,管理所有的节点。同时提供了PanFS提供了NFS/CIFS 导出接口。PanFS的体系结构也是通常的三部分, 数据服务器,元数据服务器和客户端三部分。 数据服务器对应的StorageNode,元数据服务器对应的是Manage node 里面PanFS,在Manage Node 里提供了SysMgr的管理节点。首先看一下对象存储(Object Storage),所谓对象,就是数据(data)和属性(attributes)的容器. 对象提供两层命名空间(partition Id / Object ID), 对象的接口提供了基本的对象操作:如创建/删除对象,基于byte的读写对象。存储节点用FreeBSD操作系统,使用OSDFS这个自己写的特殊的本地文件系统。数据是通过RAID1或者RAID5来实现容错。小文件用mirror,大文件用strip后的RAID5文件的数据通过在多个对象上strip来实现冗余和高带宽。文件的元数据是通过对象的属性来保存。整个文件系统的元数据是保存在对象的属性中的。SysMgr用来管理整个机器的配置,错误检测。其高可用是通过Client-driven, per-file RAID 客户端实现基于文件的RAID。

参考:

http://blog.csdn.net/changtao381/article/details/8716945

这种系统比较适合HPC的应用。

Lustre文件系统

在PanFS的基础上进行修改,更适合RPC网络协议的用户。

从ClusterFS->SUN->Oracle

以上的设计可以总结如下图:
Parallel File System 并行文件系统

MPI-IO

应用使用适当的模型在它们的领域,I/O系统使用简单的数据模型。基于树的层次化容器;文件:比特流;目录:别的容器的集合。

MPI-IO是专门针对多线程的IO。数据模型和Posix一样,文件都是比特流表示。但是这个IO会进行IO汇集,非连续IO的操作(不是同一个文件),非阻塞IO,针对更底层的设计。因为大多数的IO访问是对多个文件的随机访问,这样直接运行的话,效率底下。所以讲非连续的IO变成连续的IO就显得很有意义。这样可以大大提高带宽。连续的含义一个是指在进程中的文件的连续,另外一个是存储物理空间块之间的连续。所以我们最想要的就是两个同时都是连续的,所以这里会对访问顺序进行一定的调整。有ROMIO、MPI-IO/GPFS IBM,NEC的MPI。

参考链接:

ROMIO MPI-IO:http://www.mcs.anl.gov/romio/

POSIX I/O Extensions: http://www.opengroup.org/platform/hecewg/

LLNL I/O tests (IOR, fdtree, mdtest): http://www.llnl.gov/icc/lc/siop/downloads/download.html

Parallel I/O Benchmarking Consortium (noncontig, mpi-tile-io, mpi-md-test): http://www.mcs.anl.gov/pio-benchmark/

FLASH I/O benchmark: http://www.mcs.anl.gov/pio-benchmark/ http://flash.uchicago.edu/~jbgallag/io_bench/ (original version)

b_eff_io test: http://www.hlrs.de/organization/par/services/models/mpi/b_eff_io/

mpiBLAST: http://www.mpiblast.org

HPC Challenge: http://icl.cs.utk.edu/hpcc/)

SPEC HPC2002: http://www.spec.org/hpc2002/

NAS Parallel Benchmarks: http://www.nas.nasa.gov/Resources/Software/npb.html

为什么讲文件系统没有提及GFS和HDFS?下节再讲。

分类:

技术点:

相关文章: