下载本文的PDF版本 PDF

标准化存储集群

pNFS会成为并行数据访问的新标准吗?

GARTH GOODSON、SAI SUSARLA和RAHUL IYER,NETWORK APPLIANCE

数据密集型应用,如数据挖掘、电影动画、石油和天然气勘探以及天气建模,生成和处理海量数据。文件数据访问吞吐量对于良好的性能至关重要。为了良好地扩展,这些HPC(高性能计算)应用在众多客户端机器之间分配其计算任务。HPC集群的客户端数量可以从数百个到数千个不等,总I/O需求范围可达每秒数十千兆字节。

为了简化管理,数据通常托管在网络存储服务上,并通过网络协议(如NFS(网络文件系统)和CIFS(通用Internet文件系统))进行访问。为了实现可扩展性,存储服务通常分布在多个节点之间,以利用其聚合的计算、网络和I/O容量。然而,传统的网络文件协议限制客户端通过单个服务器节点访问文件系统中的所有文件。这阻止了存储服务在每个文件的基础上向客户端交付其聚合容量,并限制了可扩展性。为了规避传统网络文件系统协议的单服务器瓶颈,集群文件服务的设计者面临三种选择(如图1所示):

第一种方法将手动数据分发的负担和成本强加给系统管理员。它容易出错,降低可用性,并且随着数据规模的增长,很快变得难以管理。此外,如果没有应用级更改,它无法将大型文件分散到多个服务器上。

第二种方法允许现有的未修改客户端访问分布式存储,因此易于在大型客户端群中部署和维护。然而,它通过强制客户端的数据始终流经单个入口点来限制端到端的可扩展性。

第三种方法消除了这个瓶颈,并实现了真正的数据并行性。因此,它已被多种集群存储解决方案采用。然而,由于缺乏并行数据访问的标准协议,协议和接口仍然是专有的。

虽然自定义客户端访问协议提供了最佳的性能和可扩展性,但它们也存在局限性:它们抑制了跨不同客户端平台和存储架构的互操作性;它们也使得为必须在大型计算集群中长期运行的异构平台开发和维护客户端软件变得困难;最后,使用不灵活接口的客户端无法快速发展以从分布式存储架构的进步中获益,并且需要持续维护。缺乏标准的并行数据访问协议仍然是集群存储在关键任务HPC应用中广泛采用的主要障碍。

pNFS(并行NFS)协议正在作为NFSv4.1规范的一部分进行标准化,以弥合当前NFS协议(版本2、3和4)与并行集群文件系统接口之间的差距。当前的NFS协议强制客户端从单个服务器节点访问给定文件系统卷上的所有文件,这可能成为可扩展性能的瓶颈。然而,作为NFSv4的标准化扩展,pNFS为客户端提供了可扩展的端到端性能以及与各种集群存储服务架构互操作的灵活性。

pNFS协议使客户端能够并行直接访问分布在多个存储服务器上的文件数据。因此,每个客户端都可以在单个文件的粒度上利用集群存储服务的完整聚合带宽。标准协议还提高了存储客户端软件的可管理性,并允许跨异构存储节点的互操作性。最后,pNFS协议向后兼容基本NFSv4协议。这允许新旧客户端和服务器之间的互操作性。

使用pNFS协议,客户端收集关于文件如何在数据服务器之间分布的元数据,称为布局。布局由pNFS服务器在内部维护。一旦客户端理解了文件的布局,它就能够并行直接访问数据服务器。与客户端通过NFS协议从单个NFS服务器访问数据的NFSv4不同,pNFS客户端使用各种存储访问协议与数据服务器通信,包括NFSv4和使用SCSI块命令集或新的SCSI对象命令集的iSCSI/光纤通道。pNFS规范允许添加新的布局分布和存储访问协议。它还为后端存储系统的实现提供了显著的灵活性。

设计原则和通用架构

pNFS的设计遵循三个主要原则:

在架构上,组件包括一个元数据服务器、一些数据服务器和一些NFS客户端。图2提供了pNFS系统组件的概述。

