对象存储:Linux集群中高性能共享存储
Linux集群计算已经改变了高性能计算领域的组成结构:低价的Linux集群系统正在取代那些昂贵的、传统意义上的超级计算机,开始被应用于解决那些更富挑战性的高性能计算问题。
为了充分发挥Linux集群系统的潜在性能,我们需要一种新的存储机制,基于对象的集群存储技术应运而生。基于对象的集群存储技术是一种新存储系统的基础,无论是在存储容量还是在存取性能方面,它都有着良好的可扩展性。这些使得该技术可以满足功能强大的Linux集群系统对存储方面的需求。
近年来,在科学研究和工程计算等领域,高性能集群计算技术的卓越成就大家有目共睹。高性能集群技术已逐渐占据了高性能计算的主导地位,这一点从2003年11月公布的世界高性能计算机排行榜中体现无疑。在该排行榜前500台的超级计算机里,有208台采用了集群系统,集群系统已是当前高性能计算机最流行的体系结构。
现在,这种流行趋势正由科学工程计算领域向商用领域蔓延。地质学家们正致力于研究更强大的地震分析技术,以获取地球结构更精细的图片,从而用来指导油田的钻探和开发;制药公司正在海量的基因库中努力寻求对人类疾病更深入的理解和认识,从而可以开发出更有效的药物或治疗方法;而我们熟知的一些门户网站,如Yahoo和Google,则需要对因特网上浩如烟海的数据进行检索和分类,从而提供给世界各地的人们使用。所有这些领域,都成为Linux集群计算系统大显身手的地方。同时,不得不看到,Linux集群计算的广泛应用也带来了新的挑战。
对共享存储性能的需求不断增长
除了对高性能计算方面的需求外,上述各商业应用还有着一个共同的特点:它们都需要高性能的I/O支持。确保集群系统得到高效使用的必备条件是,它可以对TB(1TB=1000GB,1GB=1000MB)量级的共享数据进行快速访问。没有这一点,集群系统的性能将会大幅降低。为了简化应用系统的开发和维护,这些共享数据必须对计算集群上的所有进程都可用。随着集群系统的规模越来越大、节点越来越多,为实现各个节点对共享数据的高效访问,对存储系统的要求也越来越高,传统的、基于网络的存储系统已经不能提供满足这种共享访问所必需的性能。
例如,在动画生成应用中(这方面最早和最有名的例子是电影《泰坦尼克号》的特效生成,它使用了一个包含160个节点的Linux集群系统),需要将场景生成任务分发到上百个计算节点上,其中每个节点负责生成最终场景中一个单独的部分。共享的场景和人物信息,以及每一帧的渲染指令必须能够为每一个参与计算的节点所访问,而每个节点计算一帧会产生大约50MB的输出。最后各个单独的帧依次组合,得到完整的一幅画面。这样的流程是许多集群计算应用过程中常见的数据访问情形。
传统的共享存储方法的缺点
集群计算的开发者们自然地采用了能够被集群系统中所有节点访问的共享存储系统。让我们先来简单审视一下现有的这种共享存储系统。
首先是文件服务器。它将磁盘阵列(RAID)直接连接到网络系统中的服务器上,这种形式的网络存储结构称为DAS(Direct Attached Storage)。这种结构中,各类存储设备通过IDE或SCSI等I/O总线与文件服务器相连。集群节点的数据访问必须通过文件服务器,然后经过I/O总线访问相应的存储设备。当连结节点数增多时,I/O总线将会成为一个潜在的瓶颈,因此这种存储方式只适用于小规模的集群系统,大一些的集群需要更具扩展性的存储系统。
存储区域网(SAN,Storage-Area Networks)和优化后的直接网络存储,或者网络附加存储(NAS,Network-Attached Storage)结构被用于中等规模的集群系统。SAN是一种类似于普通局域网的高速存储网络,通常由RAID阵列连接光纤通道组成。SAN和集群节点的数据通信通常是由SCSI命令,而不是网络协议实现(如图1所示)。
在NAS存储结构中,存储系统不再通过I/O总线附属于某个特定的服务器或客户机,而是通过网络接口与网络直接相连,集群节点通过网络 #p#page_title#e#协议(如TCP/IP)对共享数据进行访问(如图2所示)。
图1 SAN结构
图2 NAS结构
然而,当集群变得庞大时,这些结构都存在着严重的缺陷。面对众多集群计算应用系统的高并发性和单节点高吞吐需求,无论是SAN还是NAS结构都显得力不从心。由于这两方面的局限,在实际应用中,人们不得不采用数据“搬家”的策略。首先将数据从共享存储系统搬到计算节点上进行处理,处理结束后,再将计算结果从计算节点搬回共享存储系统。在大规模的集群系统上,很多应用程序为了这样的搬家需要花费几个小时甚至更多时间。
一个新兴的标准:基于对象的存储
对众多的集群计算用户来说,一种基于对象的存储技术正作为构建大规模存储系统的基础而悄然兴起。它利用现有的处理技术、网络技术和存储组件,可以通过一种简单便利的方式来获得前所未有的可扩展性和高吞吐量。
这种体系结构的核心是对象,对象是容纳了应用数据和一个可扩展的存储属性的基本容器。传统的文件被分解为一系列存储对象,并分发到一个或多个“智能磁盘”上,这种磁盘被称为基于对象的存储设备(OSD,Object-based Storage Devices)。每一个OSD具备本地处理功能、用于数据和属性缓存的本地内存和本地的网络连接。OSD构成了分布式存储结构的核心,它将许多传统的存储分配行为从文件系统层转移,从而解决了当前存储系统的一个瓶颈问题。
对象属性包括了安全信息和使用状况统计信息,这些信息被用于基于安全认证的访问、服务质量控制,以及为实现OSD间负载均衡所需的数据动态分配。对象存储技术采用了和集群计算系统类似的可扩展结构,当存储容量增加时,它提供的均衡模型能够保证网络带宽和处理能力也同步增长,从而确保系统的可扩展性。
存储网络工业协会(SNIA)和T10标准技术委员会中的联合技术小组正在制定一个关于OSD的标准。标准包括了一个针对iSCSI协议的命令集,它在原有的SCSI命令集中增添了对象扩展功能。同时,对象规范和命令集的制定促使了一种新的智能存储设备的出现,这种智能存储设备可以集成到基于IP的、高性能、大规模并行存储环境中去。目前多个业内领先的存储设备公司都参与了这项工作,其中包括EMC、惠普、IBM、Intel、希捷及Veritas软件公司等。
共享存储的实现
对象存储结构提供了新一代网络存储系统的基础。在新兴的应用中,它和一种可扩展的、为应用程序提供文件系统接口的元数据管理层结合在一起。这一层负责管理诸如目录隶属关系和文件所有权限这样的信息。它同样负责将跨OSD的存储对象(每个存储对象是文件的一部分)联接成一个文件,以确保数据的可靠和可用。集群节点向这一层提出请求,例如打开或关闭文件,通过认证后,接受它能够访问OSD所必需的信息,此后集群节点可以直接对文件进行读写操作,而和元数据管理层无关。
对象存储结构作为可扩展集群文件系统的一部分被实现后,就能够为数以百计的客户端提供高容量的总带宽。简而言之,对象存储技术可以为高性能Linux集群系统提供高性价比的共享存储。