pNFS协议在逻辑上将元数据控制操作与数据访问分离。对于每个文件,元数据服务器维护一个布局,该布局封装了远程数据服务器上标识该文件的位置、条带化参数和任何其他令牌。此外,元数据服务器存储与条带化文件相关的所有目录元数据和文件属性,而数据服务器仅响应I/O请求。另一方面,文件数据通常以循环方式条带化分布在一组数据服务器上。

在高层次上,客户端访问数据的方式如下:

  1. 它打开一个文件并从元数据服务器获取文件的布局;布局描述了文件数据的位置。
  2. 然后,客户端并行地对布局描述的数据服务器执行I/O操作。
  3. 一旦客户端完成其I/O操作,它将在元数据服务器上提交修改后的元数据并关闭文件。

请注意,图2仅代表pNFS架构的抽象视图。在实践中,实际的实现可能具有承担多个角色的组件(例如,充当元数据服务器和数据服务器的单个节点)。此外,可以将架构拆分为通过NFSv4.1协议导出pNFS的前端,以及支持元数据服务器和数据服务器之间同步的后端(例如,通过某种类型的集群文件系统)。

如图2所示,pNFS协议与其他两个协议协同工作:存储访问协议和控制协议。pNFS协议在客户端和元数据服务器之间运行,可以看作是NFSv4,但增加了一些额外的操作,供客户端查询布局并获取数据服务器位置。存储访问协议规定了客户端在获得布局信息后(通过NFS或SCSI)如何直接从数据服务器访问数据。控制协议由存储系统用于同步元数据服务器和数据服务器之间的状态。此协议被有意地保持未指定,以便通过使存储系统的后端可以自由选择何时以及如何同步元数据服务器和数据服务器之间的文件元数据,从而为服务器实现提供灵活性。

布局类型

pNFS布局包含足够的信息,供客户端确定文件的每个条带的存储位置、如何直接访问它以及要使用的存储访问协议。布局将并行I/O直接发送到数据服务器的能力委托给客户端。元数据服务器可以为客户端提供适用于整个文件或其中特定字节范围的布局。客户端可以缓存布局以提高性能。为了保持客户端持有的布局是最新的,元数据服务器必须在对文件的分布进行任何更改之前显式地召回它(例如,在重新条带化或迁移文件之前)。

pNFS协议旨在允许添加新的布局类型及其相关的存储访问协议,这些协议由数据服务器导出的接口确定。目前正在指定三种不同的布局类型:文件、对象和块。它们对应于在数据服务器上存储文件数据的不同方式,并且需要不同的存储访问协议来访问数据。这三种布局类型中的每一种都使用不同的存储访问协议。

当pNFS文件的数据条带化分布在多个NFSv4文件服务器上时,使用文件布局,并使用NFSv4作为存储访问协议。客户端在使用文件布局时,必须使用NFSv4.1读取和写入操作与数据服务器通信,文件布局包含文件条带化分布的数据服务器列表。对于列出的每个数据服务器,文件布局包含每个条带的大小以及要使用的NFS文件句柄。由于文件布局紧凑并且不会随文件更新而更改,因此即使在文件被广泛共享时,文件布局也可以被许多客户端缓存,而不会产生同步开销。文件布局规范是Network Appliance、Sun、IBM等公司共同合作的成果。

相比之下,块布局导出托管在SAN(存储区域网络)设备(如磁盘或RAID阵列)上的LUN(逻辑单元号)。块布局使用iSCSI或光纤通道,并采用SCSI块命令集来访问SAN设备。通过使用块范围,块布局显式地列出了文件中每个部分的物理存储块。因此,布局随着文件大小的增加而增长,并且当元数据服务器分配和释放文件块时,需要更新布局。块布局规范深受EMC的NAS前端HighRoad(也称为MPFS,即多路径文件系统)的影响。

对象布局与文件布局有相似之处。它们使用SCSI对象命令集来访问存储在OSD(基于对象的存储设备)上的数据。与文件布局类似,它们具有紧凑的表示形式,并使用对象ID,类似于文件句柄。但是,也存在一些显著差异。例如,对象布局包含访问OSD上数据所需的安全能力。对象布局还包含更丰富、更复杂的参数来描述条带化模式,而文件布局的设计则更轻量级。对象布局规范深受Panasas公司对卡内基梅隆大学NASD(网络附加安全磁盘)项目的商业化产品PanFS的影响。

为了让客户端定位其数据,数据服务器的名称必须编码在布局中。由于数据服务器通过存储访问协议访问,因此它们的名称特定于该协议使用的寻址方案。数据服务器名称可能很长(例如,基于块的布局使用卷标作为设备名称,其大小可能为几千字节)。因此,pNFS协议通过将设备名称映射到更短的、与布局无关的数据服务器ID来虚拟化设备名称。布局引用这些数据服务器ID。

协议操作

pNFS协议总共向NFSv4添加了六个操作。其中四个操作支持布局(即,获取、返回、召回和提交对文件元数据的更改)。另外两个操作有助于数据服务器的命名(即,将数据服务器ID转换为地址并获取数据服务器列表)。所有新操作都设计为独立于使用的布局类型和数据服务器名称。这是pNFS支持各种后端存储架构的关键。

以下是访问由pNFS分发的文件所涉及的步骤:

  1. 客户端必须获取布局,该布局向客户端描述了在哪里可以找到文件的数据以及如何访问它。
  2. 客户端必须通过在元数据服务器上打开文件来获得适当的访问权限。
  3. 客户端现在可以使用与文件布局类型关联的存储访问协议直接对数据服务器执行I/O操作。
  4. 如果客户端将数据写入数据服务器,则必须将对文件元数据(包括修改时间和大小)的更改提交给元数据服务器。例如,如果客户端写入块设备,则元数据服务器必须跟踪写入的磁盘块如何映射到文件中的数据块。
  5. 客户端可以在完成其I/O操作并提交任何元数据更改后关闭文件并返回布局。

为了减少元数据服务器和客户端维护的状态,客户端可以返回不再使用的布局。同样,元数据服务器可以显式地召回布局。响应于召回,客户端必须在刷新任何脏数据后返回布局。一旦返回,客户端不得尝试通过数据服务器直接访问文件的数据。相反,它应该获取新的布局,或者通过回退到NFSv4风格的I/O来通过元数据服务器访问数据。

文件共享语义

pNFS的目标之一是在客户端的文件共享语义方面向后兼容NFSv4(即,提供接近关闭的一致性)。与某些其他分布式文件系统不同,支持Posix风格的单系统语义到客户端(即,远程写入的即时可见性)不是pNFS的目标。接近关闭的语义保证客户端只有在其他客户端关闭文件后才能观察到其他客户端对文件所做的更改。这些语义足以满足并发写入共享文件很少见的情况。当确实发生写入共享时,pNFS客户端可以通过元数据服务器获取NFSv4字节范围锁,以序列化对同一文件的并发更新,以确保可以使其线性化。

pNFS协议要求客户端在进行新的数据更新后通知元数据服务器,因为这些更新可能尚未对其他客户端可见。此操作通过更改文件大小和时间来使更新可见。为了确保接近关闭的一致性,如果客户端写入了数据,则必须在关闭文件之前发出此操作。此操作允许后端控制协议在同步数据服务器写入与文件元数据更新方面保持延迟,以提高并行性。

由于pNFS客户端直接与各个数据服务器通信,因此它们无法发出跨越多个数据服务器的单个I/O操作。因此,客户端现在负责确保跨越多个数据服务器的写入操作的原子性(跨数据服务器写入)。如果客户端需要原子跨写功能,则它们必须自行实现或回退到使用常规NFSv4。

访问控制和安全性

拥有布局本身并不能赋予客户端访问文件数据的权限。相反,访问检查是通过现有的NFSv4操作(例如,OPEN、LOCK)执行的,并且访问权限是通过这些操作获得的。与NFSv4类似,应该对每个I/O操作执行访问检查,但这并非总是可能的,因为使用了存储访问协议。例如,由于其更受约束的接口,无法对块设备(例如,光纤通道磁盘)进行每个I/O访问检查。在这种情况下,通常由NFS服务器执行的每个I/O访问检查被移动到客户端中。存储系统架构师和消费者在部署此类系统时必须认识到这些权衡。

不同的布局类型需要非常不同的安全性和身份验证模型。例如,块设备唯一存在的安全性和身份验证机制通常在数据服务器或LUN的粒度上运行(例如,SAN上设备的隔离)。当系统面临故障或恶意客户端时,设备级粒度会带来问题。客户端不再局限于仅读取/写入文件系统允许他们访问的文件,而是可以访问和破坏他们有权访问的任何设备上的任何文件。

即使基于文件和基于对象的实现之间的差异很小,但仍然存在差异。OSD(基于对象的存储设备)安全性基于由元数据服务器生成并由数据服务器验证的安全能力。这些能力提供对设备和对象的细粒度访问。基于文件的安全性和身份验证通过RPC(远程过程调用)级别的RPCSEC_GSS框架提供,访问控制由数据服务器通过使用ACL(访问控制列表)和文件权限在文件级别强制执行,类似于NFSv4。通过对元数据服务器的操作(例如,生成ACL更改的CHMOD)对ACL和其他文件权限所做的更改必须生成对数据服务器的适当更改。

缓存布局

同一文件的重叠字节范围的布局可以由多个客户端同时缓存。通常,布局正在使用的I/O类型(读取或写入)不影响多个客户端对布局的可缓存性,因为布局仅描述了在哪里以及如何访问数据。

布局可以在pNFS文件的生命周期内更改。元数据服务器必须在修改所有受影响的缓存布局之前召回它们,而且,客户端保证在修改布局之前将进行显式召回—例如,如果文件正在跨一组新的数据服务器进行条带化。在布局被召回后,客户端始终可以回退到使用NFS协议通过元数据服务器访问数据,就像在常规NFSv4中一样。实际上,在许多错误情况下,回退到通过元数据服务器使用常规NFS访问执行I/O的能力很有用。

系统架构考虑因素

数据路径和控制路径的分离允许数据访问从多个客户端并行同时进行到多个存储端点。它还简化了pNFS协议的设计和实现,并允许使用非NFS数据服务器,例如SAN设备。虽然pNFS架构假设单个服务器负责所有元数据,但它也可以应用于元数据以及数据分布在多个服务器之间的系统。

尽管客户端一次只能挂载单个元数据服务器,但如果每个元数据服务器导出相同的全局命名空间,则客户端可以分布在一组元数据服务器中。在这样的系统中,客户端可以使用pNFS协议与任何可用的元数据服务器通信以获取文件布局。pNFS语义要求元数据服务器强制执行对文件布局的连贯的、与位置无关的访问。元数据服务器可以自由使用任何内部协议来定位文件布局并保持它们在自身之间以及与数据服务器之间的一致性,只要它们提供连贯的布局。

一些集群文件系统提供一个或多个前端服务器,这些服务器向客户端导出连贯的文件命名空间,并通过任何前端服务器提供到存储的路径。在这种情况下,从客户端的角度来看,所有前端服务器都是等效的:客户端看到并能够访问相同的文件系统,而与挂载的前端服务器无关。这些实现可以通过更改发布给客户端的布局中的前端服务器列表来动态地负载均衡客户端对数据服务器的访问。由于所有数据服务器都访问公共底层存储并提供连贯的数据访问,因此可以为同一文件提供列出不同数据服务器组的布局,从而使负载可以更均匀地分布。

客户端/服务器实现

实现pNFS客户端为常规NFSv4客户端增加了一些复杂性。首先,NFSv4.1有许多额外的必需功能;例如,强制使用会话协议为已经有状态的NFSv4客户端增加了复杂性。除了NFSv4.1增加的复杂性之外,pNFS还要求客户端理解通用的pNFS组件(如布局和设备映射)以及用于访问数据服务器的特定于布局的存储访问协议。图3显示了客户端如何构建以合并pNFS所需的额外层的示例。

如图3所示,客户端实现可以将通用的pNFS布局缓存和设备管理与实现特定于布局的设备访问的层分开,后者通过布局驱动程序实现,布局驱动程序与该设备类型的适当子系统接口。例如,块布局驱动程序将需要访问通过SCSI层导出的设备,而文件布局驱动程序将通过基于Sun RPC的NFS访问文件。Linux pNFS客户端正在开发中,采用了这种分离的架构。

在设计pNFS服务器时,最重要的考虑因素是系统将支持的布局类型;毕竟,布局类型决定了客户端到数据服务器的接口,并且对元数据服务器和数据服务器之间运行的控制协议以及安全性/信任模型具有相当大的影响。例如,支持块布局的实现可以轻松地使用现成的块设备作为数据服务器;但是,元数据服务器的实现因需要跟踪所有数据块分配而变得复杂—否则,可以将其卸载到基于对象或基于文件的数据服务器。此外,如前所述,客户端负责强制执行细粒度的访问控制,因为块数据服务器通常无法做到这一点。

文件布局服务器实现可以从各种复杂程度不同的数据服务器构建。最简单的实现可能只是将多个NFSv4.1服务器与负责维护一致属性和状态的基本控制协议拼接在一起。

与客户端类似,pNFS元数据服务器可以使用多层架构,这在将现有集群文件系统后端适配到pNFS时可能特别有用。前端层为客户端提供pNFS接口,而后端与要导出的文件系统(通常是集群文件系统)接口。在高层次上,这类似于当前操作系统如何通过NFS导出本地文件系统。

一次重大转变

随着数据密集型HPC应用对可扩展存储容量和带宽的需求不断增长,能够提供来自客户端的直接并行数据访问的新文件系统协议变得必要。今天的许多系统都限制来自单个客户端通过单个前端服务器的文件访问。这阻止了它在每个文件的基础上利用集群的聚合带宽。

pNFS协议为NFS标准引入了一次重大转变。它提供了一个标准接口,供客户端通过使其能够并行地向多个服务器发出I/O操作,从而更有效地利用这些系统的聚合I/O容量。虽然元数据和数据的分离增加了客户端的复杂性,但它也为存储架构实现提供了灵活性。

虽然并行文件系统今天填补了一个利基市场,但pNFS有机会标准化此接口并有可能使并行文件系统商品化。

GARTH GOODSON自2004年以来一直是Network Appliance的工程技术人员,他参与了IETF pNFS草案规范的制定。他还使用文件布局开发了pNFS服务器原型。他拥有卡内基梅隆大学的博士学位。 

SAI SUSARLA在Network Appliance担任研究员已有三年。他拥有犹他大学计算机科学博士学位。他的研究兴趣包括可扩展的分布式数据访问、自动化数据管理和系统分析。

RAHUL IYER是Network Appliance的研究员,致力于pNFS。他还参与了开源Linux NFSv4.1客户端的开发。在加入Network Appliance之前,他获得了卡内基梅隆大学的硕士学位。

acmqueue

最初发表于Queue杂志,第5卷,第6期
数字图书馆中评论本文





更多相关文章

Pat Helland - 关注你的状态,为了你的心态
随着应用程序进入分布式和可扩展的世界,它们经历了有趣的演变。同样,存储及其同源数据库也与应用程序并肩发展。很多时候,存储和应用程序的语义、性能和故障模型都在微妙地跳舞,以支持不断变化的业务需求和环境挑战。在其中加入规模确实搅动了局面。本文着眼于其中的一些问题及其对系统的影响。


Alex Petrov - 现代存储系统背后的算法
本文仔细研究了现代数据库中常用到的两种存储系统设计方法(读取优化的B树和写入优化的LSM(日志结构合并)树),并描述了它们的使用场景和权衡取舍。


Mihir Nanavati, Malte Schwarzkopf, Jake Wires, Andrew Warfield - 非易失性存储
对于大多数执业计算机科学家的整个职业生涯来说,一个基本的观察结果一直保持不变:CPU的性能明显高于I/O设备,而且价格也更昂贵。CPU可以极高的速率处理数据,同时为多个I/O设备提供服务,这一事实对各种规模系统的硬件和软件设计产生了深远的影响,几乎在我们构建它们的整个过程中都是如此。


Thanumalayan Sankaranarayana Pillai, Vijay Chidambaram, Ramnatthan Alagappan, Samer Al-Kiswany, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau - 崩溃一致性
数据的读取和写入是任何冯·诺依曼计算机最基本的方面之一,但出人意料地微妙且充满细微差别。例如,考虑在具有多个处理器的系统中访问共享内存。虽然程序员最容易理解的简单直观的方法(称为强一致性)是,但许多较弱的模型被广泛使用(例如,x86总存储顺序);这些方法提高了系统性能,但代价是使对系统行为的推理更加复杂且容易出错。





© 保留所有权利。

© . All rights reserved.